LCOV - code coverage report
Current view: top level - scenegraph - mpeg4_nodes.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 24933 26166 95.3 %
Date: 2021-04-29 23:48:07 Functions: 701 702 99.9 %

          Line data    Source code
       1             : /*
       2             :  *                      GPAC - Multimedia Framework C SDK
       3             :  *
       4             :  *                      Authors: Jean Le Feuvre
       5             :  *                      Copyright (c) Telecom ParisTech 2000-2012
       6             :  *                                      All rights reserved
       7             :  *
       8             :  *  This file is part of GPAC / Scene Graph sub-project
       9             :  *
      10             :  *  GPAC is free software; you can redistribute it and/or modify
      11             :  *  it under the terms of the GNU Lesser General Public License as published by
      12             :  *  the Free Software Foundation; either version 2, or (at your option)
      13             :  *  any later version.
      14             :  *
      15             :  *  GPAC is distributed in the hope that it will be useful,
      16             :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      17             :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18             :  *  GNU Lesser General Public License for more details.
      19             :  *
      20             :  *  You should have received a copy of the GNU Lesser General Public
      21             :  *  License along with this library; see the file COPYING.  If not, write to
      22             :  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
      23             :  *
      24             :  */
      25             : 
      26             : 
      27             : /*
      28             :         DO NOT MOFIFY - File generated on GMT Tue Nov 08 09:10:57 2011
      29             : 
      30             :         BY MPEG4Gen for GPAC Version 0.5.0
      31             : */
      32             : 
      33             : #include <gpac/nodes_mpeg4.h>
      34             : 
      35             : 
      36             : #include <gpac/internal/scenegraph_dev.h>
      37             : 
      38             : #ifndef GPAC_DISABLE_VRML
      39             : 
      40             : /*
      41             :         Anchor Node deletion
      42             : */
      43             : 
      44          21 : static void Anchor_Del(GF_Node *node)
      45             : {
      46             :         M_Anchor *p = (M_Anchor *) node;
      47          21 :         gf_sg_sfstring_del(p->description);
      48          21 :         gf_sg_mfstring_del(p->parameter);
      49          21 :         gf_sg_mfurl_del(p->url);
      50          21 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
      51          21 :         gf_node_free((GF_Node *) p);
      52          21 : }
      53             : 
      54             : static const u16 Anchor_Def2All[] = { 2, 3, 4, 5};
      55             : static const u16 Anchor_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
      56             : static const u16 Anchor_Out2All[] = { 2, 3, 4, 5};
      57             : 
      58             : static u32 Anchor_get_field_count(GF_Node *node, u8 IndexMode)
      59             : {
      60             :         switch(IndexMode) {
      61             :         case GF_SG_FIELD_CODING_IN:
      62             :                 return 7;
      63             :         case GF_SG_FIELD_CODING_DEF:
      64             :                 return 4;
      65             :         case GF_SG_FIELD_CODING_OUT:
      66             :                 return 4;
      67             :         case GF_SG_FIELD_CODING_DYN:
      68             :                 return 0;
      69             :         default:
      70             :                 return 7;
      71             :         }
      72             : }
      73             : 
      74             : static GF_Err Anchor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
      75             : {
      76          48 :         switch(IndexMode) {
      77          13 :         case GF_SG_FIELD_CODING_IN:
      78          13 :                 *allField = Anchor_In2All[inField];
      79             :                 return GF_OK;
      80          28 :         case GF_SG_FIELD_CODING_DEF:
      81          28 :                 *allField = Anchor_Def2All[inField];
      82             :                 return GF_OK;
      83           0 :         case GF_SG_FIELD_CODING_OUT:
      84           0 :                 *allField = Anchor_Out2All[inField];
      85             :                 return GF_OK;
      86             :         default:
      87             :                 return GF_BAD_PARAM;
      88             :         }
      89             : }
      90          77 : static GF_Err Anchor_get_field(GF_Node *node, GF_FieldInfo *info)
      91             : {
      92          77 :         switch (info->fieldIndex) {
      93           2 :         case 0:
      94           2 :                 info->name = "addChildren";
      95           2 :                 info->eventType = GF_SG_EVENT_IN;
      96           2 :                 info->on_event_in = ((M_Anchor *)node)->on_addChildren;
      97           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
      98           2 :                 info->NDTtype = NDT_SF3DNode;
      99           2 :                 info->far_ptr = & ((M_Anchor *)node)->addChildren;
     100           2 :                 return GF_OK;
     101           2 :         case 1:
     102           2 :                 info->name = "removeChildren";
     103           2 :                 info->eventType = GF_SG_EVENT_IN;
     104           2 :                 info->on_event_in = ((M_Anchor *)node)->on_removeChildren;
     105           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
     106           2 :                 info->NDTtype = NDT_SF3DNode;
     107           2 :                 info->far_ptr = & ((M_Anchor *)node)->removeChildren;
     108           2 :                 return GF_OK;
     109          14 :         case 2:
     110          14 :                 info->name = "children";
     111          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     112          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
     113          14 :                 info->NDTtype = NDT_SF3DNode;
     114          14 :                 info->far_ptr = & ((M_Anchor *)node)->children;
     115          14 :                 return GF_OK;
     116          16 :         case 3:
     117          16 :                 info->name = "description";
     118          16 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     119          16 :                 info->fieldType = GF_SG_VRML_SFSTRING;
     120          16 :                 info->far_ptr = & ((M_Anchor *) node)->description;
     121          16 :                 return GF_OK;
     122          16 :         case 4:
     123          16 :                 info->name = "parameter";
     124          16 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     125          16 :                 info->fieldType = GF_SG_VRML_MFSTRING;
     126          16 :                 info->far_ptr = & ((M_Anchor *) node)->parameter;
     127          16 :                 return GF_OK;
     128          23 :         case 5:
     129          23 :                 info->name = "url";
     130          23 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     131          23 :                 info->fieldType = GF_SG_VRML_MFURL;
     132          23 :                 info->far_ptr = & ((M_Anchor *) node)->url;
     133          23 :                 return GF_OK;
     134           4 :         case 6:
     135           4 :                 info->name = "activate";
     136           4 :                 info->eventType = GF_SG_EVENT_IN;
     137           4 :                 info->on_event_in = ((M_Anchor *)node)->on_activate;
     138           4 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     139           4 :                 info->far_ptr = & ((M_Anchor *) node)->activate;
     140           4 :                 return GF_OK;
     141             :         default:
     142             :                 return GF_BAD_PARAM;
     143             :         }
     144             : }
     145             : 
     146             : 
     147          19 : static s32 Anchor_get_field_index_by_name(char *name)
     148             : {
     149          19 :         if (!strcmp("addChildren", name)) return 0;
     150          18 :         if (!strcmp("removeChildren", name)) return 1;
     151          17 :         if (!strcmp("children", name)) return 2;
     152          11 :         if (!strcmp("description", name)) return 3;
     153          10 :         if (!strcmp("parameter", name)) return 4;
     154           9 :         if (!strcmp("url", name)) return 5;
     155           2 :         if (!strcmp("activate", name)) return 6;
     156           0 :         return -1;
     157             : }
     158             : static Bool Anchor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     159             : {
     160             :         switch (FieldIndex) {
     161             :         default:
     162             :                 return 0;
     163             :         }
     164             : }
     165             : 
     166             : 
     167             : 
     168          21 : GF_Node *Anchor_Create()
     169             : {
     170             :         M_Anchor *p;
     171          21 :         GF_SAFEALLOC(p, M_Anchor);
     172          21 :         if(!p) return NULL;
     173          21 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Anchor);
     174          21 :         gf_sg_vrml_parent_setup((GF_Node *) p);
     175             : 
     176             :         /*default field values*/
     177          21 :         return (GF_Node *)p;
     178             : }
     179             : 
     180             : 
     181             : /*
     182             :         AnimationStream Node deletion
     183             : */
     184             : 
     185             : static void AnimationStream_Del(GF_Node *node)
     186             : {
     187             :         M_AnimationStream *p = (M_AnimationStream *) node;
     188         292 :         gf_sg_mfurl_del(p->url);
     189         292 :         gf_node_free((GF_Node *) p);
     190             : }
     191             : 
     192             : static const u16 AnimationStream_Def2All[] = { 0, 1, 2, 3, 4};
     193             : static const u16 AnimationStream_In2All[] = { 0, 1, 2, 3, 4};
     194             : static const u16 AnimationStream_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
     195             : static const u16 AnimationStream_Dyn2All[] = { 1};
     196             : 
     197             : static u32 AnimationStream_get_field_count(GF_Node *node, u8 IndexMode)
     198             : {
     199             :         switch(IndexMode) {
     200             :         case GF_SG_FIELD_CODING_IN:
     201             :                 return 5;
     202             :         case GF_SG_FIELD_CODING_DEF:
     203             :                 return 5;
     204             :         case GF_SG_FIELD_CODING_OUT:
     205             :                 return 7;
     206             :         case GF_SG_FIELD_CODING_DYN:
     207             :                 return 1;
     208             :         default:
     209             :                 return 7;
     210             :         }
     211             : }
     212             : 
     213             : static GF_Err AnimationStream_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     214             : {
     215         148 :         switch(IndexMode) {
     216           0 :         case GF_SG_FIELD_CODING_IN:
     217           0 :                 *allField = AnimationStream_In2All[inField];
     218             :                 return GF_OK;
     219         141 :         case GF_SG_FIELD_CODING_DEF:
     220         141 :                 *allField = AnimationStream_Def2All[inField];
     221             :                 return GF_OK;
     222           0 :         case GF_SG_FIELD_CODING_OUT:
     223           0 :                 *allField = AnimationStream_Out2All[inField];
     224             :                 return GF_OK;
     225           0 :         case GF_SG_FIELD_CODING_DYN:
     226           0 :                 *allField = AnimationStream_Dyn2All[inField];
     227             :                 return GF_OK;
     228             :         default:
     229             :                 return GF_BAD_PARAM;
     230             :         }
     231             : }
     232         503 : static GF_Err AnimationStream_get_field(GF_Node *node, GF_FieldInfo *info)
     233             : {
     234         503 :         switch (info->fieldIndex) {
     235          86 :         case 0:
     236          86 :                 info->name = "loop";
     237          86 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     238          86 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     239          86 :                 info->far_ptr = & ((M_AnimationStream *) node)->loop;
     240          86 :                 return GF_OK;
     241          83 :         case 1:
     242          83 :                 info->name = "speed";
     243          83 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     244          83 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     245          83 :                 info->far_ptr = & ((M_AnimationStream *) node)->speed;
     246          83 :                 return GF_OK;
     247          89 :         case 2:
     248          89 :                 info->name = "startTime";
     249          89 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     250          89 :                 info->fieldType = GF_SG_VRML_SFTIME;
     251          89 :                 info->far_ptr = & ((M_AnimationStream *) node)->startTime;
     252          89 :                 return GF_OK;
     253          89 :         case 3:
     254          89 :                 info->name = "stopTime";
     255          89 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     256          89 :                 info->fieldType = GF_SG_VRML_SFTIME;
     257          89 :                 info->far_ptr = & ((M_AnimationStream *) node)->stopTime;
     258          89 :                 return GF_OK;
     259         126 :         case 4:
     260         126 :                 info->name = "url";
     261         126 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     262         126 :                 info->fieldType = GF_SG_VRML_MFURL;
     263         126 :                 info->far_ptr = & ((M_AnimationStream *) node)->url;
     264         126 :                 return GF_OK;
     265          15 :         case 5:
     266          15 :                 info->name = "duration_changed";
     267          15 :                 info->eventType = GF_SG_EVENT_OUT;
     268          15 :                 info->fieldType = GF_SG_VRML_SFTIME;
     269          15 :                 info->far_ptr = & ((M_AnimationStream *) node)->duration_changed;
     270          15 :                 return GF_OK;
     271          15 :         case 6:
     272          15 :                 info->name = "isActive";
     273          15 :                 info->eventType = GF_SG_EVENT_OUT;
     274          15 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     275          15 :                 info->far_ptr = & ((M_AnimationStream *) node)->isActive;
     276          15 :                 return GF_OK;
     277             :         default:
     278             :                 return GF_BAD_PARAM;
     279             :         }
     280             : }
     281             : 
     282             : 
     283          43 : static s32 AnimationStream_get_field_index_by_name(char *name)
     284             : {
     285          43 :         if (!strcmp("loop", name)) return 0;
     286          40 :         if (!strcmp("speed", name)) return 1;
     287          39 :         if (!strcmp("startTime", name)) return 2;
     288          33 :         if (!strcmp("stopTime", name)) return 3;
     289          27 :         if (!strcmp("url", name)) return 4;
     290           2 :         if (!strcmp("duration_changed", name)) return 5;
     291           1 :         if (!strcmp("isActive", name)) return 6;
     292           0 :         return -1;
     293             : }
     294             : static Bool AnimationStream_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     295             : {
     296          14 :         switch (FieldIndex) {
     297           2 :         case 1:
     298           2 :                 *AType = 7;
     299           2 :                 *QType = 0;
     300           2 :                 *b_min = FIX_MIN;
     301           2 :                 *b_max = FIX_MAX;
     302             :                 return 1;
     303             :         default:
     304             :                 return 0;
     305             :         }
     306             : }
     307             : 
     308             : 
     309             : 
     310         292 : GF_Node *AnimationStream_Create()
     311             : {
     312             :         M_AnimationStream *p;
     313         292 :         GF_SAFEALLOC(p, M_AnimationStream);
     314         292 :         if(!p) return NULL;
     315         292 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AnimationStream);
     316             : 
     317             :         /*default field values*/
     318         292 :         p->speed = FLT2FIX(1.0);
     319         292 :         p->startTime = 0;
     320         292 :         p->stopTime = 0;
     321         292 :         return (GF_Node *)p;
     322             : }
     323             : 
     324             : 
     325             : /*
     326             :         Appearance Node deletion
     327             : */
     328             : 
     329        6273 : static void Appearance_Del(GF_Node *node)
     330             : {
     331             :         M_Appearance *p = (M_Appearance *) node;
     332        6273 :         gf_node_unregister((GF_Node *) p->material, (GF_Node *) p);
     333        6273 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
     334        6273 :         gf_node_unregister((GF_Node *) p->textureTransform, (GF_Node *) p);
     335        6273 :         gf_node_free((GF_Node *) p);
     336        6273 : }
     337             : 
     338             : static const u16 Appearance_Def2All[] = { 0, 1, 2};
     339             : static const u16 Appearance_In2All[] = { 0, 1, 2};
     340             : static const u16 Appearance_Out2All[] = { 0, 1, 2};
     341             : 
     342             : static u32 Appearance_get_field_count(GF_Node *node, u8 IndexMode)
     343             : {
     344        5508 :         switch(IndexMode) {
     345             :         case GF_SG_FIELD_CODING_IN:
     346             :                 return 3;
     347             :         case GF_SG_FIELD_CODING_DEF:
     348             :                 return 3;
     349             :         case GF_SG_FIELD_CODING_OUT:
     350             :                 return 3;
     351           1 :         case GF_SG_FIELD_CODING_DYN:
     352             :                 return 0;
     353             :         default:
     354             :                 return 3;
     355             :         }
     356             : }
     357             : 
     358             : static GF_Err Appearance_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     359             : {
     360        4830 :         switch(IndexMode) {
     361           0 :         case GF_SG_FIELD_CODING_IN:
     362           0 :                 *allField = Appearance_In2All[inField];
     363             :                 return GF_OK;
     364        4827 :         case GF_SG_FIELD_CODING_DEF:
     365        4827 :                 *allField = Appearance_Def2All[inField];
     366             :                 return GF_OK;
     367           0 :         case GF_SG_FIELD_CODING_OUT:
     368           0 :                 *allField = Appearance_Out2All[inField];
     369             :                 return GF_OK;
     370             :         default:
     371             :                 return GF_BAD_PARAM;
     372             :         }
     373             : }
     374             : static GF_Err Appearance_get_field(GF_Node *node, GF_FieldInfo *info)
     375             : {
     376       19277 :         switch (info->fieldIndex) {
     377        8300 :         case 0:
     378        8300 :                 info->name = "material";
     379        8300 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     380        8300 :                 info->fieldType = GF_SG_VRML_SFNODE;
     381        8300 :                 info->NDTtype = NDT_SFMaterialNode;
     382        8300 :                 info->far_ptr = & ((M_Appearance *)node)->material;
     383             :                 return GF_OK;
     384        5973 :         case 1:
     385        5973 :                 info->name = "texture";
     386        5973 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     387        5973 :                 info->fieldType = GF_SG_VRML_SFNODE;
     388        5973 :                 info->NDTtype = NDT_SFTextureNode;
     389        5973 :                 info->far_ptr = & ((M_Appearance *)node)->texture;
     390             :                 return GF_OK;
     391        5004 :         case 2:
     392        5004 :                 info->name = "textureTransform";
     393        5004 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     394        5004 :                 info->fieldType = GF_SG_VRML_SFNODE;
     395        5004 :                 info->NDTtype = NDT_SFTextureTransformNode;
     396        5004 :                 info->far_ptr = & ((M_Appearance *)node)->textureTransform;
     397             :                 return GF_OK;
     398             :         default:
     399             :                 return GF_BAD_PARAM;
     400             :         }
     401             : }
     402             : 
     403             : 
     404        2533 : static s32 Appearance_get_field_index_by_name(char *name)
     405             : {
     406        2533 :         if (!strcmp("material", name)) return 0;
     407         854 :         if (!strcmp("texture", name)) return 1;
     408         118 :         if (!strcmp("textureTransform", name)) return 2;
     409          63 :         return -1;
     410             : }
     411             : static Bool Appearance_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     412             : {
     413             :         switch (FieldIndex) {
     414             :         default:
     415             :                 return 0;
     416             :         }
     417             : }
     418             : 
     419             : 
     420             : 
     421        6273 : GF_Node *Appearance_Create()
     422             : {
     423             :         M_Appearance *p;
     424        6273 :         GF_SAFEALLOC(p, M_Appearance);
     425        6273 :         if(!p) return NULL;
     426        6273 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Appearance);
     427             : 
     428             :         /*default field values*/
     429        6273 :         return (GF_Node *)p;
     430             : }
     431             : 
     432             : 
     433             : /*
     434             :         AudioBuffer Node deletion
     435             : */
     436             : 
     437          45 : static void AudioBuffer_Del(GF_Node *node)
     438             : {
     439             :         M_AudioBuffer *p = (M_AudioBuffer *) node;
     440          45 :         gf_node_unregister_children((GF_Node *) p, p->children);
     441          45 :         gf_sg_mfint32_del(p->phaseGroup);
     442          45 :         gf_node_free((GF_Node *) p);
     443          45 : }
     444             : 
     445             : static const u16 AudioBuffer_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
     446             : static const u16 AudioBuffer_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
     447             : static const u16 AudioBuffer_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     448             : static const u16 AudioBuffer_Dyn2All[] = { 1};
     449             : 
     450             : static u32 AudioBuffer_get_field_count(GF_Node *node, u8 IndexMode)
     451             : {
     452             :         switch(IndexMode) {
     453             :         case GF_SG_FIELD_CODING_IN:
     454             :                 return 8;
     455             :         case GF_SG_FIELD_CODING_DEF:
     456             :                 return 8;
     457             :         case GF_SG_FIELD_CODING_OUT:
     458             :                 return 10;
     459             :         case GF_SG_FIELD_CODING_DYN:
     460             :                 return 1;
     461             :         default:
     462             :                 return 10;
     463             :         }
     464             : }
     465             : 
     466             : static GF_Err AudioBuffer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     467             : {
     468         114 :         switch(IndexMode) {
     469           0 :         case GF_SG_FIELD_CODING_IN:
     470           0 :                 *allField = AudioBuffer_In2All[inField];
     471             :                 return GF_OK;
     472         104 :         case GF_SG_FIELD_CODING_DEF:
     473         104 :                 *allField = AudioBuffer_Def2All[inField];
     474             :                 return GF_OK;
     475           0 :         case GF_SG_FIELD_CODING_OUT:
     476           0 :                 *allField = AudioBuffer_Out2All[inField];
     477             :                 return GF_OK;
     478           0 :         case GF_SG_FIELD_CODING_DYN:
     479           0 :                 *allField = AudioBuffer_Dyn2All[inField];
     480             :                 return GF_OK;
     481             :         default:
     482             :                 return GF_BAD_PARAM;
     483             :         }
     484             : }
     485         395 : static GF_Err AudioBuffer_get_field(GF_Node *node, GF_FieldInfo *info)
     486             : {
     487         395 :         switch (info->fieldIndex) {
     488          49 :         case 0:
     489          49 :                 info->name = "loop";
     490          49 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     491          49 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     492          49 :                 info->far_ptr = & ((M_AudioBuffer *) node)->loop;
     493          49 :                 return GF_OK;
     494          52 :         case 1:
     495          52 :                 info->name = "pitch";
     496          52 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     497          52 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     498          52 :                 info->far_ptr = & ((M_AudioBuffer *) node)->pitch;
     499          52 :                 return GF_OK;
     500          49 :         case 2:
     501          49 :                 info->name = "startTime";
     502          49 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     503          49 :                 info->fieldType = GF_SG_VRML_SFTIME;
     504          49 :                 info->far_ptr = & ((M_AudioBuffer *) node)->startTime;
     505          49 :                 return GF_OK;
     506          49 :         case 3:
     507          49 :                 info->name = "stopTime";
     508          49 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     509          49 :                 info->fieldType = GF_SG_VRML_SFTIME;
     510          49 :                 info->far_ptr = & ((M_AudioBuffer *) node)->stopTime;
     511          49 :                 return GF_OK;
     512          26 :         case 4:
     513          26 :                 info->name = "children";
     514          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     515          26 :                 info->fieldType = GF_SG_VRML_MFNODE;
     516          26 :                 info->NDTtype = NDT_SFAudioNode;
     517          26 :                 info->far_ptr = & ((M_AudioBuffer *)node)->children;
     518          26 :                 return GF_OK;
     519          49 :         case 5:
     520          49 :                 info->name = "numChan";
     521          49 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     522          49 :                 info->fieldType = GF_SG_VRML_SFINT32;
     523          49 :                 info->far_ptr = & ((M_AudioBuffer *) node)->numChan;
     524          49 :                 return GF_OK;
     525          48 :         case 6:
     526          48 :                 info->name = "phaseGroup";
     527          48 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     528          48 :                 info->fieldType = GF_SG_VRML_MFINT32;
     529          48 :                 info->far_ptr = & ((M_AudioBuffer *) node)->phaseGroup;
     530          48 :                 return GF_OK;
     531          49 :         case 7:
     532          49 :                 info->name = "length";
     533          49 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     534          49 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     535          49 :                 info->far_ptr = & ((M_AudioBuffer *) node)->length;
     536          49 :                 return GF_OK;
     537          12 :         case 8:
     538          12 :                 info->name = "duration_changed";
     539          12 :                 info->eventType = GF_SG_EVENT_OUT;
     540          12 :                 info->fieldType = GF_SG_VRML_SFTIME;
     541          12 :                 info->far_ptr = & ((M_AudioBuffer *) node)->duration_changed;
     542          12 :                 return GF_OK;
     543          12 :         case 9:
     544          12 :                 info->name = "isActive";
     545          12 :                 info->eventType = GF_SG_EVENT_OUT;
     546          12 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     547          12 :                 info->far_ptr = & ((M_AudioBuffer *) node)->isActive;
     548          12 :                 return GF_OK;
     549             :         default:
     550             :                 return GF_BAD_PARAM;
     551             :         }
     552             : }
     553             : 
     554             : 
     555          19 : static s32 AudioBuffer_get_field_index_by_name(char *name)
     556             : {
     557          19 :         if (!strcmp("loop", name)) return 0;
     558          17 :         if (!strcmp("pitch", name)) return 1;
     559          13 :         if (!strcmp("startTime", name)) return 2;
     560          11 :         if (!strcmp("stopTime", name)) return 3;
     561           9 :         if (!strcmp("children", name)) return 4;
     562           7 :         if (!strcmp("numChan", name)) return 5;
     563           5 :         if (!strcmp("phaseGroup", name)) return 6;
     564           4 :         if (!strcmp("length", name)) return 7;
     565           2 :         if (!strcmp("duration_changed", name)) return 8;
     566           1 :         if (!strcmp("isActive", name)) return 9;
     567           0 :         return -1;
     568             : }
     569          10 : static Bool AudioBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     570             : {
     571          10 :         switch (FieldIndex) {
     572           1 :         case 1:
     573           1 :                 *AType = 7;
     574           1 :                 *QType = 0;
     575           1 :                 *b_min = FLT2FIX(0);
     576           1 :                 *b_max = FIX_MAX;
     577             :                 return 1;
     578           1 :         case 2:
     579           1 :                 *AType = 0;
     580           1 :                 *QType = 0;
     581           1 :                 *b_min = FLT2FIX(0);
     582           1 :                 *b_max = FIX_MAX;
     583             :                 return 1;
     584           1 :         case 3:
     585           1 :                 *AType = 0;
     586           1 :                 *QType = 0;
     587           1 :                 *b_min = FLT2FIX(0);
     588           1 :                 *b_max = FIX_MAX;
     589             :                 return 1;
     590           1 :         case 5:
     591           1 :                 *AType = 0;
     592           1 :                 *QType = 13;
     593           1 :                 *QT13_bits = 8;
     594           1 :                 *b_min = FLT2FIX(0);
     595           1 :                 *b_max = FLT2FIX(255);
     596             :                 return 1;
     597           1 :         case 7:
     598           1 :                 *AType = 0;
     599           1 :                 *QType = 0;
     600           1 :                 *b_min = FLT2FIX(0);
     601           1 :                 *b_max = FIX_MAX;
     602             :                 return 1;
     603             :         default:
     604             :                 return 0;
     605             :         }
     606             : }
     607             : 
     608             : 
     609             : 
     610          45 : GF_Node *AudioBuffer_Create()
     611             : {
     612             :         M_AudioBuffer *p;
     613          45 :         GF_SAFEALLOC(p, M_AudioBuffer);
     614          45 :         if(!p) return NULL;
     615          45 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioBuffer);
     616             : 
     617             :         /*default field values*/
     618          45 :         p->pitch = FLT2FIX(1);
     619          45 :         p->startTime = 0;
     620          45 :         p->stopTime = 0;
     621          45 :         p->numChan = 1;
     622          45 :         p->phaseGroup.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
     623          45 :         p->phaseGroup.count = 1;
     624          45 :         p->phaseGroup.vals[0] = 1;
     625          45 :         p->length = FLT2FIX(0.0);
     626          45 :         return (GF_Node *)p;
     627             : }
     628             : 
     629             : 
     630             : /*
     631             :         AudioClip Node deletion
     632             : */
     633             : 
     634         262 : static void AudioClip_Del(GF_Node *node)
     635             : {
     636             :         M_AudioClip *p = (M_AudioClip *) node;
     637         262 :         gf_sg_sfstring_del(p->description);
     638         262 :         gf_sg_mfurl_del(p->url);
     639         262 :         gf_node_free((GF_Node *) p);
     640         262 : }
     641             : 
     642             : static const u16 AudioClip_Def2All[] = { 0, 1, 2, 3, 4, 5};
     643             : static const u16 AudioClip_In2All[] = { 0, 1, 2, 3, 4, 5};
     644             : static const u16 AudioClip_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
     645             : static const u16 AudioClip_Dyn2All[] = { 2};
     646             : 
     647             : static u32 AudioClip_get_field_count(GF_Node *node, u8 IndexMode)
     648             : {
     649             :         switch(IndexMode) {
     650             :         case GF_SG_FIELD_CODING_IN:
     651             :                 return 6;
     652             :         case GF_SG_FIELD_CODING_DEF:
     653             :                 return 6;
     654             :         case GF_SG_FIELD_CODING_OUT:
     655             :                 return 8;
     656             :         case GF_SG_FIELD_CODING_DYN:
     657             :                 return 1;
     658             :         default:
     659             :                 return 8;
     660             :         }
     661             : }
     662             : 
     663             : static GF_Err AudioClip_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     664             : {
     665         102 :         switch(IndexMode) {
     666           4 :         case GF_SG_FIELD_CODING_IN:
     667           4 :                 *allField = AudioClip_In2All[inField];
     668             :                 return GF_OK;
     669          90 :         case GF_SG_FIELD_CODING_DEF:
     670          90 :                 *allField = AudioClip_Def2All[inField];
     671             :                 return GF_OK;
     672           0 :         case GF_SG_FIELD_CODING_OUT:
     673           0 :                 *allField = AudioClip_Out2All[inField];
     674             :                 return GF_OK;
     675           0 :         case GF_SG_FIELD_CODING_DYN:
     676           0 :                 *allField = AudioClip_Dyn2All[inField];
     677             :                 return GF_OK;
     678             :         default:
     679             :                 return GF_BAD_PARAM;
     680             :         }
     681             : }
     682         362 : static GF_Err AudioClip_get_field(GF_Node *node, GF_FieldInfo *info)
     683             : {
     684         362 :         switch (info->fieldIndex) {
     685          52 :         case 0:
     686          52 :                 info->name = "description";
     687          52 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     688          52 :                 info->fieldType = GF_SG_VRML_SFSTRING;
     689          52 :                 info->far_ptr = & ((M_AudioClip *) node)->description;
     690          52 :                 return GF_OK;
     691          57 :         case 1:
     692          57 :                 info->name = "loop";
     693          57 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     694          57 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     695          57 :                 info->far_ptr = & ((M_AudioClip *) node)->loop;
     696          57 :                 return GF_OK;
     697          52 :         case 2:
     698          52 :                 info->name = "pitch";
     699          52 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     700          52 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
     701          52 :                 info->far_ptr = & ((M_AudioClip *) node)->pitch;
     702          52 :                 return GF_OK;
     703          58 :         case 3:
     704          58 :                 info->name = "startTime";
     705          58 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     706          58 :                 info->fieldType = GF_SG_VRML_SFTIME;
     707          58 :                 info->far_ptr = & ((M_AudioClip *) node)->startTime;
     708          58 :                 return GF_OK;
     709          54 :         case 4:
     710          54 :                 info->name = "stopTime";
     711          54 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     712          54 :                 info->fieldType = GF_SG_VRML_SFTIME;
     713          54 :                 info->far_ptr = & ((M_AudioClip *) node)->stopTime;
     714          54 :                 return GF_OK;
     715          65 :         case 5:
     716          65 :                 info->name = "url";
     717          65 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     718          65 :                 info->fieldType = GF_SG_VRML_MFURL;
     719          65 :                 info->far_ptr = & ((M_AudioClip *) node)->url;
     720          65 :                 return GF_OK;
     721          12 :         case 6:
     722          12 :                 info->name = "duration_changed";
     723          12 :                 info->eventType = GF_SG_EVENT_OUT;
     724          12 :                 info->fieldType = GF_SG_VRML_SFTIME;
     725          12 :                 info->far_ptr = & ((M_AudioClip *) node)->duration_changed;
     726          12 :                 return GF_OK;
     727          12 :         case 7:
     728          12 :                 info->name = "isActive";
     729          12 :                 info->eventType = GF_SG_EVENT_OUT;
     730          12 :                 info->fieldType = GF_SG_VRML_SFBOOL;
     731          12 :                 info->far_ptr = & ((M_AudioClip *) node)->isActive;
     732          12 :                 return GF_OK;
     733             :         default:
     734             :                 return GF_BAD_PARAM;
     735             :         }
     736             : }
     737             : 
     738             : 
     739          25 : static s32 AudioClip_get_field_index_by_name(char *name)
     740             : {
     741          25 :         if (!strcmp("description", name)) return 0;
     742          24 :         if (!strcmp("loop", name)) return 1;
     743          18 :         if (!strcmp("pitch", name)) return 2;
     744          17 :         if (!strcmp("startTime", name)) return 3;
     745          14 :         if (!strcmp("stopTime", name)) return 4;
     746          12 :         if (!strcmp("url", name)) return 5;
     747           2 :         if (!strcmp("duration_changed", name)) return 6;
     748           1 :         if (!strcmp("isActive", name)) return 7;
     749           0 :         return -1;
     750             : }
     751             : static Bool AudioClip_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     752             : {
     753           8 :         switch (FieldIndex) {
     754           1 :         case 2:
     755           1 :                 *AType = 7;
     756           1 :                 *QType = 0;
     757           1 :                 *b_min = FLT2FIX(0);
     758           1 :                 *b_max = FIX_MAX;
     759             :                 return 1;
     760             :         default:
     761             :                 return 0;
     762             :         }
     763             : }
     764             : 
     765             : 
     766             : 
     767         262 : GF_Node *AudioClip_Create()
     768             : {
     769             :         M_AudioClip *p;
     770         262 :         GF_SAFEALLOC(p, M_AudioClip);
     771         262 :         if(!p) return NULL;
     772         262 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioClip);
     773             : 
     774             :         /*default field values*/
     775         262 :         p->pitch = FLT2FIX(1.0);
     776         262 :         p->startTime = 0;
     777         262 :         p->stopTime = 0;
     778         262 :         return (GF_Node *)p;
     779             : }
     780             : 
     781             : 
     782             : /*
     783             :         AudioDelay Node deletion
     784             : */
     785             : 
     786           1 : static void AudioDelay_Del(GF_Node *node)
     787             : {
     788             :         M_AudioDelay *p = (M_AudioDelay *) node;
     789           1 :         gf_sg_mfint32_del(p->phaseGroup);
     790           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
     791           1 :         gf_node_free((GF_Node *) p);
     792           1 : }
     793             : 
     794             : static const u16 AudioDelay_Def2All[] = { 2, 3, 4, 5};
     795             : static const u16 AudioDelay_In2All[] = { 0, 1, 2, 3};
     796             : static const u16 AudioDelay_Out2All[] = { 2, 3};
     797             : 
     798             : static u32 AudioDelay_get_field_count(GF_Node *node, u8 IndexMode)
     799             : {
     800             :         switch(IndexMode) {
     801             :         case GF_SG_FIELD_CODING_IN:
     802             :                 return 4;
     803             :         case GF_SG_FIELD_CODING_DEF:
     804             :                 return 4;
     805             :         case GF_SG_FIELD_CODING_OUT:
     806             :                 return 2;
     807             :         case GF_SG_FIELD_CODING_DYN:
     808             :                 return 0;
     809             :         default:
     810             :                 return 6;
     811             :         }
     812             : }
     813             : 
     814             : static GF_Err AudioDelay_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     815             : {
     816           6 :         switch(IndexMode) {
     817           0 :         case GF_SG_FIELD_CODING_IN:
     818           0 :                 *allField = AudioDelay_In2All[inField];
     819             :                 return GF_OK;
     820           0 :         case GF_SG_FIELD_CODING_DEF:
     821           0 :                 *allField = AudioDelay_Def2All[inField];
     822             :                 return GF_OK;
     823           0 :         case GF_SG_FIELD_CODING_OUT:
     824           0 :                 *allField = AudioDelay_Out2All[inField];
     825             :                 return GF_OK;
     826             :         default:
     827             :                 return GF_BAD_PARAM;
     828             :         }
     829             : }
     830          12 : static GF_Err AudioDelay_get_field(GF_Node *node, GF_FieldInfo *info)
     831             : {
     832          12 :         switch (info->fieldIndex) {
     833           2 :         case 0:
     834           2 :                 info->name = "addChildren";
     835           2 :                 info->eventType = GF_SG_EVENT_IN;
     836           2 :                 info->on_event_in = ((M_AudioDelay *)node)->on_addChildren;
     837           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
     838           2 :                 info->NDTtype = NDT_SFAudioNode;
     839           2 :                 info->far_ptr = & ((M_AudioDelay *)node)->addChildren;
     840           2 :                 return GF_OK;
     841           2 :         case 1:
     842           2 :                 info->name = "removeChildren";
     843           2 :                 info->eventType = GF_SG_EVENT_IN;
     844           2 :                 info->on_event_in = ((M_AudioDelay *)node)->on_removeChildren;
     845           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
     846           2 :                 info->NDTtype = NDT_SFAudioNode;
     847           2 :                 info->far_ptr = & ((M_AudioDelay *)node)->removeChildren;
     848           2 :                 return GF_OK;
     849           2 :         case 2:
     850           2 :                 info->name = "children";
     851           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     852           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
     853           2 :                 info->NDTtype = NDT_SFAudioNode;
     854           2 :                 info->far_ptr = & ((M_AudioDelay *)node)->children;
     855           2 :                 return GF_OK;
     856           2 :         case 3:
     857           2 :                 info->name = "delay";
     858           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
     859           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
     860           2 :                 info->far_ptr = & ((M_AudioDelay *) node)->delay;
     861           2 :                 return GF_OK;
     862           2 :         case 4:
     863           2 :                 info->name = "numChan";
     864           2 :                 info->eventType = GF_SG_EVENT_FIELD;
     865           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
     866           2 :                 info->far_ptr = & ((M_AudioDelay *) node)->numChan;
     867           2 :                 return GF_OK;
     868           2 :         case 5:
     869           2 :                 info->name = "phaseGroup";
     870           2 :                 info->eventType = GF_SG_EVENT_FIELD;
     871           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
     872           2 :                 info->far_ptr = & ((M_AudioDelay *) node)->phaseGroup;
     873           2 :                 return GF_OK;
     874             :         default:
     875             :                 return GF_BAD_PARAM;
     876             :         }
     877             : }
     878             : 
     879             : 
     880           6 : static s32 AudioDelay_get_field_index_by_name(char *name)
     881             : {
     882           6 :         if (!strcmp("addChildren", name)) return 0;
     883           5 :         if (!strcmp("removeChildren", name)) return 1;
     884           4 :         if (!strcmp("children", name)) return 2;
     885           3 :         if (!strcmp("delay", name)) return 3;
     886           2 :         if (!strcmp("numChan", name)) return 4;
     887           1 :         if (!strcmp("phaseGroup", name)) return 5;
     888           0 :         return -1;
     889             : }
     890             : static Bool AudioDelay_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
     891             : {
     892           6 :         switch (FieldIndex) {
     893           1 :         case 4:
     894           1 :                 *AType = 0;
     895           1 :                 *QType = 13;
     896           1 :                 *QT13_bits = 8;
     897           1 :                 *b_min = FLT2FIX(0);
     898           1 :                 *b_max = FLT2FIX(255);
     899             :                 return 1;
     900           1 :         case 5:
     901           1 :                 *AType = 0;
     902           1 :                 *QType = 13;
     903           1 :                 *QT13_bits = 8;
     904           1 :                 *b_min = FLT2FIX(0);
     905           1 :                 *b_max = FLT2FIX(255);
     906             :                 return 1;
     907             :         default:
     908             :                 return 0;
     909             :         }
     910             : }
     911             : 
     912             : 
     913             : 
     914           1 : GF_Node *AudioDelay_Create()
     915             : {
     916             :         M_AudioDelay *p;
     917           1 :         GF_SAFEALLOC(p, M_AudioDelay);
     918           1 :         if(!p) return NULL;
     919           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioDelay);
     920           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
     921             : 
     922             :         /*default field values*/
     923           1 :         p->delay = 0;
     924           1 :         p->numChan = 1;
     925           1 :         return (GF_Node *)p;
     926             : }
     927             : 
     928             : 
     929             : /*
     930             :         AudioFX Node deletion
     931             : */
     932             : 
     933           1 : static void AudioFX_Del(GF_Node *node)
     934             : {
     935             :         M_AudioFX *p = (M_AudioFX *) node;
     936           1 :         gf_sg_sfstring_del(p->orch);
     937           1 :         gf_sg_sfstring_del(p->score);
     938           1 :         gf_sg_mffloat_del(p->params);
     939           1 :         gf_sg_mfint32_del(p->phaseGroup);
     940           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
     941           1 :         gf_node_free((GF_Node *) p);
     942           1 : }
     943             : 
     944             : static const u16 AudioFX_Def2All[] = { 2, 3, 4, 5, 6, 7};
     945             : static const u16 AudioFX_In2All[] = { 0, 1, 2, 3, 4, 5};
     946             : static const u16 AudioFX_Out2All[] = { 2, 3, 4, 5};
     947             : static const u16 AudioFX_Dyn2All[] = { 5};
     948             : 
     949             : static u32 AudioFX_get_field_count(GF_Node *node, u8 IndexMode)
     950             : {
     951             :         switch(IndexMode) {
     952             :         case GF_SG_FIELD_CODING_IN:
     953             :                 return 6;
     954             :         case GF_SG_FIELD_CODING_DEF:
     955             :                 return 6;
     956             :         case GF_SG_FIELD_CODING_OUT:
     957             :                 return 4;
     958             :         case GF_SG_FIELD_CODING_DYN:
     959             :                 return 1;
     960             :         default:
     961             :                 return 8;
     962             :         }
     963             : }
     964             : 
     965             : static GF_Err AudioFX_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
     966             : {
     967           8 :         switch(IndexMode) {
     968           0 :         case GF_SG_FIELD_CODING_IN:
     969           0 :                 *allField = AudioFX_In2All[inField];
     970             :                 return GF_OK;
     971           0 :         case GF_SG_FIELD_CODING_DEF:
     972           0 :                 *allField = AudioFX_Def2All[inField];
     973             :                 return GF_OK;
     974           0 :         case GF_SG_FIELD_CODING_OUT:
     975           0 :                 *allField = AudioFX_Out2All[inField];
     976             :                 return GF_OK;
     977           0 :         case GF_SG_FIELD_CODING_DYN:
     978           0 :                 *allField = AudioFX_Dyn2All[inField];
     979             :                 return GF_OK;
     980             :         default:
     981             :                 return GF_BAD_PARAM;
     982             :         }
     983             : }
     984          16 : static GF_Err AudioFX_get_field(GF_Node *node, GF_FieldInfo *info)
     985             : {
     986          16 :         switch (info->fieldIndex) {
     987           2 :         case 0:
     988           2 :                 info->name = "addChildren";
     989           2 :                 info->eventType = GF_SG_EVENT_IN;
     990           2 :                 info->on_event_in = ((M_AudioFX *)node)->on_addChildren;
     991           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
     992           2 :                 info->NDTtype = NDT_SFAudioNode;
     993           2 :                 info->far_ptr = & ((M_AudioFX *)node)->addChildren;
     994           2 :                 return GF_OK;
     995           2 :         case 1:
     996           2 :                 info->name = "removeChildren";
     997           2 :                 info->eventType = GF_SG_EVENT_IN;
     998           2 :                 info->on_event_in = ((M_AudioFX *)node)->on_removeChildren;
     999           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1000           2 :                 info->NDTtype = NDT_SFAudioNode;
    1001           2 :                 info->far_ptr = & ((M_AudioFX *)node)->removeChildren;
    1002           2 :                 return GF_OK;
    1003           2 :         case 2:
    1004           2 :                 info->name = "children";
    1005           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1006           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1007           2 :                 info->NDTtype = NDT_SFAudioNode;
    1008           2 :                 info->far_ptr = & ((M_AudioFX *)node)->children;
    1009           2 :                 return GF_OK;
    1010           2 :         case 3:
    1011           2 :                 info->name = "orch";
    1012           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1013           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    1014           2 :                 info->far_ptr = & ((M_AudioFX *) node)->orch;
    1015           2 :                 return GF_OK;
    1016           2 :         case 4:
    1017           2 :                 info->name = "score";
    1018           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1019           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    1020           2 :                 info->far_ptr = & ((M_AudioFX *) node)->score;
    1021           2 :                 return GF_OK;
    1022           2 :         case 5:
    1023           2 :                 info->name = "params";
    1024           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1025           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1026           2 :                 info->far_ptr = & ((M_AudioFX *) node)->params;
    1027           2 :                 return GF_OK;
    1028           2 :         case 6:
    1029           2 :                 info->name = "numChan";
    1030           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    1031           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1032           2 :                 info->far_ptr = & ((M_AudioFX *) node)->numChan;
    1033           2 :                 return GF_OK;
    1034           2 :         case 7:
    1035           2 :                 info->name = "phaseGroup";
    1036           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    1037           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1038           2 :                 info->far_ptr = & ((M_AudioFX *) node)->phaseGroup;
    1039           2 :                 return GF_OK;
    1040             :         default:
    1041             :                 return GF_BAD_PARAM;
    1042             :         }
    1043             : }
    1044             : 
    1045             : 
    1046           8 : static s32 AudioFX_get_field_index_by_name(char *name)
    1047             : {
    1048           8 :         if (!strcmp("addChildren", name)) return 0;
    1049           7 :         if (!strcmp("removeChildren", name)) return 1;
    1050           6 :         if (!strcmp("children", name)) return 2;
    1051           5 :         if (!strcmp("orch", name)) return 3;
    1052           4 :         if (!strcmp("score", name)) return 4;
    1053           3 :         if (!strcmp("params", name)) return 5;
    1054           2 :         if (!strcmp("numChan", name)) return 6;
    1055           1 :         if (!strcmp("phaseGroup", name)) return 7;
    1056           0 :         return -1;
    1057             : }
    1058             : static Bool AudioFX_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1059             : {
    1060           8 :         switch (FieldIndex) {
    1061           1 :         case 5:
    1062           1 :                 *AType = 7;
    1063           1 :                 *QType = 0;
    1064           1 :                 *b_min = FIX_MIN;
    1065           1 :                 *b_max = FIX_MAX;
    1066             :                 return 1;
    1067           1 :         case 6:
    1068           1 :                 *AType = 0;
    1069           1 :                 *QType = 13;
    1070           1 :                 *QT13_bits = 8;
    1071           1 :                 *b_min = FLT2FIX(0);
    1072           1 :                 *b_max = FLT2FIX(255);
    1073             :                 return 1;
    1074           1 :         case 7:
    1075           1 :                 *AType = 0;
    1076           1 :                 *QType = 13;
    1077           1 :                 *QT13_bits = 8;
    1078           1 :                 *b_min = FLT2FIX(0);
    1079           1 :                 *b_max = FLT2FIX(255);
    1080             :                 return 1;
    1081             :         default:
    1082             :                 return 0;
    1083             :         }
    1084             : }
    1085             : 
    1086             : 
    1087             : 
    1088           1 : GF_Node *AudioFX_Create()
    1089             : {
    1090             :         M_AudioFX *p;
    1091           1 :         GF_SAFEALLOC(p, M_AudioFX);
    1092           1 :         if(!p) return NULL;
    1093           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioFX);
    1094           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1095             : 
    1096             :         /*default field values*/
    1097           1 :         p->numChan = 1;
    1098           1 :         return (GF_Node *)p;
    1099             : }
    1100             : 
    1101             : 
    1102             : /*
    1103             :         AudioMix Node deletion
    1104             : */
    1105             : 
    1106           1 : static void AudioMix_Del(GF_Node *node)
    1107             : {
    1108             :         M_AudioMix *p = (M_AudioMix *) node;
    1109           1 :         gf_sg_mffloat_del(p->matrix);
    1110           1 :         gf_sg_mfint32_del(p->phaseGroup);
    1111           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1112           1 :         gf_node_free((GF_Node *) p);
    1113           1 : }
    1114             : 
    1115             : static const u16 AudioMix_Def2All[] = { 2, 3, 4, 5, 6};
    1116             : static const u16 AudioMix_In2All[] = { 0, 1, 2, 3, 4};
    1117             : static const u16 AudioMix_Out2All[] = { 2, 3, 4};
    1118             : static const u16 AudioMix_Dyn2All[] = { 4};
    1119             : 
    1120             : static u32 AudioMix_get_field_count(GF_Node *node, u8 IndexMode)
    1121             : {
    1122             :         switch(IndexMode) {
    1123             :         case GF_SG_FIELD_CODING_IN:
    1124             :                 return 5;
    1125             :         case GF_SG_FIELD_CODING_DEF:
    1126             :                 return 5;
    1127             :         case GF_SG_FIELD_CODING_OUT:
    1128             :                 return 3;
    1129             :         case GF_SG_FIELD_CODING_DYN:
    1130             :                 return 1;
    1131             :         default:
    1132             :                 return 7;
    1133             :         }
    1134             : }
    1135             : 
    1136             : static GF_Err AudioMix_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1137             : {
    1138           7 :         switch(IndexMode) {
    1139           0 :         case GF_SG_FIELD_CODING_IN:
    1140           0 :                 *allField = AudioMix_In2All[inField];
    1141             :                 return GF_OK;
    1142           0 :         case GF_SG_FIELD_CODING_DEF:
    1143           0 :                 *allField = AudioMix_Def2All[inField];
    1144             :                 return GF_OK;
    1145           0 :         case GF_SG_FIELD_CODING_OUT:
    1146           0 :                 *allField = AudioMix_Out2All[inField];
    1147             :                 return GF_OK;
    1148           0 :         case GF_SG_FIELD_CODING_DYN:
    1149           0 :                 *allField = AudioMix_Dyn2All[inField];
    1150             :                 return GF_OK;
    1151             :         default:
    1152             :                 return GF_BAD_PARAM;
    1153             :         }
    1154             : }
    1155          14 : static GF_Err AudioMix_get_field(GF_Node *node, GF_FieldInfo *info)
    1156             : {
    1157          14 :         switch (info->fieldIndex) {
    1158           2 :         case 0:
    1159           2 :                 info->name = "addChildren";
    1160           2 :                 info->eventType = GF_SG_EVENT_IN;
    1161           2 :                 info->on_event_in = ((M_AudioMix *)node)->on_addChildren;
    1162           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1163           2 :                 info->NDTtype = NDT_SFAudioNode;
    1164           2 :                 info->far_ptr = & ((M_AudioMix *)node)->addChildren;
    1165           2 :                 return GF_OK;
    1166           2 :         case 1:
    1167           2 :                 info->name = "removeChildren";
    1168           2 :                 info->eventType = GF_SG_EVENT_IN;
    1169           2 :                 info->on_event_in = ((M_AudioMix *)node)->on_removeChildren;
    1170           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1171           2 :                 info->NDTtype = NDT_SFAudioNode;
    1172           2 :                 info->far_ptr = & ((M_AudioMix *)node)->removeChildren;
    1173           2 :                 return GF_OK;
    1174           2 :         case 2:
    1175           2 :                 info->name = "children";
    1176           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1177           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1178           2 :                 info->NDTtype = NDT_SFAudioNode;
    1179           2 :                 info->far_ptr = & ((M_AudioMix *)node)->children;
    1180           2 :                 return GF_OK;
    1181           2 :         case 3:
    1182           2 :                 info->name = "numInputs";
    1183           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1184           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1185           2 :                 info->far_ptr = & ((M_AudioMix *) node)->numInputs;
    1186           2 :                 return GF_OK;
    1187           2 :         case 4:
    1188           2 :                 info->name = "matrix";
    1189           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1190           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1191           2 :                 info->far_ptr = & ((M_AudioMix *) node)->matrix;
    1192           2 :                 return GF_OK;
    1193           2 :         case 5:
    1194           2 :                 info->name = "numChan";
    1195           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    1196           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1197           2 :                 info->far_ptr = & ((M_AudioMix *) node)->numChan;
    1198           2 :                 return GF_OK;
    1199           2 :         case 6:
    1200           2 :                 info->name = "phaseGroup";
    1201           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    1202           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1203           2 :                 info->far_ptr = & ((M_AudioMix *) node)->phaseGroup;
    1204           2 :                 return GF_OK;
    1205             :         default:
    1206             :                 return GF_BAD_PARAM;
    1207             :         }
    1208             : }
    1209             : 
    1210             : 
    1211           7 : static s32 AudioMix_get_field_index_by_name(char *name)
    1212             : {
    1213           7 :         if (!strcmp("addChildren", name)) return 0;
    1214           6 :         if (!strcmp("removeChildren", name)) return 1;
    1215           5 :         if (!strcmp("children", name)) return 2;
    1216           4 :         if (!strcmp("numInputs", name)) return 3;
    1217           3 :         if (!strcmp("matrix", name)) return 4;
    1218           2 :         if (!strcmp("numChan", name)) return 5;
    1219           1 :         if (!strcmp("phaseGroup", name)) return 6;
    1220           0 :         return -1;
    1221             : }
    1222             : static Bool AudioMix_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1223             : {
    1224           7 :         switch (FieldIndex) {
    1225           1 :         case 3:
    1226           1 :                 *AType = 0;
    1227           1 :                 *QType = 13;
    1228           1 :                 *QT13_bits = 8;
    1229           1 :                 *b_min = FLT2FIX(1);
    1230           1 :                 *b_max = FLT2FIX(255);
    1231             :                 return 1;
    1232           1 :         case 4:
    1233           1 :                 *AType = 7;
    1234           1 :                 *QType = 0;
    1235           1 :                 *b_min = FLT2FIX(0);
    1236           1 :                 *b_max = FLT2FIX(1);
    1237             :                 return 1;
    1238           1 :         case 5:
    1239           1 :                 *AType = 0;
    1240           1 :                 *QType = 13;
    1241           1 :                 *QT13_bits = 8;
    1242           1 :                 *b_min = FLT2FIX(0);
    1243           1 :                 *b_max = FLT2FIX(255);
    1244             :                 return 1;
    1245           1 :         case 6:
    1246           1 :                 *AType = 0;
    1247           1 :                 *QType = 13;
    1248           1 :                 *QT13_bits = 8;
    1249           1 :                 *b_min = FLT2FIX(0);
    1250           1 :                 *b_max = FLT2FIX(255);
    1251             :                 return 1;
    1252             :         default:
    1253             :                 return 0;
    1254             :         }
    1255             : }
    1256             : 
    1257             : 
    1258             : 
    1259           1 : GF_Node *AudioMix_Create()
    1260             : {
    1261             :         M_AudioMix *p;
    1262           1 :         GF_SAFEALLOC(p, M_AudioMix);
    1263           1 :         if(!p) return NULL;
    1264           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioMix);
    1265           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1266             : 
    1267             :         /*default field values*/
    1268           1 :         p->numInputs = 1;
    1269           1 :         p->numChan = 1;
    1270           1 :         return (GF_Node *)p;
    1271             : }
    1272             : 
    1273             : 
    1274             : /*
    1275             :         AudioSource Node deletion
    1276             : */
    1277             : 
    1278          59 : static void AudioSource_Del(GF_Node *node)
    1279             : {
    1280             :         M_AudioSource *p = (M_AudioSource *) node;
    1281          59 :         gf_sg_mfurl_del(p->url);
    1282          59 :         gf_sg_mfint32_del(p->phaseGroup);
    1283          59 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1284          59 :         gf_node_free((GF_Node *) p);
    1285          59 : }
    1286             : 
    1287             : static const u16 AudioSource_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9};
    1288             : static const u16 AudioSource_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    1289             : static const u16 AudioSource_Out2All[] = { 2, 3, 4, 5, 6, 7};
    1290             : static const u16 AudioSource_Dyn2All[] = { 4, 5};
    1291             : 
    1292             : static u32 AudioSource_get_field_count(GF_Node *node, u8 IndexMode)
    1293             : {
    1294             :         switch(IndexMode) {
    1295             :         case GF_SG_FIELD_CODING_IN:
    1296             :                 return 8;
    1297             :         case GF_SG_FIELD_CODING_DEF:
    1298             :                 return 8;
    1299             :         case GF_SG_FIELD_CODING_OUT:
    1300             :                 return 6;
    1301             :         case GF_SG_FIELD_CODING_DYN:
    1302             :                 return 2;
    1303             :         default:
    1304             :                 return 10;
    1305             :         }
    1306             : }
    1307             : 
    1308             : static GF_Err AudioSource_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1309             : {
    1310         136 :         switch(IndexMode) {
    1311           0 :         case GF_SG_FIELD_CODING_IN:
    1312           0 :                 *allField = AudioSource_In2All[inField];
    1313             :                 return GF_OK;
    1314         126 :         case GF_SG_FIELD_CODING_DEF:
    1315         126 :                 *allField = AudioSource_Def2All[inField];
    1316             :                 return GF_OK;
    1317           0 :         case GF_SG_FIELD_CODING_OUT:
    1318           0 :                 *allField = AudioSource_Out2All[inField];
    1319             :                 return GF_OK;
    1320           0 :         case GF_SG_FIELD_CODING_DYN:
    1321           0 :                 *allField = AudioSource_Dyn2All[inField];
    1322             :                 return GF_OK;
    1323             :         default:
    1324             :                 return GF_BAD_PARAM;
    1325             :         }
    1326             : }
    1327         566 : static GF_Err AudioSource_get_field(GF_Node *node, GF_FieldInfo *info)
    1328             : {
    1329         566 :         switch (info->fieldIndex) {
    1330          20 :         case 0:
    1331          20 :                 info->name = "addChildren";
    1332          20 :                 info->eventType = GF_SG_EVENT_IN;
    1333          20 :                 info->on_event_in = ((M_AudioSource *)node)->on_addChildren;
    1334          20 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1335          20 :                 info->NDTtype = NDT_SFAudioNode;
    1336          20 :                 info->far_ptr = & ((M_AudioSource *)node)->addChildren;
    1337          20 :                 return GF_OK;
    1338          20 :         case 1:
    1339          20 :                 info->name = "removeChildren";
    1340          20 :                 info->eventType = GF_SG_EVENT_IN;
    1341          20 :                 info->on_event_in = ((M_AudioSource *)node)->on_removeChildren;
    1342          20 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1343          20 :                 info->NDTtype = NDT_SFAudioNode;
    1344          20 :                 info->far_ptr = & ((M_AudioSource *)node)->removeChildren;
    1345          20 :                 return GF_OK;
    1346          73 :         case 2:
    1347          73 :                 info->name = "children";
    1348          73 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1349          73 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1350          73 :                 info->NDTtype = NDT_SFAudioNode;
    1351          73 :                 info->far_ptr = & ((M_AudioSource *)node)->children;
    1352          73 :                 return GF_OK;
    1353          81 :         case 3:
    1354          81 :                 info->name = "url";
    1355          81 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1356          81 :                 info->fieldType = GF_SG_VRML_MFURL;
    1357          81 :                 info->far_ptr = & ((M_AudioSource *) node)->url;
    1358          81 :                 return GF_OK;
    1359          58 :         case 4:
    1360          58 :                 info->name = "pitch";
    1361          58 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1362          58 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    1363          58 :                 info->far_ptr = & ((M_AudioSource *) node)->pitch;
    1364          58 :                 return GF_OK;
    1365          58 :         case 5:
    1366          58 :                 info->name = "speed";
    1367          58 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1368          58 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    1369          58 :                 info->far_ptr = & ((M_AudioSource *) node)->speed;
    1370          58 :                 return GF_OK;
    1371          64 :         case 6:
    1372          64 :                 info->name = "startTime";
    1373          64 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1374          64 :                 info->fieldType = GF_SG_VRML_SFTIME;
    1375          64 :                 info->far_ptr = & ((M_AudioSource *) node)->startTime;
    1376          64 :                 return GF_OK;
    1377          69 :         case 7:
    1378          69 :                 info->name = "stopTime";
    1379          69 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1380          69 :                 info->fieldType = GF_SG_VRML_SFTIME;
    1381          69 :                 info->far_ptr = & ((M_AudioSource *) node)->stopTime;
    1382          69 :                 return GF_OK;
    1383          65 :         case 8:
    1384          65 :                 info->name = "numChan";
    1385          65 :                 info->eventType = GF_SG_EVENT_FIELD;
    1386          65 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1387          65 :                 info->far_ptr = & ((M_AudioSource *) node)->numChan;
    1388          65 :                 return GF_OK;
    1389          58 :         case 9:
    1390          58 :                 info->name = "phaseGroup";
    1391          58 :                 info->eventType = GF_SG_EVENT_FIELD;
    1392          58 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1393          58 :                 info->far_ptr = & ((M_AudioSource *) node)->phaseGroup;
    1394          58 :                 return GF_OK;
    1395             :         default:
    1396             :                 return GF_BAD_PARAM;
    1397             :         }
    1398             : }
    1399             : 
    1400             : 
    1401          43 : static s32 AudioSource_get_field_index_by_name(char *name)
    1402             : {
    1403          43 :         if (!strcmp("addChildren", name)) return 0;
    1404          42 :         if (!strcmp("removeChildren", name)) return 1;
    1405          41 :         if (!strcmp("children", name)) return 2;
    1406          30 :         if (!strcmp("url", name)) return 3;
    1407          19 :         if (!strcmp("pitch", name)) return 4;
    1408          18 :         if (!strcmp("speed", name)) return 5;
    1409          17 :         if (!strcmp("startTime", name)) return 6;
    1410          12 :         if (!strcmp("stopTime", name)) return 7;
    1411           4 :         if (!strcmp("numChan", name)) return 8;
    1412           1 :         if (!strcmp("phaseGroup", name)) return 9;
    1413           0 :         return -1;
    1414             : }
    1415             : static Bool AudioSource_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1416             : {
    1417          10 :         switch (FieldIndex) {
    1418           1 :         case 4:
    1419           1 :                 *AType = 7;
    1420           1 :                 *QType = 0;
    1421           1 :                 *b_min = FLT2FIX(0);
    1422           1 :                 *b_max = FIX_MAX;
    1423             :                 return 1;
    1424           1 :         case 5:
    1425           1 :                 *AType = 7;
    1426           1 :                 *QType = 0;
    1427           1 :                 *b_min = FLT2FIX(0);
    1428           1 :                 *b_max = FIX_MAX;
    1429             :                 return 1;
    1430           1 :         case 8:
    1431           1 :                 *AType = 0;
    1432           1 :                 *QType = 13;
    1433           1 :                 *QT13_bits = 8;
    1434           1 :                 *b_min = FLT2FIX(0);
    1435           1 :                 *b_max = FLT2FIX(255);
    1436             :                 return 1;
    1437           1 :         case 9:
    1438           1 :                 *AType = 0;
    1439           1 :                 *QType = 13;
    1440           1 :                 *QT13_bits = 8;
    1441           1 :                 *b_min = FLT2FIX(0);
    1442           1 :                 *b_max = FLT2FIX(255);
    1443             :                 return 1;
    1444             :         default:
    1445             :                 return 0;
    1446             :         }
    1447             : }
    1448             : 
    1449             : 
    1450             : 
    1451          59 : GF_Node *AudioSource_Create()
    1452             : {
    1453             :         M_AudioSource *p;
    1454          59 :         GF_SAFEALLOC(p, M_AudioSource);
    1455          59 :         if(!p) return NULL;
    1456          59 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioSource);
    1457          59 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1458             : 
    1459             :         /*default field values*/
    1460          59 :         p->pitch = FLT2FIX(1);
    1461          59 :         p->speed = FLT2FIX(1);
    1462          59 :         p->startTime = 0;
    1463          59 :         p->stopTime = 0;
    1464          59 :         p->numChan = 1;
    1465          59 :         return (GF_Node *)p;
    1466             : }
    1467             : 
    1468             : 
    1469             : /*
    1470             :         AudioSwitch Node deletion
    1471             : */
    1472             : 
    1473           1 : static void AudioSwitch_Del(GF_Node *node)
    1474             : {
    1475             :         M_AudioSwitch *p = (M_AudioSwitch *) node;
    1476           1 :         gf_sg_mfint32_del(p->whichChoice);
    1477           1 :         gf_sg_mfint32_del(p->phaseGroup);
    1478           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1479           1 :         gf_node_free((GF_Node *) p);
    1480           1 : }
    1481             : 
    1482             : static const u16 AudioSwitch_Def2All[] = { 2, 3, 4, 5};
    1483             : static const u16 AudioSwitch_In2All[] = { 0, 1, 2, 3};
    1484             : static const u16 AudioSwitch_Out2All[] = { 2, 3};
    1485             : 
    1486             : static u32 AudioSwitch_get_field_count(GF_Node *node, u8 IndexMode)
    1487             : {
    1488             :         switch(IndexMode) {
    1489             :         case GF_SG_FIELD_CODING_IN:
    1490             :                 return 4;
    1491             :         case GF_SG_FIELD_CODING_DEF:
    1492             :                 return 4;
    1493             :         case GF_SG_FIELD_CODING_OUT:
    1494             :                 return 2;
    1495             :         case GF_SG_FIELD_CODING_DYN:
    1496             :                 return 0;
    1497             :         default:
    1498             :                 return 6;
    1499             :         }
    1500             : }
    1501             : 
    1502             : static GF_Err AudioSwitch_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1503             : {
    1504           6 :         switch(IndexMode) {
    1505           0 :         case GF_SG_FIELD_CODING_IN:
    1506           0 :                 *allField = AudioSwitch_In2All[inField];
    1507             :                 return GF_OK;
    1508           0 :         case GF_SG_FIELD_CODING_DEF:
    1509           0 :                 *allField = AudioSwitch_Def2All[inField];
    1510             :                 return GF_OK;
    1511           0 :         case GF_SG_FIELD_CODING_OUT:
    1512           0 :                 *allField = AudioSwitch_Out2All[inField];
    1513             :                 return GF_OK;
    1514             :         default:
    1515             :                 return GF_BAD_PARAM;
    1516             :         }
    1517             : }
    1518          12 : static GF_Err AudioSwitch_get_field(GF_Node *node, GF_FieldInfo *info)
    1519             : {
    1520          12 :         switch (info->fieldIndex) {
    1521           2 :         case 0:
    1522           2 :                 info->name = "addChildren";
    1523           2 :                 info->eventType = GF_SG_EVENT_IN;
    1524           2 :                 info->on_event_in = ((M_AudioSwitch *)node)->on_addChildren;
    1525           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1526           2 :                 info->NDTtype = NDT_SFAudioNode;
    1527           2 :                 info->far_ptr = & ((M_AudioSwitch *)node)->addChildren;
    1528           2 :                 return GF_OK;
    1529           2 :         case 1:
    1530           2 :                 info->name = "removeChildren";
    1531           2 :                 info->eventType = GF_SG_EVENT_IN;
    1532           2 :                 info->on_event_in = ((M_AudioSwitch *)node)->on_removeChildren;
    1533           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1534           2 :                 info->NDTtype = NDT_SFAudioNode;
    1535           2 :                 info->far_ptr = & ((M_AudioSwitch *)node)->removeChildren;
    1536           2 :                 return GF_OK;
    1537           2 :         case 2:
    1538           2 :                 info->name = "children";
    1539           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1540           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    1541           2 :                 info->NDTtype = NDT_SFAudioNode;
    1542           2 :                 info->far_ptr = & ((M_AudioSwitch *)node)->children;
    1543           2 :                 return GF_OK;
    1544           2 :         case 3:
    1545           2 :                 info->name = "whichChoice";
    1546           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1547           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1548           2 :                 info->far_ptr = & ((M_AudioSwitch *) node)->whichChoice;
    1549           2 :                 return GF_OK;
    1550           2 :         case 4:
    1551           2 :                 info->name = "numChan";
    1552           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    1553           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    1554           2 :                 info->far_ptr = & ((M_AudioSwitch *) node)->numChan;
    1555           2 :                 return GF_OK;
    1556           2 :         case 5:
    1557           2 :                 info->name = "phaseGroup";
    1558           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    1559           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    1560           2 :                 info->far_ptr = & ((M_AudioSwitch *) node)->phaseGroup;
    1561           2 :                 return GF_OK;
    1562             :         default:
    1563             :                 return GF_BAD_PARAM;
    1564             :         }
    1565             : }
    1566             : 
    1567             : 
    1568           6 : static s32 AudioSwitch_get_field_index_by_name(char *name)
    1569             : {
    1570           6 :         if (!strcmp("addChildren", name)) return 0;
    1571           5 :         if (!strcmp("removeChildren", name)) return 1;
    1572           4 :         if (!strcmp("children", name)) return 2;
    1573           3 :         if (!strcmp("whichChoice", name)) return 3;
    1574           2 :         if (!strcmp("numChan", name)) return 4;
    1575           1 :         if (!strcmp("phaseGroup", name)) return 5;
    1576           0 :         return -1;
    1577             : }
    1578             : static Bool AudioSwitch_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1579             : {
    1580           6 :         switch (FieldIndex) {
    1581           1 :         case 3:
    1582           1 :                 *AType = 0;
    1583           1 :                 *QType = 13;
    1584           1 :                 *QT13_bits = 1;
    1585           1 :                 *b_min = FLT2FIX(0);
    1586           1 :                 *b_max = FLT2FIX(1);
    1587             :                 return 1;
    1588           1 :         case 4:
    1589           1 :                 *AType = 0;
    1590           1 :                 *QType = 13;
    1591           1 :                 *QT13_bits = 8;
    1592           1 :                 *b_min = FLT2FIX(0);
    1593           1 :                 *b_max = FLT2FIX(255);
    1594             :                 return 1;
    1595           1 :         case 5:
    1596           1 :                 *AType = 0;
    1597           1 :                 *QType = 13;
    1598           1 :                 *QT13_bits = 8;
    1599           1 :                 *b_min = FLT2FIX(0);
    1600           1 :                 *b_max = FLT2FIX(255);
    1601             :                 return 1;
    1602             :         default:
    1603             :                 return 0;
    1604             :         }
    1605             : }
    1606             : 
    1607             : 
    1608             : 
    1609           1 : GF_Node *AudioSwitch_Create()
    1610             : {
    1611             :         M_AudioSwitch *p;
    1612           1 :         GF_SAFEALLOC(p, M_AudioSwitch);
    1613           1 :         if(!p) return NULL;
    1614           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioSwitch);
    1615           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    1616             : 
    1617             :         /*default field values*/
    1618           1 :         p->numChan = 1;
    1619           1 :         return (GF_Node *)p;
    1620             : }
    1621             : 
    1622             : 
    1623             : /*
    1624             :         Background Node deletion
    1625             : */
    1626             : 
    1627          77 : static void Background_Del(GF_Node *node)
    1628             : {
    1629             :         M_Background *p = (M_Background *) node;
    1630          77 :         gf_sg_mffloat_del(p->groundAngle);
    1631          77 :         gf_sg_mfcolor_del(p->groundColor);
    1632          77 :         gf_sg_mfurl_del(p->backUrl);
    1633          77 :         gf_sg_mfurl_del(p->bottomUrl);
    1634          77 :         gf_sg_mfurl_del(p->frontUrl);
    1635          77 :         gf_sg_mfurl_del(p->leftUrl);
    1636          77 :         gf_sg_mfurl_del(p->rightUrl);
    1637          77 :         gf_sg_mfurl_del(p->topUrl);
    1638          77 :         gf_sg_mffloat_del(p->skyAngle);
    1639          77 :         gf_sg_mfcolor_del(p->skyColor);
    1640          77 :         gf_node_free((GF_Node *) p);
    1641          77 : }
    1642             : 
    1643             : static const u16 Background_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    1644             : static const u16 Background_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    1645             : static const u16 Background_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
    1646             : static const u16 Background_Dyn2All[] = { 1, 2, 9, 10};
    1647             : 
    1648             : static u32 Background_get_field_count(GF_Node *node, u8 IndexMode)
    1649             : {
    1650             :         switch(IndexMode) {
    1651             :         case GF_SG_FIELD_CODING_IN:
    1652             :                 return 11;
    1653             :         case GF_SG_FIELD_CODING_DEF:
    1654             :                 return 10;
    1655             :         case GF_SG_FIELD_CODING_OUT:
    1656             :                 return 11;
    1657             :         case GF_SG_FIELD_CODING_DYN:
    1658             :                 return 4;
    1659             :         default:
    1660             :                 return 12;
    1661             :         }
    1662             : }
    1663             : 
    1664             : static GF_Err Background_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1665             : {
    1666         302 :         switch(IndexMode) {
    1667           0 :         case GF_SG_FIELD_CODING_IN:
    1668           0 :                 *allField = Background_In2All[inField];
    1669             :                 return GF_OK;
    1670         290 :         case GF_SG_FIELD_CODING_DEF:
    1671         290 :                 *allField = Background_Def2All[inField];
    1672             :                 return GF_OK;
    1673           0 :         case GF_SG_FIELD_CODING_OUT:
    1674           0 :                 *allField = Background_Out2All[inField];
    1675             :                 return GF_OK;
    1676           0 :         case GF_SG_FIELD_CODING_DYN:
    1677           0 :                 *allField = Background_Dyn2All[inField];
    1678             :                 return GF_OK;
    1679             :         default:
    1680             :                 return GF_BAD_PARAM;
    1681             :         }
    1682             : }
    1683        1093 : static GF_Err Background_get_field(GF_Node *node, GF_FieldInfo *info)
    1684             : {
    1685        1093 :         switch (info->fieldIndex) {
    1686          25 :         case 0:
    1687          25 :                 info->name = "set_bind";
    1688          25 :                 info->eventType = GF_SG_EVENT_IN;
    1689          25 :                 info->on_event_in = ((M_Background *)node)->on_set_bind;
    1690          25 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1691          25 :                 info->far_ptr = & ((M_Background *) node)->set_bind;
    1692          25 :                 return GF_OK;
    1693         139 :         case 1:
    1694         139 :                 info->name = "groundAngle";
    1695         139 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1696         139 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1697         139 :                 info->far_ptr = & ((M_Background *) node)->groundAngle;
    1698         139 :                 return GF_OK;
    1699         139 :         case 2:
    1700         139 :                 info->name = "groundColor";
    1701         139 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1702         139 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    1703         139 :                 info->far_ptr = & ((M_Background *) node)->groundColor;
    1704         139 :                 return GF_OK;
    1705          82 :         case 3:
    1706          82 :                 info->name = "backUrl";
    1707          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1708          82 :                 info->fieldType = GF_SG_VRML_MFURL;
    1709          82 :                 info->far_ptr = & ((M_Background *) node)->backUrl;
    1710          82 :                 return GF_OK;
    1711          82 :         case 4:
    1712          82 :                 info->name = "bottomUrl";
    1713          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1714          82 :                 info->fieldType = GF_SG_VRML_MFURL;
    1715          82 :                 info->far_ptr = & ((M_Background *) node)->bottomUrl;
    1716          82 :                 return GF_OK;
    1717          85 :         case 5:
    1718          85 :                 info->name = "frontUrl";
    1719          85 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1720          85 :                 info->fieldType = GF_SG_VRML_MFURL;
    1721          85 :                 info->far_ptr = & ((M_Background *) node)->frontUrl;
    1722          85 :                 return GF_OK;
    1723          82 :         case 6:
    1724          82 :                 info->name = "leftUrl";
    1725          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1726          82 :                 info->fieldType = GF_SG_VRML_MFURL;
    1727          82 :                 info->far_ptr = & ((M_Background *) node)->leftUrl;
    1728          82 :                 return GF_OK;
    1729          82 :         case 7:
    1730          82 :                 info->name = "rightUrl";
    1731          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1732          82 :                 info->fieldType = GF_SG_VRML_MFURL;
    1733          82 :                 info->far_ptr = & ((M_Background *) node)->rightUrl;
    1734          82 :                 return GF_OK;
    1735          82 :         case 8:
    1736          82 :                 info->name = "topUrl";
    1737          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1738          82 :                 info->fieldType = GF_SG_VRML_MFURL;
    1739          82 :                 info->far_ptr = & ((M_Background *) node)->topUrl;
    1740          82 :                 return GF_OK;
    1741         139 :         case 9:
    1742         139 :                 info->name = "skyAngle";
    1743         139 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1744         139 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    1745         139 :                 info->far_ptr = & ((M_Background *) node)->skyAngle;
    1746         139 :                 return GF_OK;
    1747         139 :         case 10:
    1748         139 :                 info->name = "skyColor";
    1749         139 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1750         139 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    1751         139 :                 info->far_ptr = & ((M_Background *) node)->skyColor;
    1752         139 :                 return GF_OK;
    1753          17 :         case 11:
    1754          17 :                 info->name = "isBound";
    1755          17 :                 info->eventType = GF_SG_EVENT_OUT;
    1756          17 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1757          17 :                 info->far_ptr = & ((M_Background *) node)->isBound;
    1758          17 :                 return GF_OK;
    1759             :         default:
    1760             :                 return GF_BAD_PARAM;
    1761             :         }
    1762             : }
    1763             : 
    1764             : 
    1765          94 : static s32 Background_get_field_index_by_name(char *name)
    1766             : {
    1767          94 :         if (!strcmp("set_bind", name)) return 0;
    1768          88 :         if (!strcmp("groundAngle", name)) return 1;
    1769          70 :         if (!strcmp("groundColor", name)) return 2;
    1770          52 :         if (!strcmp("backUrl", name)) return 3;
    1771          50 :         if (!strcmp("bottomUrl", name)) return 4;
    1772          48 :         if (!strcmp("frontUrl", name)) return 5;
    1773          43 :         if (!strcmp("leftUrl", name)) return 6;
    1774          41 :         if (!strcmp("rightUrl", name)) return 7;
    1775          39 :         if (!strcmp("topUrl", name)) return 8;
    1776          37 :         if (!strcmp("skyAngle", name)) return 9;
    1777          19 :         if (!strcmp("skyColor", name)) return 10;
    1778           1 :         if (!strcmp("isBound", name)) return 11;
    1779           0 :         return -1;
    1780             : }
    1781             : static Bool Background_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1782             : {
    1783         108 :         switch (FieldIndex) {
    1784          17 :         case 1:
    1785          17 :                 *AType = 8;
    1786          17 :                 *QType = 6;
    1787          17 :                 *b_min = FLT2FIX(0);
    1788          17 :                 *b_max = FLT2FIX(1.5707963);
    1789             :                 return 1;
    1790          25 :         case 2:
    1791          25 :                 *AType = 4;
    1792          25 :                 *QType = 4;
    1793          25 :                 *b_min = FLT2FIX(0);
    1794          25 :                 *b_max = FLT2FIX(1);
    1795             :                 return 1;
    1796          25 :         case 9:
    1797          25 :                 *AType = 8;
    1798          25 :                 *QType = 6;
    1799          25 :                 *b_min = FLT2FIX(0);
    1800          25 :                 *b_max = FLT2FIX(3.14159265);
    1801             :                 return 1;
    1802          33 :         case 10:
    1803          33 :                 *AType = 4;
    1804          33 :                 *QType = 4;
    1805          33 :                 *b_min = FLT2FIX(0);
    1806          33 :                 *b_max = FLT2FIX(1);
    1807             :                 return 1;
    1808             :         default:
    1809             :                 return 0;
    1810             :         }
    1811             : }
    1812             : 
    1813             : 
    1814             : 
    1815          77 : GF_Node *Background_Create()
    1816             : {
    1817             :         M_Background *p;
    1818          77 :         GF_SAFEALLOC(p, M_Background);
    1819          77 :         if(!p) return NULL;
    1820          77 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Background);
    1821             : 
    1822             :         /*default field values*/
    1823          77 :         p->skyColor.vals = (SFColor*)gf_malloc(sizeof(SFColor)*1);
    1824          77 :         p->skyColor.count = 1;
    1825          77 :         p->skyColor.vals[0].red = FLT2FIX(0);
    1826          77 :         p->skyColor.vals[0].green = FLT2FIX(0);
    1827          77 :         p->skyColor.vals[0].blue = FLT2FIX(0);
    1828          77 :         return (GF_Node *)p;
    1829             : }
    1830             : 
    1831             : 
    1832             : /*
    1833             :         Background2D Node deletion
    1834             : */
    1835             : 
    1836             : static void Background2D_Del(GF_Node *node)
    1837             : {
    1838             :         M_Background2D *p = (M_Background2D *) node;
    1839         885 :         gf_sg_mfurl_del(p->url);
    1840         885 :         gf_node_free((GF_Node *) p);
    1841             : }
    1842             : 
    1843             : static const u16 Background2D_Def2All[] = { 1, 2};
    1844             : static const u16 Background2D_In2All[] = { 0, 1, 2};
    1845             : static const u16 Background2D_Out2All[] = { 1, 2, 3};
    1846             : static const u16 Background2D_Dyn2All[] = { 1};
    1847             : 
    1848             : static u32 Background2D_get_field_count(GF_Node *node, u8 IndexMode)
    1849             : {
    1850             :         switch(IndexMode) {
    1851             :         case GF_SG_FIELD_CODING_IN:
    1852             :                 return 3;
    1853             :         case GF_SG_FIELD_CODING_DEF:
    1854             :                 return 2;
    1855             :         case GF_SG_FIELD_CODING_OUT:
    1856             :                 return 3;
    1857             :         case GF_SG_FIELD_CODING_DYN:
    1858             :                 return 1;
    1859             :         default:
    1860             :                 return 4;
    1861             :         }
    1862             : }
    1863             : 
    1864             : static GF_Err Background2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1865             : {
    1866         340 :         switch(IndexMode) {
    1867          84 :         case GF_SG_FIELD_CODING_IN:
    1868          84 :                 *allField = Background2D_In2All[inField];
    1869             :                 return GF_OK;
    1870         252 :         case GF_SG_FIELD_CODING_DEF:
    1871         252 :                 *allField = Background2D_Def2All[inField];
    1872             :                 return GF_OK;
    1873           0 :         case GF_SG_FIELD_CODING_OUT:
    1874           0 :                 *allField = Background2D_Out2All[inField];
    1875             :                 return GF_OK;
    1876           0 :         case GF_SG_FIELD_CODING_DYN:
    1877           0 :                 *allField = Background2D_Dyn2All[inField];
    1878             :                 return GF_OK;
    1879             :         default:
    1880             :                 return GF_BAD_PARAM;
    1881             :         }
    1882             : }
    1883        1691 : static GF_Err Background2D_get_field(GF_Node *node, GF_FieldInfo *info)
    1884             : {
    1885        1691 :         switch (info->fieldIndex) {
    1886         242 :         case 0:
    1887         242 :                 info->name = "set_bind";
    1888         242 :                 info->eventType = GF_SG_EVENT_IN;
    1889         242 :                 info->on_event_in = ((M_Background2D *)node)->on_set_bind;
    1890         242 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1891         242 :                 info->far_ptr = & ((M_Background2D *) node)->set_bind;
    1892         242 :                 return GF_OK;
    1893         908 :         case 1:
    1894         908 :                 info->name = "backColor";
    1895         908 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1896         908 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    1897         908 :                 info->far_ptr = & ((M_Background2D *) node)->backColor;
    1898         908 :                 return GF_OK;
    1899         472 :         case 2:
    1900         472 :                 info->name = "url";
    1901         472 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    1902         472 :                 info->fieldType = GF_SG_VRML_MFURL;
    1903         472 :                 info->far_ptr = & ((M_Background2D *) node)->url;
    1904         472 :                 return GF_OK;
    1905          69 :         case 3:
    1906          69 :                 info->name = "isBound";
    1907          69 :                 info->eventType = GF_SG_EVENT_OUT;
    1908          69 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    1909          69 :                 info->far_ptr = & ((M_Background2D *) node)->isBound;
    1910          69 :                 return GF_OK;
    1911             :         default:
    1912             :                 return GF_BAD_PARAM;
    1913             :         }
    1914             : }
    1915             : 
    1916             : 
    1917         586 : static s32 Background2D_get_field_index_by_name(char *name)
    1918             : {
    1919         586 :         if (!strcmp("set_bind", name)) return 0;
    1920         517 :         if (!strcmp("backColor", name)) return 1;
    1921          92 :         if (!strcmp("url", name)) return 2;
    1922           1 :         if (!strcmp("isBound", name)) return 3;
    1923           0 :         return -1;
    1924             : }
    1925             : static Bool Background2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    1926             : {
    1927          44 :         switch (FieldIndex) {
    1928          41 :         case 1:
    1929          41 :                 *AType = 4;
    1930          41 :                 *QType = 4;
    1931          41 :                 *b_min = FLT2FIX(0);
    1932          41 :                 *b_max = FLT2FIX(1);
    1933             :                 return 1;
    1934             :         default:
    1935             :                 return 0;
    1936             :         }
    1937             : }
    1938             : 
    1939             : 
    1940             : 
    1941         885 : GF_Node *Background2D_Create()
    1942             : {
    1943             :         M_Background2D *p;
    1944         885 :         GF_SAFEALLOC(p, M_Background2D);
    1945         885 :         if(!p) return NULL;
    1946         885 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Background2D);
    1947             : 
    1948             :         /*default field values*/
    1949         885 :         p->backColor.red = FLT2FIX(0);
    1950         885 :         p->backColor.green = FLT2FIX(0);
    1951         885 :         p->backColor.blue = FLT2FIX(0);
    1952         885 :         return (GF_Node *)p;
    1953             : }
    1954             : 
    1955             : 
    1956             : /*
    1957             :         Billboard Node deletion
    1958             : */
    1959             : 
    1960             : static void Billboard_Del(GF_Node *node)
    1961             : {
    1962             :         M_Billboard *p = (M_Billboard *) node;
    1963           4 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    1964           4 :         gf_node_free((GF_Node *) p);
    1965             : }
    1966             : 
    1967             : static const u16 Billboard_Def2All[] = { 2, 3};
    1968             : static const u16 Billboard_In2All[] = { 0, 1, 2, 3};
    1969             : static const u16 Billboard_Out2All[] = { 2, 3};
    1970             : static const u16 Billboard_Dyn2All[] = { 3};
    1971             : 
    1972             : static u32 Billboard_get_field_count(GF_Node *node, u8 IndexMode)
    1973             : {
    1974             :         switch(IndexMode) {
    1975             :         case GF_SG_FIELD_CODING_IN:
    1976             :                 return 4;
    1977             :         case GF_SG_FIELD_CODING_DEF:
    1978             :                 return 2;
    1979             :         case GF_SG_FIELD_CODING_OUT:
    1980             :                 return 2;
    1981             :         case GF_SG_FIELD_CODING_DYN:
    1982             :                 return 1;
    1983             :         default:
    1984             :                 return 4;
    1985             :         }
    1986             : }
    1987             : 
    1988             : static GF_Err Billboard_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    1989             : {
    1990           4 :         switch(IndexMode) {
    1991           0 :         case GF_SG_FIELD_CODING_IN:
    1992           0 :                 *allField = Billboard_In2All[inField];
    1993             :                 return GF_OK;
    1994           0 :         case GF_SG_FIELD_CODING_DEF:
    1995           0 :                 *allField = Billboard_Def2All[inField];
    1996             :                 return GF_OK;
    1997           0 :         case GF_SG_FIELD_CODING_OUT:
    1998           0 :                 *allField = Billboard_Out2All[inField];
    1999             :                 return GF_OK;
    2000           0 :         case GF_SG_FIELD_CODING_DYN:
    2001           0 :                 *allField = Billboard_Dyn2All[inField];
    2002             :                 return GF_OK;
    2003             :         default:
    2004             :                 return GF_BAD_PARAM;
    2005             :         }
    2006             : }
    2007          14 : static GF_Err Billboard_get_field(GF_Node *node, GF_FieldInfo *info)
    2008             : {
    2009          14 :         switch (info->fieldIndex) {
    2010           2 :         case 0:
    2011           2 :                 info->name = "addChildren";
    2012           2 :                 info->eventType = GF_SG_EVENT_IN;
    2013           2 :                 info->on_event_in = ((M_Billboard *)node)->on_addChildren;
    2014           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2015           2 :                 info->NDTtype = NDT_SF3DNode;
    2016           2 :                 info->far_ptr = & ((M_Billboard *)node)->addChildren;
    2017           2 :                 return GF_OK;
    2018           2 :         case 1:
    2019           2 :                 info->name = "removeChildren";
    2020           2 :                 info->eventType = GF_SG_EVENT_IN;
    2021           2 :                 info->on_event_in = ((M_Billboard *)node)->on_removeChildren;
    2022           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2023           2 :                 info->NDTtype = NDT_SF3DNode;
    2024           2 :                 info->far_ptr = & ((M_Billboard *)node)->removeChildren;
    2025           2 :                 return GF_OK;
    2026           5 :         case 2:
    2027           5 :                 info->name = "children";
    2028           5 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2029           5 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2030           5 :                 info->NDTtype = NDT_SF3DNode;
    2031           5 :                 info->far_ptr = & ((M_Billboard *)node)->children;
    2032           5 :                 return GF_OK;
    2033           5 :         case 3:
    2034           5 :                 info->name = "axisOfRotation";
    2035           5 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2036           5 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    2037           5 :                 info->far_ptr = & ((M_Billboard *) node)->axisOfRotation;
    2038           5 :                 return GF_OK;
    2039             :         default:
    2040             :                 return GF_BAD_PARAM;
    2041             :         }
    2042             : }
    2043             : 
    2044             : 
    2045          10 : static s32 Billboard_get_field_index_by_name(char *name)
    2046             : {
    2047          10 :         if (!strcmp("addChildren", name)) return 0;
    2048           9 :         if (!strcmp("removeChildren", name)) return 1;
    2049           8 :         if (!strcmp("children", name)) return 2;
    2050           4 :         if (!strcmp("axisOfRotation", name)) return 3;
    2051           0 :         return -1;
    2052             : }
    2053             : static Bool Billboard_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2054             : {
    2055           4 :         switch (FieldIndex) {
    2056           1 :         case 3:
    2057           1 :                 *AType = 9;
    2058           1 :                 *QType = 9;
    2059             :                 return 1;
    2060             :         default:
    2061             :                 return 0;
    2062             :         }
    2063             : }
    2064             : 
    2065             : 
    2066             : 
    2067           4 : GF_Node *Billboard_Create()
    2068             : {
    2069             :         M_Billboard *p;
    2070           4 :         GF_SAFEALLOC(p, M_Billboard);
    2071           4 :         if(!p) return NULL;
    2072           4 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Billboard);
    2073           4 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    2074             : 
    2075             :         /*default field values*/
    2076           4 :         p->axisOfRotation.x = FLT2FIX(0);
    2077           4 :         p->axisOfRotation.y = FLT2FIX(1);
    2078           4 :         p->axisOfRotation.z = FLT2FIX(0);
    2079           4 :         return (GF_Node *)p;
    2080             : }
    2081             : 
    2082             : 
    2083             : /*
    2084             :         Bitmap Node deletion
    2085             : */
    2086             : 
    2087             : static void Bitmap_Del(GF_Node *node)
    2088             : {
    2089             :         M_Bitmap *p = (M_Bitmap *) node;
    2090         346 :         gf_node_free((GF_Node *) p);
    2091             : }
    2092             : 
    2093             : static const u16 Bitmap_Def2All[] = { 0};
    2094             : static const u16 Bitmap_In2All[] = { 0};
    2095             : static const u16 Bitmap_Out2All[] = { 0};
    2096             : static const u16 Bitmap_Dyn2All[] = { 0};
    2097             : 
    2098             : static u32 Bitmap_get_field_count(GF_Node *node, u8 IndexMode)
    2099             : {
    2100             :         switch(IndexMode) {
    2101             :         case GF_SG_FIELD_CODING_IN:
    2102             :                 return 1;
    2103             :         case GF_SG_FIELD_CODING_DEF:
    2104             :                 return 1;
    2105             :         case GF_SG_FIELD_CODING_OUT:
    2106             :                 return 1;
    2107             :         case GF_SG_FIELD_CODING_DYN:
    2108             :                 return 1;
    2109             :         default:
    2110             :                 return 1;
    2111             :         }
    2112             : }
    2113             : 
    2114             : static GF_Err Bitmap_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2115             : {
    2116          24 :         switch(IndexMode) {
    2117           0 :         case GF_SG_FIELD_CODING_IN:
    2118           0 :                 *allField = Bitmap_In2All[inField];
    2119             :                 return GF_OK;
    2120          23 :         case GF_SG_FIELD_CODING_DEF:
    2121          23 :                 *allField = Bitmap_Def2All[inField];
    2122             :                 return GF_OK;
    2123           0 :         case GF_SG_FIELD_CODING_OUT:
    2124           0 :                 *allField = Bitmap_Out2All[inField];
    2125             :                 return GF_OK;
    2126           0 :         case GF_SG_FIELD_CODING_DYN:
    2127           0 :                 *allField = Bitmap_Dyn2All[inField];
    2128             :                 return GF_OK;
    2129             :         default:
    2130             :                 return GF_BAD_PARAM;
    2131             :         }
    2132             : }
    2133             : static GF_Err Bitmap_get_field(GF_Node *node, GF_FieldInfo *info)
    2134             : {
    2135         108 :         switch (info->fieldIndex) {
    2136         108 :         case 0:
    2137         108 :                 info->name = "scale";
    2138         108 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2139         108 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    2140         108 :                 info->far_ptr = & ((M_Bitmap *) node)->scale;
    2141             :                 return GF_OK;
    2142             :         default:
    2143             :                 return GF_BAD_PARAM;
    2144             :         }
    2145             : }
    2146             : 
    2147             : 
    2148             : static s32 Bitmap_get_field_index_by_name(char *name)
    2149             : {
    2150          19 :         if (!strcmp("scale", name)) return 0;
    2151             :         return -1;
    2152             : }
    2153             : static Bool Bitmap_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2154             : {
    2155           1 :         switch (FieldIndex) {
    2156           1 :         case 0:
    2157           1 :                 *AType = 12;
    2158           1 :                 *QType = 12;
    2159           1 :                 *b_min = FLT2FIX(-1);
    2160           1 :                 *b_max = FIX_MAX;
    2161             :                 return 1;
    2162             :         default:
    2163             :                 return 0;
    2164             :         }
    2165             : }
    2166             : 
    2167             : 
    2168             : 
    2169         346 : GF_Node *Bitmap_Create()
    2170             : {
    2171             :         M_Bitmap *p;
    2172         346 :         GF_SAFEALLOC(p, M_Bitmap);
    2173         346 :         if(!p) return NULL;
    2174         346 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Bitmap);
    2175             : 
    2176             :         /*default field values*/
    2177         346 :         p->scale.x = FLT2FIX(-1);
    2178         346 :         p->scale.y = FLT2FIX(-1);
    2179         346 :         return (GF_Node *)p;
    2180             : }
    2181             : 
    2182             : 
    2183             : /*
    2184             :         Box Node deletion
    2185             : */
    2186             : 
    2187             : static void Box_Del(GF_Node *node)
    2188             : {
    2189             :         M_Box *p = (M_Box *) node;
    2190         115 :         gf_node_free((GF_Node *) p);
    2191             : }
    2192             : 
    2193             : static const u16 Box_Def2All[] = { 0};
    2194             : 
    2195             : static u32 Box_get_field_count(GF_Node *node, u8 IndexMode)
    2196             : {
    2197          77 :         switch(IndexMode) {
    2198             :         case GF_SG_FIELD_CODING_IN:
    2199             :                 return 0;
    2200          56 :         case GF_SG_FIELD_CODING_DEF:
    2201             :                 return 1;
    2202             :         case GF_SG_FIELD_CODING_OUT:
    2203             :                 return 0;
    2204             :         case GF_SG_FIELD_CODING_DYN:
    2205             :                 return 0;
    2206          18 :         default:
    2207             :                 return 1;
    2208             :         }
    2209             : }
    2210             : 
    2211             : static GF_Err Box_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2212             : {
    2213          36 :         switch(IndexMode) {
    2214          35 :         case GF_SG_FIELD_CODING_DEF:
    2215          35 :                 *allField = Box_Def2All[inField];
    2216             :                 return GF_OK;
    2217             :         default:
    2218             :                 return GF_BAD_PARAM;
    2219             :         }
    2220             : }
    2221             : static GF_Err Box_get_field(GF_Node *node, GF_FieldInfo *info)
    2222             : {
    2223         180 :         switch (info->fieldIndex) {
    2224         180 :         case 0:
    2225         180 :                 info->name = "size";
    2226         180 :                 info->eventType = GF_SG_EVENT_FIELD;
    2227         180 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    2228         180 :                 info->far_ptr = & ((M_Box *) node)->size;
    2229             :                 return GF_OK;
    2230             :         default:
    2231             :                 return GF_BAD_PARAM;
    2232             :         }
    2233             : }
    2234             : 
    2235             : 
    2236             : static s32 Box_get_field_index_by_name(char *name)
    2237             : {
    2238          62 :         if (!strcmp("size", name)) return 0;
    2239             :         return -1;
    2240             : }
    2241             : static Bool Box_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2242             : {
    2243           9 :         switch (FieldIndex) {
    2244           9 :         case 0:
    2245           9 :                 *AType = 0;
    2246           9 :                 *QType = 11;
    2247           9 :                 *b_min = FLT2FIX(0);
    2248           9 :                 *b_max = FIX_MAX;
    2249             :                 return 1;
    2250             :         default:
    2251             :                 return 0;
    2252             :         }
    2253             : }
    2254             : 
    2255             : 
    2256             : 
    2257         115 : GF_Node *Box_Create()
    2258             : {
    2259             :         M_Box *p;
    2260         115 :         GF_SAFEALLOC(p, M_Box);
    2261         115 :         if(!p) return NULL;
    2262         115 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Box);
    2263             : 
    2264             :         /*default field values*/
    2265         115 :         p->size.x = FLT2FIX(2);
    2266         115 :         p->size.y = FLT2FIX(2);
    2267         115 :         p->size.z = FLT2FIX(2);
    2268         115 :         return (GF_Node *)p;
    2269             : }
    2270             : 
    2271             : 
    2272             : /*
    2273             :         Circle Node deletion
    2274             : */
    2275             : 
    2276             : static void Circle_Del(GF_Node *node)
    2277             : {
    2278             :         M_Circle *p = (M_Circle *) node;
    2279        1144 :         gf_node_free((GF_Node *) p);
    2280             : }
    2281             : 
    2282             : static const u16 Circle_Def2All[] = { 0};
    2283             : static const u16 Circle_In2All[] = { 0};
    2284             : static const u16 Circle_Out2All[] = { 0};
    2285             : static const u16 Circle_Dyn2All[] = { 0};
    2286             : 
    2287             : static u32 Circle_get_field_count(GF_Node *node, u8 IndexMode)
    2288             : {
    2289             :         switch(IndexMode) {
    2290             :         case GF_SG_FIELD_CODING_IN:
    2291             :                 return 1;
    2292             :         case GF_SG_FIELD_CODING_DEF:
    2293             :                 return 1;
    2294             :         case GF_SG_FIELD_CODING_OUT:
    2295             :                 return 1;
    2296             :         case GF_SG_FIELD_CODING_DYN:
    2297             :                 return 1;
    2298             :         default:
    2299             :                 return 1;
    2300             :         }
    2301             : }
    2302             : 
    2303             : static GF_Err Circle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2304             : {
    2305         110 :         switch(IndexMode) {
    2306           0 :         case GF_SG_FIELD_CODING_IN:
    2307           0 :                 *allField = Circle_In2All[inField];
    2308             :                 return GF_OK;
    2309         109 :         case GF_SG_FIELD_CODING_DEF:
    2310         109 :                 *allField = Circle_Def2All[inField];
    2311             :                 return GF_OK;
    2312           0 :         case GF_SG_FIELD_CODING_OUT:
    2313           0 :                 *allField = Circle_Out2All[inField];
    2314             :                 return GF_OK;
    2315           0 :         case GF_SG_FIELD_CODING_DYN:
    2316           0 :                 *allField = Circle_Dyn2All[inField];
    2317             :                 return GF_OK;
    2318             :         default:
    2319             :                 return GF_BAD_PARAM;
    2320             :         }
    2321             : }
    2322             : static GF_Err Circle_get_field(GF_Node *node, GF_FieldInfo *info)
    2323             : {
    2324        3529 :         switch (info->fieldIndex) {
    2325        3529 :         case 0:
    2326        3529 :                 info->name = "radius";
    2327        3529 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2328        3529 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    2329        3529 :                 info->far_ptr = & ((M_Circle *) node)->radius;
    2330             :                 return GF_OK;
    2331             :         default:
    2332             :                 return GF_BAD_PARAM;
    2333             :         }
    2334             : }
    2335             : 
    2336             : 
    2337             : static s32 Circle_get_field_index_by_name(char *name)
    2338             : {
    2339         200 :         if (!strcmp("radius", name)) return 0;
    2340             :         return -1;
    2341             : }
    2342             : static Bool Circle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2343             : {
    2344          30 :         switch (FieldIndex) {
    2345          30 :         case 0:
    2346          30 :                 *AType = 7;
    2347          30 :                 *QType = 12;
    2348          30 :                 *b_min = FLT2FIX(0);
    2349          30 :                 *b_max = FIX_MAX;
    2350             :                 return 1;
    2351             :         default:
    2352             :                 return 0;
    2353             :         }
    2354             : }
    2355             : 
    2356             : 
    2357             : 
    2358        1144 : GF_Node *Circle_Create()
    2359             : {
    2360             :         M_Circle *p;
    2361        1144 :         GF_SAFEALLOC(p, M_Circle);
    2362        1144 :         if(!p) return NULL;
    2363        1144 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Circle);
    2364             : 
    2365             :         /*default field values*/
    2366        1144 :         p->radius = FLT2FIX(1);
    2367        1144 :         return (GF_Node *)p;
    2368             : }
    2369             : 
    2370             : 
    2371             : /*
    2372             :         Collision Node deletion
    2373             : */
    2374             : 
    2375          68 : static void Collision_Del(GF_Node *node)
    2376             : {
    2377             :         M_Collision *p = (M_Collision *) node;
    2378          68 :         gf_node_unregister((GF_Node *) p->proxy, (GF_Node *) p);
    2379          68 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    2380          68 :         gf_node_free((GF_Node *) p);
    2381          68 : }
    2382             : 
    2383             : static const u16 Collision_Def2All[] = { 2, 3, 4};
    2384             : static const u16 Collision_In2All[] = { 0, 1, 2, 3};
    2385             : static const u16 Collision_Out2All[] = { 2, 3, 5};
    2386             : 
    2387             : static u32 Collision_get_field_count(GF_Node *node, u8 IndexMode)
    2388             : {
    2389             :         switch(IndexMode) {
    2390             :         case GF_SG_FIELD_CODING_IN:
    2391             :                 return 4;
    2392             :         case GF_SG_FIELD_CODING_DEF:
    2393             :                 return 3;
    2394             :         case GF_SG_FIELD_CODING_OUT:
    2395             :                 return 3;
    2396             :         case GF_SG_FIELD_CODING_DYN:
    2397             :                 return 0;
    2398             :         default:
    2399             :                 return 6;
    2400             :         }
    2401             : }
    2402             : 
    2403             : static GF_Err Collision_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2404             : {
    2405          81 :         switch(IndexMode) {
    2406           0 :         case GF_SG_FIELD_CODING_IN:
    2407           0 :                 *allField = Collision_In2All[inField];
    2408             :                 return GF_OK;
    2409          75 :         case GF_SG_FIELD_CODING_DEF:
    2410          75 :                 *allField = Collision_Def2All[inField];
    2411             :                 return GF_OK;
    2412           0 :         case GF_SG_FIELD_CODING_OUT:
    2413           0 :                 *allField = Collision_Out2All[inField];
    2414             :                 return GF_OK;
    2415             :         default:
    2416             :                 return GF_BAD_PARAM;
    2417             :         }
    2418             : }
    2419         261 : static GF_Err Collision_get_field(GF_Node *node, GF_FieldInfo *info)
    2420             : {
    2421         261 :         switch (info->fieldIndex) {
    2422          17 :         case 0:
    2423          17 :                 info->name = "addChildren";
    2424          17 :                 info->eventType = GF_SG_EVENT_IN;
    2425          17 :                 info->on_event_in = ((M_Collision *)node)->on_addChildren;
    2426          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2427          17 :                 info->NDTtype = NDT_SF3DNode;
    2428          17 :                 info->far_ptr = & ((M_Collision *)node)->addChildren;
    2429          17 :                 return GF_OK;
    2430          17 :         case 1:
    2431          17 :                 info->name = "removeChildren";
    2432          17 :                 info->eventType = GF_SG_EVENT_IN;
    2433          17 :                 info->on_event_in = ((M_Collision *)node)->on_removeChildren;
    2434          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2435          17 :                 info->NDTtype = NDT_SF3DNode;
    2436          17 :                 info->far_ptr = & ((M_Collision *)node)->removeChildren;
    2437          17 :                 return GF_OK;
    2438          39 :         case 2:
    2439          39 :                 info->name = "children";
    2440          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2441          39 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2442          39 :                 info->NDTtype = NDT_SF3DNode;
    2443          39 :                 info->far_ptr = & ((M_Collision *)node)->children;
    2444          39 :                 return GF_OK;
    2445          72 :         case 3:
    2446          72 :                 info->name = "collide";
    2447          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2448          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    2449          72 :                 info->far_ptr = & ((M_Collision *) node)->collide;
    2450          72 :                 return GF_OK;
    2451          97 :         case 4:
    2452          97 :                 info->name = "proxy";
    2453          97 :                 info->eventType = GF_SG_EVENT_FIELD;
    2454          97 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2455          97 :                 info->NDTtype = NDT_SF3DNode;
    2456          97 :                 info->far_ptr = & ((M_Collision *)node)->proxy;
    2457          97 :                 return GF_OK;
    2458          19 :         case 5:
    2459          19 :                 info->name = "collideTime";
    2460          19 :                 info->eventType = GF_SG_EVENT_OUT;
    2461          19 :                 info->fieldType = GF_SG_VRML_SFTIME;
    2462          19 :                 info->far_ptr = & ((M_Collision *) node)->collideTime;
    2463          19 :                 return GF_OK;
    2464             :         default:
    2465             :                 return GF_BAD_PARAM;
    2466             :         }
    2467             : }
    2468             : 
    2469             : 
    2470          26 : static s32 Collision_get_field_index_by_name(char *name)
    2471             : {
    2472          26 :         if (!strcmp("addChildren", name)) return 0;
    2473          25 :         if (!strcmp("removeChildren", name)) return 1;
    2474          24 :         if (!strcmp("children", name)) return 2;
    2475          21 :         if (!strcmp("collide", name)) return 3;
    2476          20 :         if (!strcmp("proxy", name)) return 4;
    2477           3 :         if (!strcmp("collideTime", name)) return 5;
    2478           0 :         return -1;
    2479             : }
    2480             : static Bool Collision_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2481             : {
    2482             :         switch (FieldIndex) {
    2483             :         default:
    2484             :                 return 0;
    2485             :         }
    2486             : }
    2487             : 
    2488             : 
    2489             : 
    2490          68 : GF_Node *Collision_Create()
    2491             : {
    2492             :         M_Collision *p;
    2493          68 :         GF_SAFEALLOC(p, M_Collision);
    2494          68 :         if(!p) return NULL;
    2495          68 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Collision);
    2496          68 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    2497             : 
    2498             :         /*default field values*/
    2499          68 :         p->collide = 1;
    2500          68 :         return (GF_Node *)p;
    2501             : }
    2502             : 
    2503             : 
    2504             : /*
    2505             :         Color Node deletion
    2506             : */
    2507             : 
    2508             : static void Color_Del(GF_Node *node)
    2509             : {
    2510             :         M_Color *p = (M_Color *) node;
    2511         139 :         gf_sg_mfcolor_del(p->color);
    2512         139 :         gf_node_free((GF_Node *) p);
    2513             : }
    2514             : 
    2515             : static const u16 Color_Def2All[] = { 0};
    2516             : static const u16 Color_In2All[] = { 0};
    2517             : static const u16 Color_Out2All[] = { 0};
    2518             : static const u16 Color_Dyn2All[] = { 0};
    2519             : 
    2520             : static u32 Color_get_field_count(GF_Node *node, u8 IndexMode)
    2521             : {
    2522             :         switch(IndexMode) {
    2523             :         case GF_SG_FIELD_CODING_IN:
    2524             :                 return 1;
    2525             :         case GF_SG_FIELD_CODING_DEF:
    2526             :                 return 1;
    2527             :         case GF_SG_FIELD_CODING_OUT:
    2528             :                 return 1;
    2529             :         case GF_SG_FIELD_CODING_DYN:
    2530             :                 return 1;
    2531             :         default:
    2532             :                 return 1;
    2533             :         }
    2534             : }
    2535             : 
    2536             : static GF_Err Color_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2537             : {
    2538          71 :         switch(IndexMode) {
    2539           0 :         case GF_SG_FIELD_CODING_IN:
    2540           0 :                 *allField = Color_In2All[inField];
    2541             :                 return GF_OK;
    2542          70 :         case GF_SG_FIELD_CODING_DEF:
    2543          70 :                 *allField = Color_Def2All[inField];
    2544             :                 return GF_OK;
    2545           0 :         case GF_SG_FIELD_CODING_OUT:
    2546           0 :                 *allField = Color_Out2All[inField];
    2547             :                 return GF_OK;
    2548           0 :         case GF_SG_FIELD_CODING_DYN:
    2549           0 :                 *allField = Color_Dyn2All[inField];
    2550             :                 return GF_OK;
    2551             :         default:
    2552             :                 return GF_BAD_PARAM;
    2553             :         }
    2554             : }
    2555             : static GF_Err Color_get_field(GF_Node *node, GF_FieldInfo *info)
    2556             : {
    2557         268 :         switch (info->fieldIndex) {
    2558         268 :         case 0:
    2559         268 :                 info->name = "color";
    2560         268 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2561         268 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    2562         268 :                 info->far_ptr = & ((M_Color *) node)->color;
    2563             :                 return GF_OK;
    2564             :         default:
    2565             :                 return GF_BAD_PARAM;
    2566             :         }
    2567             : }
    2568             : 
    2569             : 
    2570             : static s32 Color_get_field_index_by_name(char *name)
    2571             : {
    2572          39 :         if (!strcmp("color", name)) return 0;
    2573             :         return -1;
    2574             : }
    2575             : static Bool Color_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2576             : {
    2577          97 :         switch (FieldIndex) {
    2578          97 :         case 0:
    2579          97 :                 *AType = 4;
    2580          97 :                 *QType = 4;
    2581          97 :                 *b_min = FLT2FIX(0);
    2582          97 :                 *b_max = FLT2FIX(1);
    2583             :                 return 1;
    2584             :         default:
    2585             :                 return 0;
    2586             :         }
    2587             : }
    2588             : 
    2589             : 
    2590             : 
    2591         139 : GF_Node *Color_Create()
    2592             : {
    2593             :         M_Color *p;
    2594         139 :         GF_SAFEALLOC(p, M_Color);
    2595         139 :         if(!p) return NULL;
    2596         139 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Color);
    2597             : 
    2598             :         /*default field values*/
    2599         139 :         return (GF_Node *)p;
    2600             : }
    2601             : 
    2602             : 
    2603             : /*
    2604             :         ColorInterpolator Node deletion
    2605             : */
    2606             : 
    2607           7 : static void ColorInterpolator_Del(GF_Node *node)
    2608             : {
    2609             :         M_ColorInterpolator *p = (M_ColorInterpolator *) node;
    2610           7 :         gf_sg_mffloat_del(p->key);
    2611           7 :         gf_sg_mfcolor_del(p->keyValue);
    2612           7 :         gf_node_free((GF_Node *) p);
    2613           7 : }
    2614             : 
    2615             : static const u16 ColorInterpolator_Def2All[] = { 1, 2};
    2616             : static const u16 ColorInterpolator_In2All[] = { 0, 1, 2};
    2617             : static const u16 ColorInterpolator_Out2All[] = { 1, 2, 3};
    2618             : 
    2619             : static u32 ColorInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
    2620             : {
    2621             :         switch(IndexMode) {
    2622             :         case GF_SG_FIELD_CODING_IN:
    2623             :                 return 3;
    2624             :         case GF_SG_FIELD_CODING_DEF:
    2625             :                 return 2;
    2626             :         case GF_SG_FIELD_CODING_OUT:
    2627             :                 return 3;
    2628             :         case GF_SG_FIELD_CODING_DYN:
    2629             :                 return 0;
    2630             :         default:
    2631             :                 return 4;
    2632             :         }
    2633             : }
    2634             : 
    2635             : static GF_Err ColorInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2636             : {
    2637           4 :         switch(IndexMode) {
    2638           0 :         case GF_SG_FIELD_CODING_IN:
    2639           0 :                 *allField = ColorInterpolator_In2All[inField];
    2640             :                 return GF_OK;
    2641           0 :         case GF_SG_FIELD_CODING_DEF:
    2642           0 :                 *allField = ColorInterpolator_Def2All[inField];
    2643             :                 return GF_OK;
    2644           0 :         case GF_SG_FIELD_CODING_OUT:
    2645           0 :                 *allField = ColorInterpolator_Out2All[inField];
    2646             :                 return GF_OK;
    2647             :         default:
    2648             :                 return GF_BAD_PARAM;
    2649             :         }
    2650             : }
    2651          44 : static GF_Err ColorInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
    2652             : {
    2653          44 :         switch (info->fieldIndex) {
    2654          14 :         case 0:
    2655          14 :                 info->name = "set_fraction";
    2656          14 :                 info->eventType = GF_SG_EVENT_IN;
    2657          14 :                 info->on_event_in = ((M_ColorInterpolator *)node)->on_set_fraction;
    2658          14 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    2659          14 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->set_fraction;
    2660          14 :                 return GF_OK;
    2661           8 :         case 1:
    2662           8 :                 info->name = "key";
    2663           8 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2664           8 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    2665           8 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->key;
    2666           8 :                 return GF_OK;
    2667           8 :         case 2:
    2668           8 :                 info->name = "keyValue";
    2669           8 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2670           8 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
    2671           8 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->keyValue;
    2672           8 :                 return GF_OK;
    2673          14 :         case 3:
    2674          14 :                 info->name = "value_changed";
    2675          14 :                 info->eventType = GF_SG_EVENT_OUT;
    2676          14 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    2677          14 :                 info->far_ptr = & ((M_ColorInterpolator *) node)->value_changed;
    2678          14 :                 return GF_OK;
    2679             :         default:
    2680             :                 return GF_BAD_PARAM;
    2681             :         }
    2682             : }
    2683             : 
    2684             : 
    2685          28 : static s32 ColorInterpolator_get_field_index_by_name(char *name)
    2686             : {
    2687          28 :         if (!strcmp("set_fraction", name)) return 0;
    2688          21 :         if (!strcmp("key", name)) return 1;
    2689          14 :         if (!strcmp("keyValue", name)) return 2;
    2690           7 :         if (!strcmp("value_changed", name)) return 3;
    2691           0 :         return -1;
    2692             : }
    2693             : static Bool ColorInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2694             : {
    2695           4 :         switch (FieldIndex) {
    2696           1 :         case 1:
    2697           1 :                 *AType = 0;
    2698           1 :                 *QType = 8;
    2699           1 :                 *b_min = FLT2FIX(0);
    2700           1 :                 *b_max = FLT2FIX(1);
    2701             :                 return 1;
    2702           1 :         case 2:
    2703           1 :                 *AType = 0;
    2704           1 :                 *QType = 4;
    2705           1 :                 *b_min = FLT2FIX(0);
    2706           1 :                 *b_max = FLT2FIX(1);
    2707             :                 return 1;
    2708             :         default:
    2709             :                 return 0;
    2710             :         }
    2711             : }
    2712             : 
    2713             : 
    2714             : 
    2715           7 : GF_Node *ColorInterpolator_Create()
    2716             : {
    2717             :         M_ColorInterpolator *p;
    2718           7 :         GF_SAFEALLOC(p, M_ColorInterpolator);
    2719           7 :         if(!p) return NULL;
    2720           7 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ColorInterpolator);
    2721             : 
    2722             :         /*default field values*/
    2723           7 :         return (GF_Node *)p;
    2724             : }
    2725             : 
    2726             : 
    2727             : /*
    2728             :         CompositeTexture2D Node deletion
    2729             : */
    2730             : 
    2731          31 : static void CompositeTexture2D_Del(GF_Node *node)
    2732             : {
    2733             :         M_CompositeTexture2D *p = (M_CompositeTexture2D *) node;
    2734          31 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    2735          31 :         gf_node_unregister((GF_Node *) p->viewport, (GF_Node *) p);
    2736          31 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    2737          31 :         gf_node_free((GF_Node *) p);
    2738          31 : }
    2739             : 
    2740             : static const u16 CompositeTexture2D_Def2All[] = { 2, 3, 4, 5, 6, 7};
    2741             : static const u16 CompositeTexture2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
    2742             : static const u16 CompositeTexture2D_Out2All[] = { 2, 3, 4, 5, 6};
    2743             : 
    2744             : static u32 CompositeTexture2D_get_field_count(GF_Node *node, u8 IndexMode)
    2745             : {
    2746             :         switch(IndexMode) {
    2747             :         case GF_SG_FIELD_CODING_IN:
    2748             :                 return 7;
    2749             :         case GF_SG_FIELD_CODING_DEF:
    2750             :                 return 6;
    2751             :         case GF_SG_FIELD_CODING_OUT:
    2752             :                 return 5;
    2753             :         case GF_SG_FIELD_CODING_DYN:
    2754             :                 return 0;
    2755             :         default:
    2756             :                 return 8;
    2757             :         }
    2758             : }
    2759             : 
    2760             : static GF_Err CompositeTexture2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2761             : {
    2762           8 :         switch(IndexMode) {
    2763           0 :         case GF_SG_FIELD_CODING_IN:
    2764           0 :                 *allField = CompositeTexture2D_In2All[inField];
    2765             :                 return GF_OK;
    2766           0 :         case GF_SG_FIELD_CODING_DEF:
    2767           0 :                 *allField = CompositeTexture2D_Def2All[inField];
    2768             :                 return GF_OK;
    2769           0 :         case GF_SG_FIELD_CODING_OUT:
    2770           0 :                 *allField = CompositeTexture2D_Out2All[inField];
    2771             :                 return GF_OK;
    2772             :         default:
    2773             :                 return GF_BAD_PARAM;
    2774             :         }
    2775             : }
    2776        5156 : static GF_Err CompositeTexture2D_get_field(GF_Node *node, GF_FieldInfo *info)
    2777             : {
    2778        5156 :         switch (info->fieldIndex) {
    2779         590 :         case 0:
    2780         590 :                 info->name = "addChildren";
    2781         590 :                 info->eventType = GF_SG_EVENT_IN;
    2782         590 :                 info->on_event_in = ((M_CompositeTexture2D *)node)->on_addChildren;
    2783         590 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2784         590 :                 info->NDTtype = NDT_SF2DNode;
    2785         590 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->addChildren;
    2786         590 :                 return GF_OK;
    2787         592 :         case 1:
    2788         592 :                 info->name = "removeChildren";
    2789         592 :                 info->eventType = GF_SG_EVENT_IN;
    2790         592 :                 info->on_event_in = ((M_CompositeTexture2D *)node)->on_removeChildren;
    2791         592 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2792         592 :                 info->NDTtype = NDT_SF2DNode;
    2793         592 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->removeChildren;
    2794         592 :                 return GF_OK;
    2795         789 :         case 2:
    2796         789 :                 info->name = "children";
    2797         789 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2798         789 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2799         789 :                 info->NDTtype = NDT_SF2DNode;
    2800         789 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->children;
    2801         789 :                 return GF_OK;
    2802         706 :         case 3:
    2803         706 :                 info->name = "pixelWidth";
    2804         706 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2805         706 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2806         706 :                 info->far_ptr = & ((M_CompositeTexture2D *) node)->pixelWidth;
    2807         706 :                 return GF_OK;
    2808         706 :         case 4:
    2809         706 :                 info->name = "pixelHeight";
    2810         706 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2811         706 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2812         706 :                 info->far_ptr = & ((M_CompositeTexture2D *) node)->pixelHeight;
    2813         706 :                 return GF_OK;
    2814         593 :         case 5:
    2815         593 :                 info->name = "background";
    2816         593 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2817         593 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2818         593 :                 info->NDTtype = NDT_SFBackground2DNode;
    2819         593 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->background;
    2820         593 :                 return GF_OK;
    2821         590 :         case 6:
    2822         590 :                 info->name = "viewport";
    2823         590 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2824         590 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2825         590 :                 info->NDTtype = NDT_SFViewportNode;
    2826         590 :                 info->far_ptr = & ((M_CompositeTexture2D *)node)->viewport;
    2827         590 :                 return GF_OK;
    2828         590 :         case 7:
    2829         590 :                 info->name = "repeatSandT";
    2830         590 :                 info->eventType = GF_SG_EVENT_FIELD;
    2831         590 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2832         590 :                 info->far_ptr = & ((M_CompositeTexture2D *) node)->repeatSandT;
    2833         590 :                 return GF_OK;
    2834             :         default:
    2835             :                 return GF_BAD_PARAM;
    2836             :         }
    2837             : }
    2838             : 
    2839             : 
    2840         405 : static s32 CompositeTexture2D_get_field_index_by_name(char *name)
    2841             : {
    2842         405 :         if (!strcmp("addChildren", name)) return 0;
    2843         404 :         if (!strcmp("removeChildren", name)) return 1;
    2844         402 :         if (!strcmp("children", name)) return 2;
    2845         240 :         if (!strcmp("pixelWidth", name)) return 3;
    2846         123 :         if (!strcmp("pixelHeight", name)) return 4;
    2847           6 :         if (!strcmp("background", name)) return 5;
    2848           2 :         if (!strcmp("viewport", name)) return 6;
    2849           1 :         if (!strcmp("repeatSandT", name)) return 7;
    2850           0 :         return -1;
    2851             : }
    2852             : static Bool CompositeTexture2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    2853             : {
    2854           8 :         switch (FieldIndex) {
    2855           1 :         case 3:
    2856           1 :                 *AType = 0;
    2857           1 :                 *QType = 13;
    2858           1 :                 *QT13_bits = 16;
    2859           1 :                 *b_min = FLT2FIX(0);
    2860           1 :                 *b_max = FIX_MAX;
    2861             :                 return 1;
    2862           1 :         case 4:
    2863           1 :                 *AType = 0;
    2864           1 :                 *QType = 13;
    2865           1 :                 *QT13_bits = 16;
    2866           1 :                 *b_min = FLT2FIX(0);
    2867           1 :                 *b_max = FIX_MAX;
    2868             :                 return 1;
    2869           1 :         case 7:
    2870           1 :                 *AType = 0;
    2871           1 :                 *QType = 13;
    2872           1 :                 *QT13_bits = 2;
    2873           1 :                 *b_min = FLT2FIX(0);
    2874           1 :                 *b_max = FLT2FIX(3);
    2875             :                 return 1;
    2876             :         default:
    2877             :                 return 0;
    2878             :         }
    2879             : }
    2880             : 
    2881             : 
    2882             : 
    2883          31 : GF_Node *CompositeTexture2D_Create()
    2884             : {
    2885             :         M_CompositeTexture2D *p;
    2886          31 :         GF_SAFEALLOC(p, M_CompositeTexture2D);
    2887          31 :         if(!p) return NULL;
    2888          31 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CompositeTexture2D);
    2889          31 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    2890             : 
    2891             :         /*default field values*/
    2892          31 :         p->pixelWidth = -1;
    2893          31 :         p->pixelHeight = -1;
    2894          31 :         p->repeatSandT = 3;
    2895          31 :         return (GF_Node *)p;
    2896             : }
    2897             : 
    2898             : 
    2899             : /*
    2900             :         CompositeTexture3D Node deletion
    2901             : */
    2902             : 
    2903           3 : static void CompositeTexture3D_Del(GF_Node *node)
    2904             : {
    2905             :         M_CompositeTexture3D *p = (M_CompositeTexture3D *) node;
    2906           3 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    2907           3 :         gf_node_unregister((GF_Node *) p->fog, (GF_Node *) p);
    2908           3 :         gf_node_unregister((GF_Node *) p->navigationInfo, (GF_Node *) p);
    2909           3 :         gf_node_unregister((GF_Node *) p->viewpoint, (GF_Node *) p);
    2910           3 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    2911           3 :         gf_node_free((GF_Node *) p);
    2912           3 : }
    2913             : 
    2914             : static const u16 CompositeTexture3D_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10};
    2915             : static const u16 CompositeTexture3D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    2916             : static const u16 CompositeTexture3D_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
    2917             : 
    2918             : static u32 CompositeTexture3D_get_field_count(GF_Node *node, u8 IndexMode)
    2919             : {
    2920             :         switch(IndexMode) {
    2921             :         case GF_SG_FIELD_CODING_IN:
    2922             :                 return 9;
    2923             :         case GF_SG_FIELD_CODING_DEF:
    2924             :                 return 9;
    2925             :         case GF_SG_FIELD_CODING_OUT:
    2926             :                 return 7;
    2927             :         case GF_SG_FIELD_CODING_DYN:
    2928             :                 return 0;
    2929             :         default:
    2930             :                 return 11;
    2931             :         }
    2932             : }
    2933             : 
    2934             : static GF_Err CompositeTexture3D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    2935             : {
    2936          11 :         switch(IndexMode) {
    2937           0 :         case GF_SG_FIELD_CODING_IN:
    2938           0 :                 *allField = CompositeTexture3D_In2All[inField];
    2939             :                 return GF_OK;
    2940           0 :         case GF_SG_FIELD_CODING_DEF:
    2941           0 :                 *allField = CompositeTexture3D_Def2All[inField];
    2942             :                 return GF_OK;
    2943           0 :         case GF_SG_FIELD_CODING_OUT:
    2944           0 :                 *allField = CompositeTexture3D_Out2All[inField];
    2945             :                 return GF_OK;
    2946             :         default:
    2947             :                 return GF_BAD_PARAM;
    2948             :         }
    2949             : }
    2950          28 : static GF_Err CompositeTexture3D_get_field(GF_Node *node, GF_FieldInfo *info)
    2951             : {
    2952          28 :         switch (info->fieldIndex) {
    2953           2 :         case 0:
    2954           2 :                 info->name = "addChildren";
    2955           2 :                 info->eventType = GF_SG_EVENT_IN;
    2956           2 :                 info->on_event_in = ((M_CompositeTexture3D *)node)->on_addChildren;
    2957           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2958           2 :                 info->NDTtype = NDT_SF3DNode;
    2959           2 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->addChildren;
    2960           2 :                 return GF_OK;
    2961           2 :         case 1:
    2962           2 :                 info->name = "removeChildren";
    2963           2 :                 info->eventType = GF_SG_EVENT_IN;
    2964           2 :                 info->on_event_in = ((M_CompositeTexture3D *)node)->on_removeChildren;
    2965           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2966           2 :                 info->NDTtype = NDT_SF3DNode;
    2967           2 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->removeChildren;
    2968           2 :                 return GF_OK;
    2969           4 :         case 2:
    2970           4 :                 info->name = "children";
    2971           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2972           4 :                 info->fieldType = GF_SG_VRML_MFNODE;
    2973           4 :                 info->NDTtype = NDT_SF3DNode;
    2974           4 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->children;
    2975           4 :                 return GF_OK;
    2976           4 :         case 3:
    2977           4 :                 info->name = "pixelWidth";
    2978           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2979           4 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2980           4 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->pixelWidth;
    2981           4 :                 return GF_OK;
    2982           4 :         case 4:
    2983           4 :                 info->name = "pixelHeight";
    2984           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2985           4 :                 info->fieldType = GF_SG_VRML_SFINT32;
    2986           4 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->pixelHeight;
    2987           4 :                 return GF_OK;
    2988           2 :         case 5:
    2989           2 :                 info->name = "background";
    2990           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2991           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2992           2 :                 info->NDTtype = NDT_SFBackground3DNode;
    2993           2 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->background;
    2994           2 :                 return GF_OK;
    2995           2 :         case 6:
    2996           2 :                 info->name = "fog";
    2997           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    2998           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    2999           2 :                 info->NDTtype = NDT_SFFogNode;
    3000           2 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->fog;
    3001           2 :                 return GF_OK;
    3002           2 :         case 7:
    3003           2 :                 info->name = "navigationInfo";
    3004           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3005           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    3006           2 :                 info->NDTtype = NDT_SFNavigationInfoNode;
    3007           2 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->navigationInfo;
    3008           2 :                 return GF_OK;
    3009           2 :         case 8:
    3010           2 :                 info->name = "viewpoint";
    3011           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3012           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    3013           2 :                 info->NDTtype = NDT_SFViewpointNode;
    3014           2 :                 info->far_ptr = & ((M_CompositeTexture3D *)node)->viewpoint;
    3015           2 :                 return GF_OK;
    3016           2 :         case 9:
    3017           2 :                 info->name = "repeatS";
    3018           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    3019           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3020           2 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->repeatS;
    3021           2 :                 return GF_OK;
    3022           2 :         case 10:
    3023           2 :                 info->name = "repeatT";
    3024           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    3025           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3026           2 :                 info->far_ptr = & ((M_CompositeTexture3D *) node)->repeatT;
    3027           2 :                 return GF_OK;
    3028             :         default:
    3029             :                 return GF_BAD_PARAM;
    3030             :         }
    3031             : }
    3032             : 
    3033             : 
    3034          17 : static s32 CompositeTexture3D_get_field_index_by_name(char *name)
    3035             : {
    3036          17 :         if (!strcmp("addChildren", name)) return 0;
    3037          16 :         if (!strcmp("removeChildren", name)) return 1;
    3038          15 :         if (!strcmp("children", name)) return 2;
    3039          12 :         if (!strcmp("pixelWidth", name)) return 3;
    3040           9 :         if (!strcmp("pixelHeight", name)) return 4;
    3041           6 :         if (!strcmp("background", name)) return 5;
    3042           5 :         if (!strcmp("fog", name)) return 6;
    3043           4 :         if (!strcmp("navigationInfo", name)) return 7;
    3044           3 :         if (!strcmp("viewpoint", name)) return 8;
    3045           2 :         if (!strcmp("repeatS", name)) return 9;
    3046           1 :         if (!strcmp("repeatT", name)) return 10;
    3047           0 :         return -1;
    3048             : }
    3049             : static Bool CompositeTexture3D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3050             : {
    3051          11 :         switch (FieldIndex) {
    3052           1 :         case 3:
    3053           1 :                 *AType = 0;
    3054           1 :                 *QType = 13;
    3055           1 :                 *QT13_bits = 16;
    3056           1 :                 *b_min = FLT2FIX(0);
    3057           1 :                 *b_max = FIX_MAX;
    3058             :                 return 1;
    3059           1 :         case 4:
    3060           1 :                 *AType = 0;
    3061           1 :                 *QType = 13;
    3062           1 :                 *QT13_bits = 16;
    3063           1 :                 *b_min = FLT2FIX(0);
    3064           1 :                 *b_max = FIX_MAX;
    3065             :                 return 1;
    3066             :         default:
    3067             :                 return 0;
    3068             :         }
    3069             : }
    3070             : 
    3071             : 
    3072             : 
    3073           3 : GF_Node *CompositeTexture3D_Create()
    3074             : {
    3075             :         M_CompositeTexture3D *p;
    3076           3 :         GF_SAFEALLOC(p, M_CompositeTexture3D);
    3077           3 :         if(!p) return NULL;
    3078           3 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CompositeTexture3D);
    3079           3 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    3080             : 
    3081             :         /*default field values*/
    3082           3 :         p->pixelWidth = -1;
    3083           3 :         p->pixelHeight = -1;
    3084           3 :         p->repeatS = 1;
    3085           3 :         p->repeatT = 1;
    3086           3 :         return (GF_Node *)p;
    3087             : }
    3088             : 
    3089             : 
    3090             : /*
    3091             :         Conditional Node deletion
    3092             : */
    3093             : 
    3094             : static void Conditional_Del(GF_Node *node)
    3095             : {
    3096             :         M_Conditional *p = (M_Conditional *) node;
    3097         953 :         gf_sg_sfcommand_del(p->buffer);
    3098         953 :         gf_node_free((GF_Node *) p);
    3099             : }
    3100             : 
    3101             : static const u16 Conditional_Def2All[] = { 2};
    3102             : static const u16 Conditional_In2All[] = { 0, 1, 2};
    3103             : static const u16 Conditional_Out2All[] = { 2, 3};
    3104             : 
    3105             : static u32 Conditional_get_field_count(GF_Node *node, u8 IndexMode)
    3106             : {
    3107             :         switch(IndexMode) {
    3108             :         case GF_SG_FIELD_CODING_IN:
    3109             :                 return 3;
    3110             :         case GF_SG_FIELD_CODING_DEF:
    3111             :                 return 1;
    3112             :         case GF_SG_FIELD_CODING_OUT:
    3113             :                 return 2;
    3114             :         case GF_SG_FIELD_CODING_DYN:
    3115             :                 return 0;
    3116             :         default:
    3117             :                 return 4;
    3118             :         }
    3119             : }
    3120             : 
    3121             : static GF_Err Conditional_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3122             : {
    3123         372 :         switch(IndexMode) {
    3124         178 :         case GF_SG_FIELD_CODING_IN:
    3125         178 :                 *allField = Conditional_In2All[inField];
    3126             :                 return GF_OK;
    3127         190 :         case GF_SG_FIELD_CODING_DEF:
    3128         190 :                 *allField = Conditional_Def2All[inField];
    3129             :                 return GF_OK;
    3130           0 :         case GF_SG_FIELD_CODING_OUT:
    3131           0 :                 *allField = Conditional_Out2All[inField];
    3132             :                 return GF_OK;
    3133             :         default:
    3134             :                 return GF_BAD_PARAM;
    3135             :         }
    3136             : }
    3137        2621 : static GF_Err Conditional_get_field(GF_Node *node, GF_FieldInfo *info)
    3138             : {
    3139        2621 :         switch (info->fieldIndex) {
    3140         856 :         case 0:
    3141         856 :                 info->name = "activate";
    3142         856 :                 info->eventType = GF_SG_EVENT_IN;
    3143         856 :                 info->on_event_in = ((M_Conditional *)node)->on_activate;
    3144         856 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3145         856 :                 info->far_ptr = & ((M_Conditional *) node)->activate;
    3146         856 :                 return GF_OK;
    3147         499 :         case 1:
    3148         499 :                 info->name = "reverseActivate";
    3149         499 :                 info->eventType = GF_SG_EVENT_IN;
    3150         499 :                 info->on_event_in = ((M_Conditional *)node)->on_reverseActivate;
    3151         499 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3152         499 :                 info->far_ptr = & ((M_Conditional *) node)->reverseActivate;
    3153         499 :                 return GF_OK;
    3154        1068 :         case 2:
    3155        1068 :                 info->name = "buffer";
    3156        1068 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3157        1068 :                 info->fieldType = GF_SG_VRML_SFCOMMANDBUFFER;
    3158        1068 :                 info->far_ptr = & ((M_Conditional *) node)->buffer;
    3159        1068 :                 return GF_OK;
    3160         198 :         case 3:
    3161         198 :                 info->name = "isActive";
    3162         198 :                 info->eventType = GF_SG_EVENT_OUT;
    3163         198 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3164         198 :                 info->far_ptr = & ((M_Conditional *) node)->isActive;
    3165         198 :                 return GF_OK;
    3166             :         default:
    3167             :                 return GF_BAD_PARAM;
    3168             :         }
    3169             : }
    3170             : 
    3171             : 
    3172        1162 : static s32 Conditional_get_field_index_by_name(char *name)
    3173             : {
    3174        1162 :         if (!strcmp("activate", name)) return 0;
    3175         735 :         if (!strcmp("reverseActivate", name)) return 1;
    3176         558 :         if (!strcmp("buffer", name)) return 2;
    3177           1 :         if (!strcmp("isActive", name)) return 3;
    3178           0 :         return -1;
    3179             : }
    3180             : static Bool Conditional_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3181             : {
    3182             :         switch (FieldIndex) {
    3183             :         default:
    3184             :                 return 0;
    3185             :         }
    3186             : }
    3187             : 
    3188             : 
    3189             : 
    3190         953 : GF_Node *Conditional_Create()
    3191             : {
    3192             :         M_Conditional *p;
    3193         953 :         GF_SAFEALLOC(p, M_Conditional);
    3194         953 :         if(!p) return NULL;
    3195         953 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Conditional);
    3196         953 :         p->buffer.commandList = gf_list_new();
    3197             : 
    3198             :         /*default field values*/
    3199         953 :         return (GF_Node *)p;
    3200             : }
    3201             : 
    3202             : 
    3203             : /*
    3204             :         Cone Node deletion
    3205             : */
    3206             : 
    3207             : static void Cone_Del(GF_Node *node)
    3208             : {
    3209             :         M_Cone *p = (M_Cone *) node;
    3210          72 :         gf_node_free((GF_Node *) p);
    3211             : }
    3212             : 
    3213             : static const u16 Cone_Def2All[] = { 0, 1, 2, 3};
    3214             : 
    3215             : static u32 Cone_get_field_count(GF_Node *node, u8 IndexMode)
    3216             : {
    3217          76 :         switch(IndexMode) {
    3218             :         case GF_SG_FIELD_CODING_IN:
    3219             :                 return 0;
    3220          56 :         case GF_SG_FIELD_CODING_DEF:
    3221             :                 return 4;
    3222             :         case GF_SG_FIELD_CODING_OUT:
    3223             :                 return 0;
    3224             :         case GF_SG_FIELD_CODING_DYN:
    3225             :                 return 0;
    3226          17 :         default:
    3227             :                 return 4;
    3228             :         }
    3229             : }
    3230             : 
    3231             : static GF_Err Cone_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3232             : {
    3233         114 :         switch(IndexMode) {
    3234         110 :         case GF_SG_FIELD_CODING_DEF:
    3235         110 :                 *allField = Cone_Def2All[inField];
    3236             :                 return GF_OK;
    3237             :         default:
    3238             :                 return GF_BAD_PARAM;
    3239             :         }
    3240             : }
    3241         421 : static GF_Err Cone_get_field(GF_Node *node, GF_FieldInfo *info)
    3242             : {
    3243         421 :         switch (info->fieldIndex) {
    3244         137 :         case 0:
    3245         137 :                 info->name = "bottomRadius";
    3246         137 :                 info->eventType = GF_SG_EVENT_FIELD;
    3247         137 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3248         137 :                 info->far_ptr = & ((M_Cone *) node)->bottomRadius;
    3249         137 :                 return GF_OK;
    3250         137 :         case 1:
    3251         137 :                 info->name = "height";
    3252         137 :                 info->eventType = GF_SG_EVENT_FIELD;
    3253         137 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3254         137 :                 info->far_ptr = & ((M_Cone *) node)->height;
    3255         137 :                 return GF_OK;
    3256          72 :         case 2:
    3257          72 :                 info->name = "side";
    3258          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    3259          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3260          72 :                 info->far_ptr = & ((M_Cone *) node)->side;
    3261          72 :                 return GF_OK;
    3262          75 :         case 3:
    3263          75 :                 info->name = "bottom";
    3264          75 :                 info->eventType = GF_SG_EVENT_FIELD;
    3265          75 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3266          75 :                 info->far_ptr = & ((M_Cone *) node)->bottom;
    3267          75 :                 return GF_OK;
    3268             :         default:
    3269             :                 return GF_BAD_PARAM;
    3270             :         }
    3271             : }
    3272             : 
    3273             : 
    3274          49 : static s32 Cone_get_field_index_by_name(char *name)
    3275             : {
    3276          49 :         if (!strcmp("bottomRadius", name)) return 0;
    3277          27 :         if (!strcmp("height", name)) return 1;
    3278           5 :         if (!strcmp("side", name)) return 2;
    3279           4 :         if (!strcmp("bottom", name)) return 3;
    3280           0 :         return -1;
    3281             : }
    3282             : static Bool Cone_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3283             : {
    3284          20 :         switch (FieldIndex) {
    3285           9 :         case 0:
    3286           9 :                 *AType = 0;
    3287           9 :                 *QType = 11;
    3288           9 :                 *b_min = FLT2FIX(0);
    3289           9 :                 *b_max = FIX_MAX;
    3290             :                 return 1;
    3291           9 :         case 1:
    3292           9 :                 *AType = 0;
    3293           9 :                 *QType = 11;
    3294           9 :                 *b_min = FLT2FIX(0);
    3295           9 :                 *b_max = FIX_MAX;
    3296             :                 return 1;
    3297             :         default:
    3298             :                 return 0;
    3299             :         }
    3300             : }
    3301             : 
    3302             : 
    3303             : 
    3304          72 : GF_Node *Cone_Create()
    3305             : {
    3306             :         M_Cone *p;
    3307          72 :         GF_SAFEALLOC(p, M_Cone);
    3308          72 :         if(!p) return NULL;
    3309          72 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Cone);
    3310             : 
    3311             :         /*default field values*/
    3312          72 :         p->bottomRadius = FLT2FIX(1);
    3313          72 :         p->height = FLT2FIX(2);
    3314          72 :         p->side = 1;
    3315          72 :         p->bottom = 1;
    3316          72 :         return (GF_Node *)p;
    3317             : }
    3318             : 
    3319             : 
    3320             : /*
    3321             :         Coordinate Node deletion
    3322             : */
    3323             : 
    3324             : static void Coordinate_Del(GF_Node *node)
    3325             : {
    3326             :         M_Coordinate *p = (M_Coordinate *) node;
    3327         200 :         gf_sg_mfvec3f_del(p->point);
    3328         200 :         gf_node_free((GF_Node *) p);
    3329             : }
    3330             : 
    3331             : static const u16 Coordinate_Def2All[] = { 0};
    3332             : static const u16 Coordinate_In2All[] = { 0};
    3333             : static const u16 Coordinate_Out2All[] = { 0};
    3334             : static const u16 Coordinate_Dyn2All[] = { 0};
    3335             : 
    3336             : static u32 Coordinate_get_field_count(GF_Node *node, u8 IndexMode)
    3337             : {
    3338             :         switch(IndexMode) {
    3339             :         case GF_SG_FIELD_CODING_IN:
    3340             :                 return 1;
    3341             :         case GF_SG_FIELD_CODING_DEF:
    3342             :                 return 1;
    3343             :         case GF_SG_FIELD_CODING_OUT:
    3344             :                 return 1;
    3345             :         case GF_SG_FIELD_CODING_DYN:
    3346             :                 return 1;
    3347             :         default:
    3348             :                 return 1;
    3349             :         }
    3350             : }
    3351             : 
    3352             : static GF_Err Coordinate_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3353             : {
    3354         106 :         switch(IndexMode) {
    3355           0 :         case GF_SG_FIELD_CODING_IN:
    3356           0 :                 *allField = Coordinate_In2All[inField];
    3357             :                 return GF_OK;
    3358         105 :         case GF_SG_FIELD_CODING_DEF:
    3359         105 :                 *allField = Coordinate_Def2All[inField];
    3360             :                 return GF_OK;
    3361           0 :         case GF_SG_FIELD_CODING_OUT:
    3362           0 :                 *allField = Coordinate_Out2All[inField];
    3363             :                 return GF_OK;
    3364           0 :         case GF_SG_FIELD_CODING_DYN:
    3365           0 :                 *allField = Coordinate_Dyn2All[inField];
    3366             :                 return GF_OK;
    3367             :         default:
    3368             :                 return GF_BAD_PARAM;
    3369             :         }
    3370             : }
    3371             : static GF_Err Coordinate_get_field(GF_Node *node, GF_FieldInfo *info)
    3372             : {
    3373         393 :         switch (info->fieldIndex) {
    3374         393 :         case 0:
    3375         393 :                 info->name = "point";
    3376         393 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3377         393 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    3378         393 :                 info->far_ptr = & ((M_Coordinate *) node)->point;
    3379             :                 return GF_OK;
    3380             :         default:
    3381             :                 return GF_BAD_PARAM;
    3382             :         }
    3383             : }
    3384             : 
    3385             : 
    3386             : static s32 Coordinate_get_field_index_by_name(char *name)
    3387             : {
    3388          50 :         if (!strcmp("point", name)) return 0;
    3389             :         return -1;
    3390             : }
    3391             : static Bool Coordinate_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3392             : {
    3393         193 :         switch (FieldIndex) {
    3394         193 :         case 0:
    3395         193 :                 *AType = 1;
    3396         193 :                 *QType = 1;
    3397         193 :                 *b_min = FIX_MIN;
    3398         193 :                 *b_max = FIX_MAX;
    3399             :                 return 1;
    3400             :         default:
    3401             :                 return 0;
    3402             :         }
    3403             : }
    3404             : 
    3405             : 
    3406             : 
    3407         200 : GF_Node *Coordinate_Create()
    3408             : {
    3409             :         M_Coordinate *p;
    3410         200 :         GF_SAFEALLOC(p, M_Coordinate);
    3411         200 :         if(!p) return NULL;
    3412         200 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Coordinate);
    3413             : 
    3414             :         /*default field values*/
    3415         200 :         return (GF_Node *)p;
    3416             : }
    3417             : 
    3418             : 
    3419             : /*
    3420             :         Coordinate2D Node deletion
    3421             : */
    3422             : 
    3423             : static void Coordinate2D_Del(GF_Node *node)
    3424             : {
    3425             :         M_Coordinate2D *p = (M_Coordinate2D *) node;
    3426        4435 :         gf_sg_mfvec2f_del(p->point);
    3427        4435 :         gf_node_free((GF_Node *) p);
    3428             : }
    3429             : 
    3430             : static const u16 Coordinate2D_Def2All[] = { 0};
    3431             : static const u16 Coordinate2D_In2All[] = { 0};
    3432             : static const u16 Coordinate2D_Out2All[] = { 0};
    3433             : static const u16 Coordinate2D_Dyn2All[] = { 0};
    3434             : 
    3435             : static u32 Coordinate2D_get_field_count(GF_Node *node, u8 IndexMode)
    3436             : {
    3437             :         switch(IndexMode) {
    3438             :         case GF_SG_FIELD_CODING_IN:
    3439             :                 return 1;
    3440             :         case GF_SG_FIELD_CODING_DEF:
    3441             :                 return 1;
    3442             :         case GF_SG_FIELD_CODING_OUT:
    3443             :                 return 1;
    3444             :         case GF_SG_FIELD_CODING_DYN:
    3445             :                 return 1;
    3446             :         default:
    3447             :                 return 1;
    3448             :         }
    3449             : }
    3450             : 
    3451             : static GF_Err Coordinate2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3452             : {
    3453        2126 :         switch(IndexMode) {
    3454          96 :         case GF_SG_FIELD_CODING_IN:
    3455          96 :                 *allField = Coordinate2D_In2All[inField];
    3456             :                 return GF_OK;
    3457        2029 :         case GF_SG_FIELD_CODING_DEF:
    3458        2029 :                 *allField = Coordinate2D_Def2All[inField];
    3459             :                 return GF_OK;
    3460           0 :         case GF_SG_FIELD_CODING_OUT:
    3461           0 :                 *allField = Coordinate2D_Out2All[inField];
    3462             :                 return GF_OK;
    3463           0 :         case GF_SG_FIELD_CODING_DYN:
    3464           0 :                 *allField = Coordinate2D_Dyn2All[inField];
    3465             :                 return GF_OK;
    3466             :         default:
    3467             :                 return GF_BAD_PARAM;
    3468             :         }
    3469             : }
    3470             : static GF_Err Coordinate2D_get_field(GF_Node *node, GF_FieldInfo *info)
    3471             : {
    3472       10999 :         switch (info->fieldIndex) {
    3473       10999 :         case 0:
    3474       10999 :                 info->name = "point";
    3475       10999 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3476       10999 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    3477       10999 :                 info->far_ptr = & ((M_Coordinate2D *) node)->point;
    3478             :                 return GF_OK;
    3479             :         default:
    3480             :                 return GF_BAD_PARAM;
    3481             :         }
    3482             : }
    3483             : 
    3484             : 
    3485             : static s32 Coordinate2D_get_field_index_by_name(char *name)
    3486             : {
    3487        4368 :         if (!strcmp("point", name)) return 0;
    3488             :         return -1;
    3489             : }
    3490             : static Bool Coordinate2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3491             : {
    3492         838 :         switch (FieldIndex) {
    3493         838 :         case 0:
    3494         838 :                 *AType = 2;
    3495         838 :                 *QType = 2;
    3496         838 :                 *b_min = FIX_MIN;
    3497         838 :                 *b_max = FIX_MAX;
    3498             :                 return 1;
    3499             :         default:
    3500             :                 return 0;
    3501             :         }
    3502             : }
    3503             : 
    3504             : 
    3505             : 
    3506        4435 : GF_Node *Coordinate2D_Create()
    3507             : {
    3508             :         M_Coordinate2D *p;
    3509        4435 :         GF_SAFEALLOC(p, M_Coordinate2D);
    3510        4435 :         if(!p) return NULL;
    3511        4435 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Coordinate2D);
    3512             : 
    3513             :         /*default field values*/
    3514        4435 :         return (GF_Node *)p;
    3515             : }
    3516             : 
    3517             : 
    3518             : /*
    3519             :         CoordinateInterpolator Node deletion
    3520             : */
    3521             : 
    3522           2 : static void CoordinateInterpolator_Del(GF_Node *node)
    3523             : {
    3524             :         M_CoordinateInterpolator *p = (M_CoordinateInterpolator *) node;
    3525           2 :         gf_sg_mffloat_del(p->key);
    3526           2 :         gf_sg_mfvec3f_del(p->keyValue);
    3527           2 :         gf_sg_mfvec3f_del(p->value_changed);
    3528           2 :         gf_node_free((GF_Node *) p);
    3529           2 : }
    3530             : 
    3531             : static const u16 CoordinateInterpolator_Def2All[] = { 1, 2};
    3532             : static const u16 CoordinateInterpolator_In2All[] = { 0, 1, 2};
    3533             : static const u16 CoordinateInterpolator_Out2All[] = { 1, 2, 3};
    3534             : 
    3535             : static u32 CoordinateInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
    3536             : {
    3537             :         switch(IndexMode) {
    3538             :         case GF_SG_FIELD_CODING_IN:
    3539             :                 return 3;
    3540             :         case GF_SG_FIELD_CODING_DEF:
    3541             :                 return 2;
    3542             :         case GF_SG_FIELD_CODING_OUT:
    3543             :                 return 3;
    3544             :         case GF_SG_FIELD_CODING_DYN:
    3545             :                 return 0;
    3546             :         default:
    3547             :                 return 4;
    3548             :         }
    3549             : }
    3550             : 
    3551             : static GF_Err CoordinateInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3552             : {
    3553           4 :         switch(IndexMode) {
    3554           0 :         case GF_SG_FIELD_CODING_IN:
    3555           0 :                 *allField = CoordinateInterpolator_In2All[inField];
    3556             :                 return GF_OK;
    3557           0 :         case GF_SG_FIELD_CODING_DEF:
    3558           0 :                 *allField = CoordinateInterpolator_Def2All[inField];
    3559             :                 return GF_OK;
    3560           0 :         case GF_SG_FIELD_CODING_OUT:
    3561           0 :                 *allField = CoordinateInterpolator_Out2All[inField];
    3562             :                 return GF_OK;
    3563             :         default:
    3564             :                 return GF_BAD_PARAM;
    3565             :         }
    3566             : }
    3567          12 : static GF_Err CoordinateInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
    3568             : {
    3569          12 :         switch (info->fieldIndex) {
    3570           4 :         case 0:
    3571           4 :                 info->name = "set_fraction";
    3572           4 :                 info->eventType = GF_SG_EVENT_IN;
    3573           4 :                 info->on_event_in = ((M_CoordinateInterpolator *)node)->on_set_fraction;
    3574           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3575           4 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->set_fraction;
    3576           4 :                 return GF_OK;
    3577           3 :         case 1:
    3578           3 :                 info->name = "key";
    3579           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3580           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    3581           3 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->key;
    3582           3 :                 return GF_OK;
    3583           3 :         case 2:
    3584           3 :                 info->name = "keyValue";
    3585           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3586           3 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    3587           3 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->keyValue;
    3588           3 :                 return GF_OK;
    3589           2 :         case 3:
    3590           2 :                 info->name = "value_changed";
    3591           2 :                 info->eventType = GF_SG_EVENT_OUT;
    3592           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    3593           2 :                 info->far_ptr = & ((M_CoordinateInterpolator *) node)->value_changed;
    3594           2 :                 return GF_OK;
    3595             :         default:
    3596             :                 return GF_BAD_PARAM;
    3597             :         }
    3598             : }
    3599             : 
    3600             : 
    3601           7 : static s32 CoordinateInterpolator_get_field_index_by_name(char *name)
    3602             : {
    3603           7 :         if (!strcmp("set_fraction", name)) return 0;
    3604           5 :         if (!strcmp("key", name)) return 1;
    3605           3 :         if (!strcmp("keyValue", name)) return 2;
    3606           1 :         if (!strcmp("value_changed", name)) return 3;
    3607           0 :         return -1;
    3608             : }
    3609             : static Bool CoordinateInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3610             : {
    3611           4 :         switch (FieldIndex) {
    3612           1 :         case 1:
    3613           1 :                 *AType = 0;
    3614           1 :                 *QType = 8;
    3615           1 :                 *b_min = FLT2FIX(0);
    3616           1 :                 *b_max = FLT2FIX(1);
    3617             :                 return 1;
    3618           1 :         case 2:
    3619           1 :                 *AType = 0;
    3620           1 :                 *QType = 1;
    3621           1 :                 *b_min = FIX_MIN;
    3622           1 :                 *b_max = FIX_MAX;
    3623             :                 return 1;
    3624             :         default:
    3625             :                 return 0;
    3626             :         }
    3627             : }
    3628             : 
    3629             : 
    3630             : 
    3631           2 : GF_Node *CoordinateInterpolator_Create()
    3632             : {
    3633             :         M_CoordinateInterpolator *p;
    3634           2 :         GF_SAFEALLOC(p, M_CoordinateInterpolator);
    3635           2 :         if(!p) return NULL;
    3636           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CoordinateInterpolator);
    3637             : 
    3638             :         /*default field values*/
    3639           2 :         return (GF_Node *)p;
    3640             : }
    3641             : 
    3642             : 
    3643             : /*
    3644             :         CoordinateInterpolator2D Node deletion
    3645             : */
    3646             : 
    3647           3 : static void CoordinateInterpolator2D_Del(GF_Node *node)
    3648             : {
    3649             :         M_CoordinateInterpolator2D *p = (M_CoordinateInterpolator2D *) node;
    3650           3 :         gf_sg_mffloat_del(p->key);
    3651           3 :         gf_sg_mfvec2f_del(p->keyValue);
    3652           3 :         gf_sg_mfvec2f_del(p->value_changed);
    3653           3 :         gf_node_free((GF_Node *) p);
    3654           3 : }
    3655             : 
    3656             : static const u16 CoordinateInterpolator2D_Def2All[] = { 1, 2};
    3657             : static const u16 CoordinateInterpolator2D_In2All[] = { 0, 1, 2};
    3658             : static const u16 CoordinateInterpolator2D_Out2All[] = { 1, 2, 3};
    3659             : 
    3660             : static u32 CoordinateInterpolator2D_get_field_count(GF_Node *node, u8 IndexMode)
    3661             : {
    3662             :         switch(IndexMode) {
    3663             :         case GF_SG_FIELD_CODING_IN:
    3664             :                 return 3;
    3665             :         case GF_SG_FIELD_CODING_DEF:
    3666             :                 return 2;
    3667             :         case GF_SG_FIELD_CODING_OUT:
    3668             :                 return 3;
    3669             :         case GF_SG_FIELD_CODING_DYN:
    3670             :                 return 0;
    3671             :         default:
    3672             :                 return 4;
    3673             :         }
    3674             : }
    3675             : 
    3676             : static GF_Err CoordinateInterpolator2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3677             : {
    3678           4 :         switch(IndexMode) {
    3679           0 :         case GF_SG_FIELD_CODING_IN:
    3680           0 :                 *allField = CoordinateInterpolator2D_In2All[inField];
    3681             :                 return GF_OK;
    3682           0 :         case GF_SG_FIELD_CODING_DEF:
    3683           0 :                 *allField = CoordinateInterpolator2D_Def2All[inField];
    3684             :                 return GF_OK;
    3685           0 :         case GF_SG_FIELD_CODING_OUT:
    3686           0 :                 *allField = CoordinateInterpolator2D_Out2All[inField];
    3687             :                 return GF_OK;
    3688             :         default:
    3689             :                 return GF_BAD_PARAM;
    3690             :         }
    3691             : }
    3692          20 : static GF_Err CoordinateInterpolator2D_get_field(GF_Node *node, GF_FieldInfo *info)
    3693             : {
    3694          20 :         switch (info->fieldIndex) {
    3695           6 :         case 0:
    3696           6 :                 info->name = "set_fraction";
    3697           6 :                 info->eventType = GF_SG_EVENT_IN;
    3698           6 :                 info->on_event_in = ((M_CoordinateInterpolator2D *)node)->on_set_fraction;
    3699           6 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3700           6 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->set_fraction;
    3701           6 :                 return GF_OK;
    3702           4 :         case 1:
    3703           4 :                 info->name = "key";
    3704           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3705           4 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    3706           4 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->key;
    3707           4 :                 return GF_OK;
    3708           4 :         case 2:
    3709           4 :                 info->name = "keyValue";
    3710           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3711           4 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    3712           4 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->keyValue;
    3713           4 :                 return GF_OK;
    3714           6 :         case 3:
    3715           6 :                 info->name = "value_changed";
    3716           6 :                 info->eventType = GF_SG_EVENT_OUT;
    3717           6 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    3718           6 :                 info->far_ptr = & ((M_CoordinateInterpolator2D *) node)->value_changed;
    3719           6 :                 return GF_OK;
    3720             :         default:
    3721             :                 return GF_BAD_PARAM;
    3722             :         }
    3723             : }
    3724             : 
    3725             : 
    3726          12 : static s32 CoordinateInterpolator2D_get_field_index_by_name(char *name)
    3727             : {
    3728          12 :         if (!strcmp("set_fraction", name)) return 0;
    3729           9 :         if (!strcmp("key", name)) return 1;
    3730           6 :         if (!strcmp("keyValue", name)) return 2;
    3731           3 :         if (!strcmp("value_changed", name)) return 3;
    3732           0 :         return -1;
    3733             : }
    3734             : static Bool CoordinateInterpolator2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3735             : {
    3736           4 :         switch (FieldIndex) {
    3737           1 :         case 1:
    3738           1 :                 *AType = 0;
    3739           1 :                 *QType = 8;
    3740           1 :                 *b_min = FLT2FIX(0);
    3741           1 :                 *b_max = FLT2FIX(1);
    3742             :                 return 1;
    3743           1 :         case 2:
    3744           1 :                 *AType = 0;
    3745           1 :                 *QType = 2;
    3746           1 :                 *b_min = FIX_MIN;
    3747           1 :                 *b_max = FIX_MAX;
    3748             :                 return 1;
    3749             :         default:
    3750             :                 return 0;
    3751             :         }
    3752             : }
    3753             : 
    3754             : 
    3755             : 
    3756           3 : GF_Node *CoordinateInterpolator2D_Create()
    3757             : {
    3758             :         M_CoordinateInterpolator2D *p;
    3759           3 :         GF_SAFEALLOC(p, M_CoordinateInterpolator2D);
    3760           3 :         if(!p) return NULL;
    3761           3 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CoordinateInterpolator2D);
    3762             : 
    3763             :         /*default field values*/
    3764           3 :         return (GF_Node *)p;
    3765             : }
    3766             : 
    3767             : 
    3768             : /*
    3769             :         Curve2D Node deletion
    3770             : */
    3771             : 
    3772        2574 : static void Curve2D_Del(GF_Node *node)
    3773             : {
    3774             :         M_Curve2D *p = (M_Curve2D *) node;
    3775        2574 :         gf_node_unregister((GF_Node *) p->point, (GF_Node *) p);
    3776        2574 :         gf_sg_mfint32_del(p->type);
    3777        2574 :         gf_node_free((GF_Node *) p);
    3778        2574 : }
    3779             : 
    3780             : static const u16 Curve2D_Def2All[] = { 0, 1, 2};
    3781             : static const u16 Curve2D_In2All[] = { 0, 1, 2};
    3782             : static const u16 Curve2D_Out2All[] = { 0, 1, 2};
    3783             : static const u16 Curve2D_Dyn2All[] = { 1};
    3784             : 
    3785             : static u32 Curve2D_get_field_count(GF_Node *node, u8 IndexMode)
    3786             : {
    3787        2420 :         switch(IndexMode) {
    3788             :         case GF_SG_FIELD_CODING_IN:
    3789             :                 return 3;
    3790             :         case GF_SG_FIELD_CODING_DEF:
    3791             :                 return 3;
    3792             :         case GF_SG_FIELD_CODING_OUT:
    3793             :                 return 3;
    3794           1 :         case GF_SG_FIELD_CODING_DYN:
    3795             :                 return 1;
    3796             :         default:
    3797             :                 return 3;
    3798             :         }
    3799             : }
    3800             : 
    3801             : static GF_Err Curve2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3802             : {
    3803        3231 :         switch(IndexMode) {
    3804           0 :         case GF_SG_FIELD_CODING_IN:
    3805           0 :                 *allField = Curve2D_In2All[inField];
    3806             :                 return GF_OK;
    3807        3228 :         case GF_SG_FIELD_CODING_DEF:
    3808        3228 :                 *allField = Curve2D_Def2All[inField];
    3809             :                 return GF_OK;
    3810           0 :         case GF_SG_FIELD_CODING_OUT:
    3811           0 :                 *allField = Curve2D_Out2All[inField];
    3812             :                 return GF_OK;
    3813           0 :         case GF_SG_FIELD_CODING_DYN:
    3814           0 :                 *allField = Curve2D_Dyn2All[inField];
    3815             :                 return GF_OK;
    3816             :         default:
    3817             :                 return GF_BAD_PARAM;
    3818             :         }
    3819             : }
    3820             : static GF_Err Curve2D_get_field(GF_Node *node, GF_FieldInfo *info)
    3821             : {
    3822       15667 :         switch (info->fieldIndex) {
    3823        6862 :         case 0:
    3824        6862 :                 info->name = "point";
    3825        6862 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3826        6862 :                 info->fieldType = GF_SG_VRML_SFNODE;
    3827        6862 :                 info->NDTtype = NDT_SFCoordinate2DNode;
    3828        6862 :                 info->far_ptr = & ((M_Curve2D *)node)->point;
    3829             :                 return GF_OK;
    3830        3520 :         case 1:
    3831        3520 :                 info->name = "fineness";
    3832        3520 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3833        3520 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3834        3520 :                 info->far_ptr = & ((M_Curve2D *) node)->fineness;
    3835             :                 return GF_OK;
    3836        5285 :         case 2:
    3837        5285 :                 info->name = "type";
    3838        5285 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    3839        5285 :                 info->fieldType = GF_SG_VRML_MFINT32;
    3840        5285 :                 info->far_ptr = & ((M_Curve2D *) node)->type;
    3841             :                 return GF_OK;
    3842             :         default:
    3843             :                 return GF_BAD_PARAM;
    3844             :         }
    3845             : }
    3846             : 
    3847             : 
    3848        5717 : static s32 Curve2D_get_field_index_by_name(char *name)
    3849             : {
    3850        5717 :         if (!strcmp("point", name)) return 0;
    3851        1503 :         if (!strcmp("fineness", name)) return 1;
    3852        1499 :         if (!strcmp("type", name)) return 2;
    3853           0 :         return -1;
    3854             : }
    3855             : static Bool Curve2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3856             : {
    3857           3 :         switch (FieldIndex) {
    3858           1 :         case 1:
    3859           1 :                 *AType = 7;
    3860           1 :                 *QType = 0;
    3861           1 :                 *b_min = FLT2FIX(0);
    3862           1 :                 *b_max = FLT2FIX(1);
    3863             :                 return 1;
    3864           1 :         case 2:
    3865           1 :                 *AType = 0;
    3866           1 :                 *QType = 13;
    3867           1 :                 *QT13_bits = 2;
    3868           1 :                 *b_min = FLT2FIX(0);
    3869           1 :                 *b_max = FLT2FIX(3);
    3870             :                 return 1;
    3871             :         default:
    3872             :                 return 0;
    3873             :         }
    3874             : }
    3875             : 
    3876             : 
    3877             : 
    3878        2574 : GF_Node *Curve2D_Create()
    3879             : {
    3880             :         M_Curve2D *p;
    3881        2574 :         GF_SAFEALLOC(p, M_Curve2D);
    3882        2574 :         if(!p) return NULL;
    3883        2574 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Curve2D);
    3884             : 
    3885             :         /*default field values*/
    3886        2574 :         p->fineness = FLT2FIX(0.5);
    3887        2574 :         return (GF_Node *)p;
    3888             : }
    3889             : 
    3890             : 
    3891             : /*
    3892             :         Cylinder Node deletion
    3893             : */
    3894             : 
    3895             : static void Cylinder_Del(GF_Node *node)
    3896             : {
    3897             :         M_Cylinder *p = (M_Cylinder *) node;
    3898          81 :         gf_node_free((GF_Node *) p);
    3899             : }
    3900             : 
    3901             : static const u16 Cylinder_Def2All[] = { 0, 1, 2, 3, 4};
    3902             : 
    3903             : static u32 Cylinder_get_field_count(GF_Node *node, u8 IndexMode)
    3904             : {
    3905          76 :         switch(IndexMode) {
    3906             :         case GF_SG_FIELD_CODING_IN:
    3907             :                 return 0;
    3908          56 :         case GF_SG_FIELD_CODING_DEF:
    3909             :                 return 5;
    3910             :         case GF_SG_FIELD_CODING_OUT:
    3911             :                 return 0;
    3912             :         case GF_SG_FIELD_CODING_DYN:
    3913             :                 return 0;
    3914          17 :         default:
    3915             :                 return 5;
    3916             :         }
    3917             : }
    3918             : 
    3919             : static GF_Err Cylinder_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    3920             : {
    3921         135 :         switch(IndexMode) {
    3922         130 :         case GF_SG_FIELD_CODING_DEF:
    3923         130 :                 *allField = Cylinder_Def2All[inField];
    3924             :                 return GF_OK;
    3925             :         default:
    3926             :                 return GF_BAD_PARAM;
    3927             :         }
    3928             : }
    3929         523 : static GF_Err Cylinder_get_field(GF_Node *node, GF_FieldInfo *info)
    3930             : {
    3931         523 :         switch (info->fieldIndex) {
    3932          78 :         case 0:
    3933          78 :                 info->name = "bottom";
    3934          78 :                 info->eventType = GF_SG_EVENT_FIELD;
    3935          78 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3936          78 :                 info->far_ptr = & ((M_Cylinder *) node)->bottom;
    3937          78 :                 return GF_OK;
    3938         146 :         case 1:
    3939         146 :                 info->name = "height";
    3940         146 :                 info->eventType = GF_SG_EVENT_FIELD;
    3941         146 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3942         146 :                 info->far_ptr = & ((M_Cylinder *) node)->height;
    3943         146 :                 return GF_OK;
    3944         146 :         case 2:
    3945         146 :                 info->name = "radius";
    3946         146 :                 info->eventType = GF_SG_EVENT_FIELD;
    3947         146 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    3948         146 :                 info->far_ptr = & ((M_Cylinder *) node)->radius;
    3949         146 :                 return GF_OK;
    3950          75 :         case 3:
    3951          75 :                 info->name = "side";
    3952          75 :                 info->eventType = GF_SG_EVENT_FIELD;
    3953          75 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3954          75 :                 info->far_ptr = & ((M_Cylinder *) node)->side;
    3955          75 :                 return GF_OK;
    3956          78 :         case 4:
    3957          78 :                 info->name = "top";
    3958          78 :                 info->eventType = GF_SG_EVENT_FIELD;
    3959          78 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    3960          78 :                 info->far_ptr = & ((M_Cylinder *) node)->top;
    3961          78 :                 return GF_OK;
    3962             :         default:
    3963             :                 return GF_BAD_PARAM;
    3964             :         }
    3965             : }
    3966             : 
    3967             : 
    3968          80 : static s32 Cylinder_get_field_index_by_name(char *name)
    3969             : {
    3970          80 :         if (!strcmp("bottom", name)) return 0;
    3971          73 :         if (!strcmp("height", name)) return 1;
    3972          42 :         if (!strcmp("radius", name)) return 2;
    3973          11 :         if (!strcmp("side", name)) return 3;
    3974           7 :         if (!strcmp("top", name)) return 4;
    3975           0 :         return -1;
    3976             : }
    3977             : static Bool Cylinder_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    3978             : {
    3979          21 :         switch (FieldIndex) {
    3980           9 :         case 1:
    3981           9 :                 *AType = 0;
    3982           9 :                 *QType = 11;
    3983           9 :                 *b_min = FLT2FIX(0);
    3984           9 :                 *b_max = FIX_MAX;
    3985             :                 return 1;
    3986           9 :         case 2:
    3987           9 :                 *AType = 0;
    3988           9 :                 *QType = 11;
    3989           9 :                 *b_min = FLT2FIX(0);
    3990           9 :                 *b_max = FIX_MAX;
    3991             :                 return 1;
    3992             :         default:
    3993             :                 return 0;
    3994             :         }
    3995             : }
    3996             : 
    3997             : 
    3998             : 
    3999          81 : GF_Node *Cylinder_Create()
    4000             : {
    4001             :         M_Cylinder *p;
    4002          81 :         GF_SAFEALLOC(p, M_Cylinder);
    4003          81 :         if(!p) return NULL;
    4004          81 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Cylinder);
    4005             : 
    4006             :         /*default field values*/
    4007          81 :         p->bottom = 1;
    4008          81 :         p->height = FLT2FIX(2);
    4009          81 :         p->radius = FLT2FIX(1);
    4010          81 :         p->side = 1;
    4011          81 :         p->top = 1;
    4012          81 :         return (GF_Node *)p;
    4013             : }
    4014             : 
    4015             : 
    4016             : /*
    4017             :         CylinderSensor Node deletion
    4018             : */
    4019             : 
    4020             : static void CylinderSensor_Del(GF_Node *node)
    4021             : {
    4022             :         M_CylinderSensor *p = (M_CylinderSensor *) node;
    4023          67 :         gf_node_free((GF_Node *) p);
    4024             : }
    4025             : 
    4026             : static const u16 CylinderSensor_Def2All[] = { 0, 1, 2, 3, 4, 5};
    4027             : static const u16 CylinderSensor_In2All[] = { 0, 1, 2, 3, 4, 5};
    4028             : static const u16 CylinderSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    4029             : 
    4030             : static u32 CylinderSensor_get_field_count(GF_Node *node, u8 IndexMode)
    4031             : {
    4032             :         switch(IndexMode) {
    4033             :         case GF_SG_FIELD_CODING_IN:
    4034             :                 return 6;
    4035             :         case GF_SG_FIELD_CODING_DEF:
    4036             :                 return 6;
    4037             :         case GF_SG_FIELD_CODING_OUT:
    4038             :                 return 9;
    4039             :         case GF_SG_FIELD_CODING_DYN:
    4040             :                 return 0;
    4041             :         default:
    4042             :                 return 9;
    4043             :         }
    4044             : }
    4045             : 
    4046             : static GF_Err CylinderSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4047             : {
    4048         129 :         switch(IndexMode) {
    4049           0 :         case GF_SG_FIELD_CODING_IN:
    4050           0 :                 *allField = CylinderSensor_In2All[inField];
    4051             :                 return GF_OK;
    4052         120 :         case GF_SG_FIELD_CODING_DEF:
    4053         120 :                 *allField = CylinderSensor_Def2All[inField];
    4054             :                 return GF_OK;
    4055           0 :         case GF_SG_FIELD_CODING_OUT:
    4056           0 :                 *allField = CylinderSensor_Out2All[inField];
    4057             :                 return GF_OK;
    4058             :         default:
    4059             :                 return GF_BAD_PARAM;
    4060             :         }
    4061             : }
    4062         491 : static GF_Err CylinderSensor_get_field(GF_Node *node, GF_FieldInfo *info)
    4063             : {
    4064         491 :         switch (info->fieldIndex) {
    4065          72 :         case 0:
    4066          72 :                 info->name = "autoOffset";
    4067          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4068          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4069          72 :                 info->far_ptr = & ((M_CylinderSensor *) node)->autoOffset;
    4070          72 :                 return GF_OK;
    4071          72 :         case 1:
    4072          72 :                 info->name = "diskAngle";
    4073          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4074          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4075          72 :                 info->far_ptr = & ((M_CylinderSensor *) node)->diskAngle;
    4076          72 :                 return GF_OK;
    4077          72 :         case 2:
    4078          72 :                 info->name = "enabled";
    4079          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4080          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4081          72 :                 info->far_ptr = & ((M_CylinderSensor *) node)->enabled;
    4082          72 :                 return GF_OK;
    4083          72 :         case 3:
    4084          72 :                 info->name = "maxAngle";
    4085          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4086          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4087          72 :                 info->far_ptr = & ((M_CylinderSensor *) node)->maxAngle;
    4088          72 :                 return GF_OK;
    4089          72 :         case 4:
    4090          72 :                 info->name = "minAngle";
    4091          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4092          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4093          72 :                 info->far_ptr = & ((M_CylinderSensor *) node)->minAngle;
    4094          72 :                 return GF_OK;
    4095          72 :         case 5:
    4096          72 :                 info->name = "offset";
    4097          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4098          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4099          72 :                 info->far_ptr = & ((M_CylinderSensor *) node)->offset;
    4100          72 :                 return GF_OK;
    4101          21 :         case 6:
    4102          21 :                 info->name = "isActive";
    4103          21 :                 info->eventType = GF_SG_EVENT_OUT;
    4104          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4105          21 :                 info->far_ptr = & ((M_CylinderSensor *) node)->isActive;
    4106          21 :                 return GF_OK;
    4107          19 :         case 7:
    4108          19 :                 info->name = "rotation_changed";
    4109          19 :                 info->eventType = GF_SG_EVENT_OUT;
    4110          19 :                 info->fieldType = GF_SG_VRML_SFROTATION;
    4111          19 :                 info->far_ptr = & ((M_CylinderSensor *) node)->rotation_changed;
    4112          19 :                 return GF_OK;
    4113          19 :         case 8:
    4114          19 :                 info->name = "trackPoint_changed";
    4115          19 :                 info->eventType = GF_SG_EVENT_OUT;
    4116          19 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    4117          19 :                 info->far_ptr = & ((M_CylinderSensor *) node)->trackPoint_changed;
    4118          19 :                 return GF_OK;
    4119             :         default:
    4120             :                 return GF_BAD_PARAM;
    4121             :         }
    4122             : }
    4123             : 
    4124             : 
    4125          13 : static s32 CylinderSensor_get_field_index_by_name(char *name)
    4126             : {
    4127          13 :         if (!strcmp("autoOffset", name)) return 0;
    4128          12 :         if (!strcmp("diskAngle", name)) return 1;
    4129          11 :         if (!strcmp("enabled", name)) return 2;
    4130          10 :         if (!strcmp("maxAngle", name)) return 3;
    4131           9 :         if (!strcmp("minAngle", name)) return 4;
    4132           8 :         if (!strcmp("offset", name)) return 5;
    4133           7 :         if (!strcmp("isActive", name)) return 6;
    4134           4 :         if (!strcmp("rotation_changed", name)) return 7;
    4135           2 :         if (!strcmp("trackPoint_changed", name)) return 8;
    4136           0 :         return -1;
    4137             : }
    4138             : static Bool CylinderSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4139             : {
    4140           9 :         switch (FieldIndex) {
    4141           1 :         case 1:
    4142           1 :                 *AType = 0;
    4143           1 :                 *QType = 6;
    4144           1 :                 *b_min = FLT2FIX(0);
    4145           1 :                 *b_max = FLT2FIX(1.5707963);
    4146             :                 return 1;
    4147           1 :         case 3:
    4148           1 :                 *AType = 0;
    4149           1 :                 *QType = 6;
    4150           1 :                 *b_min = FLT2FIX(-6.2831853);
    4151           1 :                 *b_max = FLT2FIX(6.2831853);
    4152             :                 return 1;
    4153           1 :         case 4:
    4154           1 :                 *AType = 0;
    4155           1 :                 *QType = 6;
    4156           1 :                 *b_min = FLT2FIX(-6.2831853);
    4157           1 :                 *b_max = FLT2FIX(6.2831853);
    4158             :                 return 1;
    4159           1 :         case 5:
    4160           1 :                 *AType = 0;
    4161           1 :                 *QType = 6;
    4162           1 :                 *b_min = FLT2FIX(0);
    4163           1 :                 *b_max = FLT2FIX(6.2831853);
    4164             :                 return 1;
    4165             :         default:
    4166             :                 return 0;
    4167             :         }
    4168             : }
    4169             : 
    4170             : 
    4171             : 
    4172          67 : GF_Node *CylinderSensor_Create()
    4173             : {
    4174             :         M_CylinderSensor *p;
    4175          67 :         GF_SAFEALLOC(p, M_CylinderSensor);
    4176          67 :         if(!p) return NULL;
    4177          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CylinderSensor);
    4178             : 
    4179             :         /*default field values*/
    4180          67 :         p->autoOffset = 1;
    4181          67 :         p->diskAngle = FLT2FIX(0.262);
    4182          67 :         p->enabled = 1;
    4183          67 :         p->maxAngle = FLT2FIX(-1);
    4184          67 :         p->minAngle = FLT2FIX(0);
    4185          67 :         p->offset = FLT2FIX(0);
    4186          67 :         return (GF_Node *)p;
    4187             : }
    4188             : 
    4189             : 
    4190             : /*
    4191             :         DirectionalLight Node deletion
    4192             : */
    4193             : 
    4194             : static void DirectionalLight_Del(GF_Node *node)
    4195             : {
    4196             :         M_DirectionalLight *p = (M_DirectionalLight *) node;
    4197           9 :         gf_node_free((GF_Node *) p);
    4198             : }
    4199             : 
    4200             : static const u16 DirectionalLight_Def2All[] = { 0, 1, 2, 3, 4};
    4201             : static const u16 DirectionalLight_In2All[] = { 0, 1, 2, 3, 4};
    4202             : static const u16 DirectionalLight_Out2All[] = { 0, 1, 2, 3, 4};
    4203             : static const u16 DirectionalLight_Dyn2All[] = { 0, 1, 2, 3};
    4204             : 
    4205             : static u32 DirectionalLight_get_field_count(GF_Node *node, u8 IndexMode)
    4206             : {
    4207           6 :         switch(IndexMode) {
    4208             :         case GF_SG_FIELD_CODING_IN:
    4209             :                 return 5;
    4210             :         case GF_SG_FIELD_CODING_DEF:
    4211             :                 return 5;
    4212             :         case GF_SG_FIELD_CODING_OUT:
    4213             :                 return 5;
    4214           1 :         case GF_SG_FIELD_CODING_DYN:
    4215             :                 return 4;
    4216             :         default:
    4217             :                 return 5;
    4218             :         }
    4219             : }
    4220             : 
    4221             : static GF_Err DirectionalLight_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4222             : {
    4223           5 :         switch(IndexMode) {
    4224           0 :         case GF_SG_FIELD_CODING_IN:
    4225           0 :                 *allField = DirectionalLight_In2All[inField];
    4226             :                 return GF_OK;
    4227           0 :         case GF_SG_FIELD_CODING_DEF:
    4228           0 :                 *allField = DirectionalLight_Def2All[inField];
    4229             :                 return GF_OK;
    4230           0 :         case GF_SG_FIELD_CODING_OUT:
    4231           0 :                 *allField = DirectionalLight_Out2All[inField];
    4232             :                 return GF_OK;
    4233           0 :         case GF_SG_FIELD_CODING_DYN:
    4234           0 :                 *allField = DirectionalLight_Dyn2All[inField];
    4235             :                 return GF_OK;
    4236             :         default:
    4237             :                 return GF_BAD_PARAM;
    4238             :         }
    4239             : }
    4240          26 : static GF_Err DirectionalLight_get_field(GF_Node *node, GF_FieldInfo *info)
    4241             : {
    4242          26 :         switch (info->fieldIndex) {
    4243           2 :         case 0:
    4244           2 :                 info->name = "ambientIntensity";
    4245           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4246           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4247           2 :                 info->far_ptr = & ((M_DirectionalLight *) node)->ambientIntensity;
    4248           2 :                 return GF_OK;
    4249           9 :         case 1:
    4250           9 :                 info->name = "color";
    4251           9 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4252           9 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    4253           9 :                 info->far_ptr = & ((M_DirectionalLight *) node)->color;
    4254           9 :                 return GF_OK;
    4255          11 :         case 2:
    4256          11 :                 info->name = "direction";
    4257          11 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4258          11 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    4259          11 :                 info->far_ptr = & ((M_DirectionalLight *) node)->direction;
    4260          11 :                 return GF_OK;
    4261           2 :         case 3:
    4262           2 :                 info->name = "intensity";
    4263           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4264           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4265           2 :                 info->far_ptr = & ((M_DirectionalLight *) node)->intensity;
    4266           2 :                 return GF_OK;
    4267           2 :         case 4:
    4268           2 :                 info->name = "on";
    4269           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4270           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4271           2 :                 info->far_ptr = & ((M_DirectionalLight *) node)->on;
    4272           2 :                 return GF_OK;
    4273             :         default:
    4274             :                 return GF_BAD_PARAM;
    4275             :         }
    4276             : }
    4277             : 
    4278             : 
    4279          20 : static s32 DirectionalLight_get_field_index_by_name(char *name)
    4280             : {
    4281          20 :         if (!strcmp("ambientIntensity", name)) return 0;
    4282          19 :         if (!strcmp("color", name)) return 1;
    4283          11 :         if (!strcmp("direction", name)) return 2;
    4284           2 :         if (!strcmp("intensity", name)) return 3;
    4285           1 :         if (!strcmp("on", name)) return 4;
    4286           0 :         return -1;
    4287             : }
    4288             : static Bool DirectionalLight_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4289             : {
    4290           5 :         switch (FieldIndex) {
    4291           1 :         case 0:
    4292           1 :                 *AType = 8;
    4293           1 :                 *QType = 4;
    4294           1 :                 *b_min = FLT2FIX(0);
    4295           1 :                 *b_max = FLT2FIX(1);
    4296             :                 return 1;
    4297           1 :         case 1:
    4298           1 :                 *AType = 4;
    4299           1 :                 *QType = 4;
    4300           1 :                 *b_min = FLT2FIX(0);
    4301           1 :                 *b_max = FLT2FIX(1);
    4302             :                 return 1;
    4303           1 :         case 2:
    4304           1 :                 *AType = 9;
    4305           1 :                 *QType = 9;
    4306             :                 return 1;
    4307           1 :         case 3:
    4308           1 :                 *AType = 8;
    4309           1 :                 *QType = 4;
    4310           1 :                 *b_min = FLT2FIX(0);
    4311           1 :                 *b_max = FLT2FIX(1);
    4312             :                 return 1;
    4313             :         default:
    4314             :                 return 0;
    4315             :         }
    4316             : }
    4317             : 
    4318             : 
    4319             : 
    4320           9 : GF_Node *DirectionalLight_Create()
    4321             : {
    4322             :         M_DirectionalLight *p;
    4323           9 :         GF_SAFEALLOC(p, M_DirectionalLight);
    4324           9 :         if(!p) return NULL;
    4325           9 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DirectionalLight);
    4326             : 
    4327             :         /*default field values*/
    4328           9 :         p->ambientIntensity = FLT2FIX(0);
    4329           9 :         p->color.red = FLT2FIX(1);
    4330           9 :         p->color.green = FLT2FIX(1);
    4331           9 :         p->color.blue = FLT2FIX(1);
    4332           9 :         p->direction.x = FLT2FIX(0);
    4333           9 :         p->direction.y = FLT2FIX(0);
    4334           9 :         p->direction.z = FLT2FIX(-1);
    4335           9 :         p->intensity = FLT2FIX(1);
    4336           9 :         p->on = 1;
    4337           9 :         return (GF_Node *)p;
    4338             : }
    4339             : 
    4340             : 
    4341             : /*
    4342             :         DiscSensor Node deletion
    4343             : */
    4344             : 
    4345             : static void DiscSensor_Del(GF_Node *node)
    4346             : {
    4347             :         M_DiscSensor *p = (M_DiscSensor *) node;
    4348          69 :         gf_node_free((GF_Node *) p);
    4349             : }
    4350             : 
    4351             : static const u16 DiscSensor_Def2All[] = { 0, 1, 2, 3, 4};
    4352             : static const u16 DiscSensor_In2All[] = { 0, 1, 2, 3, 4};
    4353             : static const u16 DiscSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    4354             : 
    4355             : static u32 DiscSensor_get_field_count(GF_Node *node, u8 IndexMode)
    4356             : {
    4357             :         switch(IndexMode) {
    4358             :         case GF_SG_FIELD_CODING_IN:
    4359             :                 return 5;
    4360             :         case GF_SG_FIELD_CODING_DEF:
    4361             :                 return 5;
    4362             :         case GF_SG_FIELD_CODING_OUT:
    4363             :                 return 8;
    4364             :         case GF_SG_FIELD_CODING_DYN:
    4365             :                 return 0;
    4366             :         default:
    4367             :                 return 8;
    4368             :         }
    4369             : }
    4370             : 
    4371             : static GF_Err DiscSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4372             : {
    4373         123 :         switch(IndexMode) {
    4374           0 :         case GF_SG_FIELD_CODING_IN:
    4375           0 :                 *allField = DiscSensor_In2All[inField];
    4376             :                 return GF_OK;
    4377         115 :         case GF_SG_FIELD_CODING_DEF:
    4378         115 :                 *allField = DiscSensor_Def2All[inField];
    4379             :                 return GF_OK;
    4380           0 :         case GF_SG_FIELD_CODING_OUT:
    4381           0 :                 *allField = DiscSensor_Out2All[inField];
    4382             :                 return GF_OK;
    4383             :         default:
    4384             :                 return GF_BAD_PARAM;
    4385             :         }
    4386             : }
    4387         476 : static GF_Err DiscSensor_get_field(GF_Node *node, GF_FieldInfo *info)
    4388             : {
    4389         476 :         switch (info->fieldIndex) {
    4390         132 :         case 0:
    4391         132 :                 info->name = "autoOffset";
    4392         132 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4393         132 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4394         132 :                 info->far_ptr = & ((M_DiscSensor *) node)->autoOffset;
    4395         132 :                 return GF_OK;
    4396          72 :         case 1:
    4397          72 :                 info->name = "enabled";
    4398          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4399          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4400          72 :                 info->far_ptr = & ((M_DiscSensor *) node)->enabled;
    4401          72 :                 return GF_OK;
    4402          72 :         case 2:
    4403          72 :                 info->name = "maxAngle";
    4404          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4405          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4406          72 :                 info->far_ptr = & ((M_DiscSensor *) node)->maxAngle;
    4407          72 :                 return GF_OK;
    4408          72 :         case 3:
    4409          72 :                 info->name = "minAngle";
    4410          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4411          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4412          72 :                 info->far_ptr = & ((M_DiscSensor *) node)->minAngle;
    4413          72 :                 return GF_OK;
    4414          72 :         case 4:
    4415          72 :                 info->name = "offset";
    4416          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4417          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4418          72 :                 info->far_ptr = & ((M_DiscSensor *) node)->offset;
    4419          72 :                 return GF_OK;
    4420          17 :         case 5:
    4421          17 :                 info->name = "isActive";
    4422          17 :                 info->eventType = GF_SG_EVENT_OUT;
    4423          17 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4424          17 :                 info->far_ptr = & ((M_DiscSensor *) node)->isActive;
    4425          17 :                 return GF_OK;
    4426          22 :         case 6:
    4427          22 :                 info->name = "rotation_changed";
    4428          22 :                 info->eventType = GF_SG_EVENT_OUT;
    4429          22 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4430          22 :                 info->far_ptr = & ((M_DiscSensor *) node)->rotation_changed;
    4431          22 :                 return GF_OK;
    4432          17 :         case 7:
    4433          17 :                 info->name = "trackPoint_changed";
    4434          17 :                 info->eventType = GF_SG_EVENT_OUT;
    4435          17 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    4436          17 :                 info->far_ptr = & ((M_DiscSensor *) node)->trackPoint_changed;
    4437          17 :                 return GF_OK;
    4438             :         default:
    4439             :                 return GF_BAD_PARAM;
    4440             :         }
    4441             : }
    4442             : 
    4443             : 
    4444          27 : static s32 DiscSensor_get_field_index_by_name(char *name)
    4445             : {
    4446          27 :         if (!strcmp("autoOffset", name)) return 0;
    4447          10 :         if (!strcmp("enabled", name)) return 1;
    4448           9 :         if (!strcmp("maxAngle", name)) return 2;
    4449           8 :         if (!strcmp("minAngle", name)) return 3;
    4450           7 :         if (!strcmp("offset", name)) return 4;
    4451           6 :         if (!strcmp("isActive", name)) return 5;
    4452           5 :         if (!strcmp("rotation_changed", name)) return 6;
    4453           1 :         if (!strcmp("trackPoint_changed", name)) return 7;
    4454           0 :         return -1;
    4455             : }
    4456             : static Bool DiscSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4457             : {
    4458           8 :         switch (FieldIndex) {
    4459           1 :         case 2:
    4460           1 :                 *AType = 0;
    4461           1 :                 *QType = 6;
    4462           1 :                 *b_min = FLT2FIX(-6.2831853);
    4463           1 :                 *b_max = FLT2FIX(6.2831853);
    4464             :                 return 1;
    4465           1 :         case 3:
    4466           1 :                 *AType = 0;
    4467           1 :                 *QType = 6;
    4468           1 :                 *b_min = FLT2FIX(-6.2831853);
    4469           1 :                 *b_max = FLT2FIX(6.2831853);
    4470             :                 return 1;
    4471           1 :         case 4:
    4472           1 :                 *AType = 0;
    4473           1 :                 *QType = 6;
    4474           1 :                 *b_min = FLT2FIX(0);
    4475           1 :                 *b_max = FLT2FIX(6.2831853);
    4476             :                 return 1;
    4477             :         default:
    4478             :                 return 0;
    4479             :         }
    4480             : }
    4481             : 
    4482             : 
    4483             : 
    4484          69 : GF_Node *DiscSensor_Create()
    4485             : {
    4486             :         M_DiscSensor *p;
    4487          69 :         GF_SAFEALLOC(p, M_DiscSensor);
    4488          69 :         if(!p) return NULL;
    4489          69 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DiscSensor);
    4490             : 
    4491             :         /*default field values*/
    4492          69 :         p->autoOffset = 1;
    4493          69 :         p->enabled = 1;
    4494          69 :         p->maxAngle = FLT2FIX(-1);
    4495          69 :         p->minAngle = FLT2FIX(0);
    4496          69 :         p->offset = FLT2FIX(0);
    4497          69 :         return (GF_Node *)p;
    4498             : }
    4499             : 
    4500             : 
    4501             : /*
    4502             :         ElevationGrid Node deletion
    4503             : */
    4504             : 
    4505          67 : static void ElevationGrid_Del(GF_Node *node)
    4506             : {
    4507             :         M_ElevationGrid *p = (M_ElevationGrid *) node;
    4508          67 :         gf_sg_mffloat_del(p->set_height);
    4509          67 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    4510          67 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
    4511          67 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
    4512          67 :         gf_sg_mffloat_del(p->height);
    4513          67 :         gf_node_free((GF_Node *) p);
    4514          67 : }
    4515             : 
    4516             : static const u16 ElevationGrid_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    4517             : static const u16 ElevationGrid_In2All[] = { 0, 1, 2, 3};
    4518             : static const u16 ElevationGrid_Out2All[] = { 1, 2, 3};
    4519             : 
    4520             : static u32 ElevationGrid_get_field_count(GF_Node *node, u8 IndexMode)
    4521             : {
    4522             :         switch(IndexMode) {
    4523             :         case GF_SG_FIELD_CODING_IN:
    4524             :                 return 4;
    4525             :         case GF_SG_FIELD_CODING_DEF:
    4526             :                 return 13;
    4527             :         case GF_SG_FIELD_CODING_OUT:
    4528             :                 return 3;
    4529             :         case GF_SG_FIELD_CODING_DYN:
    4530             :                 return 0;
    4531             :         default:
    4532             :                 return 14;
    4533             :         }
    4534             : }
    4535             : 
    4536             : static GF_Err ElevationGrid_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4537             : {
    4538         364 :         switch(IndexMode) {
    4539           0 :         case GF_SG_FIELD_CODING_IN:
    4540           0 :                 *allField = ElevationGrid_In2All[inField];
    4541             :                 return GF_OK;
    4542         350 :         case GF_SG_FIELD_CODING_DEF:
    4543         350 :                 *allField = ElevationGrid_Def2All[inField];
    4544             :                 return GF_OK;
    4545           0 :         case GF_SG_FIELD_CODING_OUT:
    4546           0 :                 *allField = ElevationGrid_Out2All[inField];
    4547             :                 return GF_OK;
    4548             :         default:
    4549             :                 return GF_BAD_PARAM;
    4550             :         }
    4551             : }
    4552        1208 : static GF_Err ElevationGrid_get_field(GF_Node *node, GF_FieldInfo *info)
    4553             : {
    4554        1208 :         switch (info->fieldIndex) {
    4555          17 :         case 0:
    4556          17 :                 info->name = "set_height";
    4557          17 :                 info->eventType = GF_SG_EVENT_IN;
    4558          17 :                 info->on_event_in = ((M_ElevationGrid *)node)->on_set_height;
    4559          17 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    4560          17 :                 info->far_ptr = & ((M_ElevationGrid *) node)->set_height;
    4561          17 :                 return GF_OK;
    4562          37 :         case 1:
    4563          37 :                 info->name = "color";
    4564          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4565          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
    4566          37 :                 info->NDTtype = NDT_SFColorNode;
    4567          37 :                 info->far_ptr = & ((M_ElevationGrid *)node)->color;
    4568          37 :                 return GF_OK;
    4569          37 :         case 2:
    4570          37 :                 info->name = "normal";
    4571          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4572          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
    4573          37 :                 info->NDTtype = NDT_SFNormalNode;
    4574          37 :                 info->far_ptr = & ((M_ElevationGrid *)node)->normal;
    4575          37 :                 return GF_OK;
    4576          37 :         case 3:
    4577          37 :                 info->name = "texCoord";
    4578          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4579          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
    4580          37 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    4581          37 :                 info->far_ptr = & ((M_ElevationGrid *)node)->texCoord;
    4582          37 :                 return GF_OK;
    4583         132 :         case 4:
    4584         132 :                 info->name = "height";
    4585         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4586         132 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    4587         132 :                 info->far_ptr = & ((M_ElevationGrid *) node)->height;
    4588         132 :                 return GF_OK;
    4589          72 :         case 5:
    4590          72 :                 info->name = "ccw";
    4591          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    4592          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4593          72 :                 info->far_ptr = & ((M_ElevationGrid *) node)->ccw;
    4594          72 :                 return GF_OK;
    4595          72 :         case 6:
    4596          72 :                 info->name = "colorPerVertex";
    4597          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    4598          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4599          72 :                 info->far_ptr = & ((M_ElevationGrid *) node)->colorPerVertex;
    4600          72 :                 return GF_OK;
    4601         132 :         case 7:
    4602         132 :                 info->name = "creaseAngle";
    4603         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4604         132 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4605         132 :                 info->far_ptr = & ((M_ElevationGrid *) node)->creaseAngle;
    4606         132 :                 return GF_OK;
    4607          72 :         case 8:
    4608          72 :                 info->name = "normalPerVertex";
    4609          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    4610          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4611          72 :                 info->far_ptr = & ((M_ElevationGrid *) node)->normalPerVertex;
    4612          72 :                 return GF_OK;
    4613          72 :         case 9:
    4614          72 :                 info->name = "solid";
    4615          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    4616          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4617          72 :                 info->far_ptr = & ((M_ElevationGrid *) node)->solid;
    4618          72 :                 return GF_OK;
    4619         132 :         case 10:
    4620         132 :                 info->name = "xDimension";
    4621         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4622         132 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4623         132 :                 info->far_ptr = & ((M_ElevationGrid *) node)->xDimension;
    4624         132 :                 return GF_OK;
    4625         132 :         case 11:
    4626         132 :                 info->name = "xSpacing";
    4627         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4628         132 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4629         132 :                 info->far_ptr = & ((M_ElevationGrid *) node)->xSpacing;
    4630         132 :                 return GF_OK;
    4631         132 :         case 12:
    4632         132 :                 info->name = "zDimension";
    4633         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4634         132 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4635         132 :                 info->far_ptr = & ((M_ElevationGrid *) node)->zDimension;
    4636         132 :                 return GF_OK;
    4637         132 :         case 13:
    4638         132 :                 info->name = "zSpacing";
    4639         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4640         132 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4641         132 :                 info->far_ptr = & ((M_ElevationGrid *) node)->zSpacing;
    4642         132 :                 return GF_OK;
    4643             :         default:
    4644             :                 return GF_BAD_PARAM;
    4645             :         }
    4646             : }
    4647             : 
    4648             : 
    4649         110 : static s32 ElevationGrid_get_field_index_by_name(char *name)
    4650             : {
    4651         110 :         if (!strcmp("set_height", name)) return 0;
    4652         109 :         if (!strcmp("color", name)) return 1;
    4653         108 :         if (!strcmp("normal", name)) return 2;
    4654         107 :         if (!strcmp("texCoord", name)) return 3;
    4655         106 :         if (!strcmp("height", name)) return 4;
    4656          89 :         if (!strcmp("ccw", name)) return 5;
    4657          88 :         if (!strcmp("colorPerVertex", name)) return 6;
    4658          87 :         if (!strcmp("creaseAngle", name)) return 7;
    4659          70 :         if (!strcmp("normalPerVertex", name)) return 8;
    4660          69 :         if (!strcmp("solid", name)) return 9;
    4661          68 :         if (!strcmp("xDimension", name)) return 10;
    4662          51 :         if (!strcmp("xSpacing", name)) return 11;
    4663          34 :         if (!strcmp("zDimension", name)) return 12;
    4664          17 :         if (!strcmp("zSpacing", name)) return 13;
    4665           0 :         return -1;
    4666             : }
    4667        1110 : static Bool ElevationGrid_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4668             : {
    4669        1110 :         switch (FieldIndex) {
    4670        1057 :         case 4:
    4671        1057 :                 *AType = 7;
    4672        1057 :                 *QType = 11;
    4673        1057 :                 *b_min = FIX_MIN;
    4674        1057 :                 *b_max = FIX_MAX;
    4675             :                 return 1;
    4676           9 :         case 7:
    4677           9 :                 *AType = 0;
    4678           9 :                 *QType = 6;
    4679           9 :                 *b_min = FLT2FIX(0);
    4680           9 :                 *b_max = FLT2FIX(6.2831853);
    4681             :                 return 1;
    4682           9 :         case 10:
    4683           9 :                 *AType = 0;
    4684           9 :                 *QType = 11;
    4685           9 :                 *b_min = FLT2FIX(0);
    4686           9 :                 *b_max = FIX_MAX;
    4687             :                 return 1;
    4688           9 :         case 11:
    4689           9 :                 *AType = 0;
    4690           9 :                 *QType = 11;
    4691           9 :                 *b_min = FLT2FIX(0);
    4692           9 :                 *b_max = FIX_MAX;
    4693             :                 return 1;
    4694           9 :         case 12:
    4695           9 :                 *AType = 0;
    4696           9 :                 *QType = 11;
    4697           9 :                 *b_min = FLT2FIX(0);
    4698           9 :                 *b_max = FIX_MAX;
    4699             :                 return 1;
    4700           9 :         case 13:
    4701           9 :                 *AType = 0;
    4702           9 :                 *QType = 11;
    4703           9 :                 *b_min = FLT2FIX(0);
    4704           9 :                 *b_max = FIX_MAX;
    4705             :                 return 1;
    4706             :         default:
    4707             :                 return 0;
    4708             :         }
    4709             : }
    4710             : 
    4711             : 
    4712             : 
    4713          67 : GF_Node *ElevationGrid_Create()
    4714             : {
    4715             :         M_ElevationGrid *p;
    4716          67 :         GF_SAFEALLOC(p, M_ElevationGrid);
    4717          67 :         if(!p) return NULL;
    4718          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ElevationGrid);
    4719             : 
    4720             :         /*default field values*/
    4721          67 :         p->ccw = 1;
    4722          67 :         p->colorPerVertex = 1;
    4723          67 :         p->creaseAngle = FLT2FIX(0.0);
    4724          67 :         p->normalPerVertex = 1;
    4725          67 :         p->solid = 1;
    4726          67 :         p->xDimension = 0;
    4727          67 :         p->xSpacing = FLT2FIX(1.0);
    4728          67 :         p->zDimension = 0;
    4729          67 :         p->zSpacing = FLT2FIX(1.0);
    4730          67 :         return (GF_Node *)p;
    4731             : }
    4732             : 
    4733             : 
    4734             : /*
    4735             :         Expression Node deletion
    4736             : */
    4737             : 
    4738             : static void Expression_Del(GF_Node *node)
    4739             : {
    4740             :         M_Expression *p = (M_Expression *) node;
    4741           1 :         gf_node_free((GF_Node *) p);
    4742             : }
    4743             : 
    4744             : static const u16 Expression_Def2All[] = { 0, 1, 2, 3, 4, 5};
    4745             : static const u16 Expression_In2All[] = { 0, 1, 2, 3, 4, 5};
    4746             : static const u16 Expression_Out2All[] = { 0, 1, 2, 3, 4, 5};
    4747             : 
    4748             : static u32 Expression_get_field_count(GF_Node *node, u8 IndexMode)
    4749             : {
    4750           6 :         switch(IndexMode) {
    4751             :         case GF_SG_FIELD_CODING_IN:
    4752             :                 return 6;
    4753             :         case GF_SG_FIELD_CODING_DEF:
    4754             :                 return 6;
    4755             :         case GF_SG_FIELD_CODING_OUT:
    4756             :                 return 6;
    4757           1 :         case GF_SG_FIELD_CODING_DYN:
    4758             :                 return 0;
    4759             :         default:
    4760             :                 return 6;
    4761             :         }
    4762             : }
    4763             : 
    4764             : static GF_Err Expression_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4765             : {
    4766           6 :         switch(IndexMode) {
    4767           0 :         case GF_SG_FIELD_CODING_IN:
    4768           0 :                 *allField = Expression_In2All[inField];
    4769             :                 return GF_OK;
    4770           0 :         case GF_SG_FIELD_CODING_DEF:
    4771           0 :                 *allField = Expression_Def2All[inField];
    4772             :                 return GF_OK;
    4773           0 :         case GF_SG_FIELD_CODING_OUT:
    4774           0 :                 *allField = Expression_Out2All[inField];
    4775             :                 return GF_OK;
    4776             :         default:
    4777             :                 return GF_BAD_PARAM;
    4778             :         }
    4779             : }
    4780          12 : static GF_Err Expression_get_field(GF_Node *node, GF_FieldInfo *info)
    4781             : {
    4782          12 :         switch (info->fieldIndex) {
    4783           2 :         case 0:
    4784           2 :                 info->name = "expression_select1";
    4785           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4786           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4787           2 :                 info->far_ptr = & ((M_Expression *) node)->expression_select1;
    4788           2 :                 return GF_OK;
    4789           2 :         case 1:
    4790           2 :                 info->name = "expression_intensity1";
    4791           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4792           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4793           2 :                 info->far_ptr = & ((M_Expression *) node)->expression_intensity1;
    4794           2 :                 return GF_OK;
    4795           2 :         case 2:
    4796           2 :                 info->name = "expression_select2";
    4797           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4798           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4799           2 :                 info->far_ptr = & ((M_Expression *) node)->expression_select2;
    4800           2 :                 return GF_OK;
    4801           2 :         case 3:
    4802           2 :                 info->name = "expression_intensity2";
    4803           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4804           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    4805           2 :                 info->far_ptr = & ((M_Expression *) node)->expression_intensity2;
    4806           2 :                 return GF_OK;
    4807           2 :         case 4:
    4808           2 :                 info->name = "init_face";
    4809           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4810           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4811           2 :                 info->far_ptr = & ((M_Expression *) node)->init_face;
    4812           2 :                 return GF_OK;
    4813           2 :         case 5:
    4814           2 :                 info->name = "expression_def";
    4815           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    4816           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4817           2 :                 info->far_ptr = & ((M_Expression *) node)->expression_def;
    4818           2 :                 return GF_OK;
    4819             :         default:
    4820             :                 return GF_BAD_PARAM;
    4821             :         }
    4822             : }
    4823             : 
    4824             : 
    4825           6 : static s32 Expression_get_field_index_by_name(char *name)
    4826             : {
    4827           6 :         if (!strcmp("expression_select1", name)) return 0;
    4828           5 :         if (!strcmp("expression_intensity1", name)) return 1;
    4829           4 :         if (!strcmp("expression_select2", name)) return 2;
    4830           3 :         if (!strcmp("expression_intensity2", name)) return 3;
    4831           2 :         if (!strcmp("init_face", name)) return 4;
    4832           1 :         if (!strcmp("expression_def", name)) return 5;
    4833           0 :         return -1;
    4834             : }
    4835             : static Bool Expression_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    4836             : {
    4837           6 :         switch (FieldIndex) {
    4838           1 :         case 0:
    4839           1 :                 *AType = 0;
    4840           1 :                 *QType = 13;
    4841           1 :                 *QT13_bits = 5;
    4842           1 :                 *b_min = FLT2FIX(0);
    4843           1 :                 *b_max = FLT2FIX(31);
    4844             :                 return 1;
    4845           1 :         case 1:
    4846           1 :                 *AType = 0;
    4847           1 :                 *QType = 13;
    4848           1 :                 *QT13_bits = 6;
    4849           1 :                 *b_min = FLT2FIX(0);
    4850           1 :                 *b_max = FLT2FIX(63);
    4851             :                 return 1;
    4852           1 :         case 2:
    4853           1 :                 *AType = 0;
    4854           1 :                 *QType = 13;
    4855           1 :                 *QT13_bits = 5;
    4856           1 :                 *b_min = FLT2FIX(0);
    4857           1 :                 *b_max = FLT2FIX(31);
    4858             :                 return 1;
    4859           1 :         case 3:
    4860           1 :                 *AType = 0;
    4861           1 :                 *QType = 13;
    4862           1 :                 *QT13_bits = 6;
    4863           1 :                 *b_min = FLT2FIX(0);
    4864           1 :                 *b_max = FLT2FIX(63);
    4865             :                 return 1;
    4866             :         default:
    4867             :                 return 0;
    4868             :         }
    4869             : }
    4870             : 
    4871             : 
    4872             : 
    4873           1 : GF_Node *Expression_Create()
    4874             : {
    4875             :         M_Expression *p;
    4876           1 :         GF_SAFEALLOC(p, M_Expression);
    4877           1 :         if(!p) return NULL;
    4878           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Expression);
    4879             : 
    4880             :         /*default field values*/
    4881           1 :         p->expression_select1 = 0;
    4882           1 :         p->expression_intensity1 = 0;
    4883           1 :         p->expression_select2 = 0;
    4884           1 :         p->expression_intensity2 = 0;
    4885           1 :         return (GF_Node *)p;
    4886             : }
    4887             : 
    4888             : 
    4889             : /*
    4890             :         Extrusion Node deletion
    4891             : */
    4892             : 
    4893          67 : static void Extrusion_Del(GF_Node *node)
    4894             : {
    4895             :         M_Extrusion *p = (M_Extrusion *) node;
    4896          67 :         gf_sg_mfvec2f_del(p->set_crossSection);
    4897          67 :         gf_sg_mfrotation_del(p->set_orientation);
    4898          67 :         gf_sg_mfvec2f_del(p->set_scale);
    4899          67 :         gf_sg_mfvec3f_del(p->set_spine);
    4900          67 :         gf_sg_mfvec2f_del(p->crossSection);
    4901          67 :         gf_sg_mfrotation_del(p->orientation);
    4902          67 :         gf_sg_mfvec2f_del(p->scale);
    4903          67 :         gf_sg_mfvec3f_del(p->spine);
    4904          67 :         gf_node_free((GF_Node *) p);
    4905          67 : }
    4906             : 
    4907             : static const u16 Extrusion_Def2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
    4908             : static const u16 Extrusion_In2All[] = { 0, 1, 2, 3};
    4909             : 
    4910             : static u32 Extrusion_get_field_count(GF_Node *node, u8 IndexMode)
    4911             : {
    4912             :         switch(IndexMode) {
    4913             :         case GF_SG_FIELD_CODING_IN:
    4914             :                 return 4;
    4915             :         case GF_SG_FIELD_CODING_DEF:
    4916             :                 return 10;
    4917             :         case GF_SG_FIELD_CODING_OUT:
    4918             :                 return 0;
    4919             :         case GF_SG_FIELD_CODING_DYN:
    4920             :                 return 0;
    4921             :         default:
    4922             :                 return 14;
    4923             :         }
    4924             : }
    4925             : 
    4926             : static GF_Err Extrusion_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    4927             : {
    4928         304 :         switch(IndexMode) {
    4929           0 :         case GF_SG_FIELD_CODING_IN:
    4930           0 :                 *allField = Extrusion_In2All[inField];
    4931             :                 return GF_OK;
    4932         290 :         case GF_SG_FIELD_CODING_DEF:
    4933         290 :                 *allField = Extrusion_Def2All[inField];
    4934             :                 return GF_OK;
    4935             :         default:
    4936             :                 return GF_BAD_PARAM;
    4937             :         }
    4938             : }
    4939        1149 : static GF_Err Extrusion_get_field(GF_Node *node, GF_FieldInfo *info)
    4940             : {
    4941        1149 :         switch (info->fieldIndex) {
    4942          17 :         case 0:
    4943          17 :                 info->name = "set_crossSection";
    4944          17 :                 info->eventType = GF_SG_EVENT_IN;
    4945          17 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_crossSection;
    4946          17 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    4947          17 :                 info->far_ptr = & ((M_Extrusion *) node)->set_crossSection;
    4948          17 :                 return GF_OK;
    4949          17 :         case 1:
    4950          17 :                 info->name = "set_orientation";
    4951          17 :                 info->eventType = GF_SG_EVENT_IN;
    4952          17 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_orientation;
    4953          17 :                 info->fieldType = GF_SG_VRML_MFROTATION;
    4954          17 :                 info->far_ptr = & ((M_Extrusion *) node)->set_orientation;
    4955          17 :                 return GF_OK;
    4956          17 :         case 2:
    4957          17 :                 info->name = "set_scale";
    4958          17 :                 info->eventType = GF_SG_EVENT_IN;
    4959          17 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_scale;
    4960          17 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    4961          17 :                 info->far_ptr = & ((M_Extrusion *) node)->set_scale;
    4962          17 :                 return GF_OK;
    4963          17 :         case 3:
    4964          17 :                 info->name = "set_spine";
    4965          17 :                 info->eventType = GF_SG_EVENT_IN;
    4966          17 :                 info->on_event_in = ((M_Extrusion *)node)->on_set_spine;
    4967          17 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    4968          17 :                 info->far_ptr = & ((M_Extrusion *) node)->set_spine;
    4969          17 :                 return GF_OK;
    4970          73 :         case 4:
    4971          73 :                 info->name = "beginCap";
    4972          73 :                 info->eventType = GF_SG_EVENT_FIELD;
    4973          73 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4974          73 :                 info->far_ptr = & ((M_Extrusion *) node)->beginCap;
    4975          73 :                 return GF_OK;
    4976          72 :         case 5:
    4977          72 :                 info->name = "ccw";
    4978          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    4979          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4980          72 :                 info->far_ptr = & ((M_Extrusion *) node)->ccw;
    4981          72 :                 return GF_OK;
    4982          72 :         case 6:
    4983          72 :                 info->name = "convex";
    4984          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    4985          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    4986          72 :                 info->far_ptr = & ((M_Extrusion *) node)->convex;
    4987          72 :                 return GF_OK;
    4988         132 :         case 7:
    4989         132 :                 info->name = "creaseAngle";
    4990         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4991         132 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    4992         132 :                 info->far_ptr = & ((M_Extrusion *) node)->creaseAngle;
    4993         132 :                 return GF_OK;
    4994         132 :         case 8:
    4995         132 :                 info->name = "crossSection";
    4996         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    4997         132 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    4998         132 :                 info->far_ptr = & ((M_Extrusion *) node)->crossSection;
    4999         132 :                 return GF_OK;
    5000         132 :         case 9:
    5001         132 :                 info->name = "endCap";
    5002         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    5003         132 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    5004         132 :                 info->far_ptr = & ((M_Extrusion *) node)->endCap;
    5005         132 :                 return GF_OK;
    5006          72 :         case 10:
    5007          72 :                 info->name = "orientation";
    5008          72 :                 info->eventType = GF_SG_EVENT_FIELD;
    5009          72 :                 info->fieldType = GF_SG_VRML_MFROTATION;
    5010          72 :                 info->far_ptr = & ((M_Extrusion *) node)->orientation;
    5011          72 :                 return GF_OK;
    5012         132 :         case 11:
    5013         132 :                 info->name = "scale";
    5014         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    5015         132 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
    5016         132 :                 info->far_ptr = & ((M_Extrusion *) node)->scale;
    5017         132 :                 return GF_OK;
    5018         132 :         case 12:
    5019         132 :                 info->name = "solid";
    5020         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    5021         132 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    5022         132 :                 info->far_ptr = & ((M_Extrusion *) node)->solid;
    5023         132 :                 return GF_OK;
    5024         132 :         case 13:
    5025         132 :                 info->name = "spine";
    5026         132 :                 info->eventType = GF_SG_EVENT_FIELD;
    5027         132 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    5028         132 :                 info->far_ptr = & ((M_Extrusion *) node)->spine;
    5029         132 :                 return GF_OK;
    5030             :         default:
    5031             :                 return GF_BAD_PARAM;
    5032             :         }
    5033             : }
    5034             : 
    5035             : 
    5036         111 : static s32 Extrusion_get_field_index_by_name(char *name)
    5037             : {
    5038         111 :         if (!strcmp("set_crossSection", name)) return 0;
    5039         110 :         if (!strcmp("set_orientation", name)) return 1;
    5040         109 :         if (!strcmp("set_scale", name)) return 2;
    5041         108 :         if (!strcmp("set_spine", name)) return 3;
    5042         107 :         if (!strcmp("beginCap", name)) return 4;
    5043         105 :         if (!strcmp("ccw", name)) return 5;
    5044         104 :         if (!strcmp("convex", name)) return 6;
    5045         103 :         if (!strcmp("creaseAngle", name)) return 7;
    5046          86 :         if (!strcmp("crossSection", name)) return 8;
    5047          69 :         if (!strcmp("endCap", name)) return 9;
    5048          52 :         if (!strcmp("orientation", name)) return 10;
    5049          51 :         if (!strcmp("scale", name)) return 11;
    5050          34 :         if (!strcmp("solid", name)) return 12;
    5051          17 :         if (!strcmp("spine", name)) return 13;
    5052           0 :         return -1;
    5053             : }
    5054         334 : static Bool Extrusion_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5055             : {
    5056         334 :         switch (FieldIndex) {
    5057           9 :         case 7:
    5058           9 :                 *AType = 0;
    5059           9 :                 *QType = 6;
    5060           9 :                 *b_min = FLT2FIX(0);
    5061           9 :                 *b_max = FLT2FIX(6.2831853);
    5062             :                 return 1;
    5063         137 :         case 8:
    5064         137 :                 *AType = 0;
    5065         137 :                 *QType = 2;
    5066         137 :                 *b_min = FIX_MIN;
    5067         137 :                 *b_max = FIX_MAX;
    5068             :                 return 1;
    5069           1 :         case 10:
    5070           1 :                 *AType = 0;
    5071           1 :                 *QType = 10;
    5072           1 :                 *b_min = FIX_MIN;
    5073           1 :                 *b_max = FIX_MAX;
    5074             :                 return 1;
    5075          89 :         case 11:
    5076          89 :                 *AType = 0;
    5077          89 :                 *QType = 7;
    5078          89 :                 *b_min = FLT2FIX(0);
    5079          89 :                 *b_max = FIX_MAX;
    5080             :                 return 1;
    5081          89 :         case 13:
    5082          89 :                 *AType = 0;
    5083          89 :                 *QType = 1;
    5084          89 :                 *b_min = FIX_MIN;
    5085          89 :                 *b_max = FIX_MAX;
    5086             :                 return 1;
    5087             :         default:
    5088             :                 return 0;
    5089             :         }
    5090             : }
    5091             : 
    5092             : 
    5093             : 
    5094          67 : GF_Node *Extrusion_Create()
    5095             : {
    5096             :         M_Extrusion *p;
    5097          67 :         GF_SAFEALLOC(p, M_Extrusion);
    5098          67 :         if(!p) return NULL;
    5099          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Extrusion);
    5100             : 
    5101             :         /*default field values*/
    5102          67 :         p->beginCap = 1;
    5103          67 :         p->ccw = 1;
    5104          67 :         p->convex = 1;
    5105          67 :         p->creaseAngle = FLT2FIX(0.0);
    5106          67 :         p->crossSection.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*5);
    5107          67 :         p->crossSection.count = 5;
    5108          67 :         p->crossSection.vals[0].x = FLT2FIX(1);
    5109          67 :         p->crossSection.vals[0].y = FLT2FIX(1);
    5110          67 :         p->crossSection.vals[1].x = FLT2FIX(1);
    5111          67 :         p->crossSection.vals[1].y = FLT2FIX(-1);
    5112          67 :         p->crossSection.vals[2].x = FLT2FIX(-1);
    5113          67 :         p->crossSection.vals[2].y = FLT2FIX(-1);
    5114          67 :         p->crossSection.vals[3].x = FLT2FIX(-1);
    5115          67 :         p->crossSection.vals[3].y = FLT2FIX(1);
    5116          67 :         p->crossSection.vals[4].x = FLT2FIX(1);
    5117          67 :         p->crossSection.vals[4].y = FLT2FIX(1);
    5118          67 :         p->endCap = 1;
    5119          67 :         p->orientation.vals = (GF_Vec4*)gf_malloc(sizeof(GF_Vec4)*1);
    5120          67 :         p->orientation.count = 1;
    5121          67 :         p->orientation.vals[0].x = FLT2FIX(0);
    5122          67 :         p->orientation.vals[0].y = FLT2FIX(0);
    5123          67 :         p->orientation.vals[0].z = FLT2FIX(1);
    5124          67 :         p->orientation.vals[0].q = FLT2FIX(0);
    5125          67 :         p->scale.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*1);
    5126          67 :         p->scale.count = 1;
    5127          67 :         p->scale.vals[0].x = FLT2FIX(1);
    5128          67 :         p->scale.vals[0].y = FLT2FIX(1);
    5129          67 :         p->solid = 1;
    5130          67 :         p->spine.vals = (SFVec3f *)gf_malloc(sizeof(SFVec3f)*2);
    5131          67 :         p->spine.count = 2;
    5132          67 :         p->spine.vals[0].x = FLT2FIX(0);
    5133          67 :         p->spine.vals[0].y = FLT2FIX(0);
    5134          67 :         p->spine.vals[0].z = FLT2FIX(0);
    5135          67 :         p->spine.vals[1].x = FLT2FIX(0);
    5136          67 :         p->spine.vals[1].y = FLT2FIX(1);
    5137          67 :         p->spine.vals[1].z = FLT2FIX(0);
    5138          67 :         return (GF_Node *)p;
    5139             : }
    5140             : 
    5141             : 
    5142             : /*
    5143             :         Face Node deletion
    5144             : */
    5145             : 
    5146           1 : static void Face_Del(GF_Node *node)
    5147             : {
    5148             :         M_Face *p = (M_Face *) node;
    5149           1 :         gf_node_unregister((GF_Node *) p->fap, (GF_Node *) p);
    5150           1 :         gf_node_unregister((GF_Node *) p->fdp, (GF_Node *) p);
    5151           1 :         gf_node_unregister((GF_Node *) p->fit, (GF_Node *) p);
    5152           1 :         gf_node_unregister((GF_Node *) p->ttsSource, (GF_Node *) p);
    5153           1 :         gf_node_unregister_children((GF_Node *) p, p->renderedFace);
    5154           1 :         gf_node_free((GF_Node *) p);
    5155           1 : }
    5156             : 
    5157             : static const u16 Face_Def2All[] = { 0, 1, 2, 3, 4};
    5158             : static const u16 Face_In2All[] = { 0, 1, 2, 3, 4};
    5159             : static const u16 Face_Out2All[] = { 0, 1, 2, 3, 4};
    5160             : 
    5161             : static u32 Face_get_field_count(GF_Node *node, u8 IndexMode)
    5162             : {
    5163           6 :         switch(IndexMode) {
    5164             :         case GF_SG_FIELD_CODING_IN:
    5165             :                 return 5;
    5166             :         case GF_SG_FIELD_CODING_DEF:
    5167             :                 return 5;
    5168             :         case GF_SG_FIELD_CODING_OUT:
    5169             :                 return 5;
    5170           1 :         case GF_SG_FIELD_CODING_DYN:
    5171             :                 return 0;
    5172             :         default:
    5173             :                 return 5;
    5174             :         }
    5175             : }
    5176             : 
    5177             : static GF_Err Face_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5178             : {
    5179           5 :         switch(IndexMode) {
    5180           0 :         case GF_SG_FIELD_CODING_IN:
    5181           0 :                 *allField = Face_In2All[inField];
    5182             :                 return GF_OK;
    5183           0 :         case GF_SG_FIELD_CODING_DEF:
    5184           0 :                 *allField = Face_Def2All[inField];
    5185             :                 return GF_OK;
    5186           0 :         case GF_SG_FIELD_CODING_OUT:
    5187           0 :                 *allField = Face_Out2All[inField];
    5188             :                 return GF_OK;
    5189             :         default:
    5190             :                 return GF_BAD_PARAM;
    5191             :         }
    5192             : }
    5193          10 : static GF_Err Face_get_field(GF_Node *node, GF_FieldInfo *info)
    5194             : {
    5195          10 :         switch (info->fieldIndex) {
    5196           2 :         case 0:
    5197           2 :                 info->name = "fap";
    5198           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5199           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5200           2 :                 info->NDTtype = NDT_SFFAPNode;
    5201           2 :                 info->far_ptr = & ((M_Face *)node)->fap;
    5202           2 :                 return GF_OK;
    5203           2 :         case 1:
    5204           2 :                 info->name = "fdp";
    5205           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5206           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5207           2 :                 info->NDTtype = NDT_SFFDPNode;
    5208           2 :                 info->far_ptr = & ((M_Face *)node)->fdp;
    5209           2 :                 return GF_OK;
    5210           2 :         case 2:
    5211           2 :                 info->name = "fit";
    5212           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5213           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5214           2 :                 info->NDTtype = NDT_SFFITNode;
    5215           2 :                 info->far_ptr = & ((M_Face *)node)->fit;
    5216           2 :                 return GF_OK;
    5217           2 :         case 3:
    5218           2 :                 info->name = "ttsSource";
    5219           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5220           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5221           2 :                 info->NDTtype = NDT_SFAudioNode;
    5222           2 :                 info->far_ptr = & ((M_Face *)node)->ttsSource;
    5223           2 :                 return GF_OK;
    5224           2 :         case 4:
    5225           2 :                 info->name = "renderedFace";
    5226           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5227           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    5228           2 :                 info->NDTtype = NDT_SF3DNode;
    5229           2 :                 info->far_ptr = & ((M_Face *)node)->renderedFace;
    5230           2 :                 return GF_OK;
    5231             :         default:
    5232             :                 return GF_BAD_PARAM;
    5233             :         }
    5234             : }
    5235             : 
    5236             : 
    5237           5 : static s32 Face_get_field_index_by_name(char *name)
    5238             : {
    5239           5 :         if (!strcmp("fap", name)) return 0;
    5240           4 :         if (!strcmp("fdp", name)) return 1;
    5241           3 :         if (!strcmp("fit", name)) return 2;
    5242           2 :         if (!strcmp("ttsSource", name)) return 3;
    5243           1 :         if (!strcmp("renderedFace", name)) return 4;
    5244           0 :         return -1;
    5245             : }
    5246             : static Bool Face_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5247             : {
    5248             :         switch (FieldIndex) {
    5249             :         default:
    5250             :                 return 0;
    5251             :         }
    5252             : }
    5253             : 
    5254             : 
    5255             : 
    5256           1 : GF_Node *Face_Create()
    5257             : {
    5258             :         M_Face *p;
    5259           1 :         GF_SAFEALLOC(p, M_Face);
    5260           1 :         if(!p) return NULL;
    5261           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Face);
    5262             : 
    5263             :         /*default field values*/
    5264           1 :         return (GF_Node *)p;
    5265             : }
    5266             : 
    5267             : 
    5268             : /*
    5269             :         FaceDefMesh Node deletion
    5270             : */
    5271             : 
    5272           1 : static void FaceDefMesh_Del(GF_Node *node)
    5273             : {
    5274             :         M_FaceDefMesh *p = (M_FaceDefMesh *) node;
    5275           1 :         gf_node_unregister((GF_Node *) p->faceSceneGraphNode, (GF_Node *) p);
    5276           1 :         gf_sg_mfint32_del(p->intervalBorders);
    5277           1 :         gf_sg_mfint32_del(p->coordIndex);
    5278           1 :         gf_sg_mfvec3f_del(p->displacements);
    5279           1 :         gf_node_free((GF_Node *) p);
    5280           1 : }
    5281             : 
    5282             : static const u16 FaceDefMesh_Def2All[] = { 0, 1, 2, 3};
    5283             : 
    5284             : static u32 FaceDefMesh_get_field_count(GF_Node *node, u8 IndexMode)
    5285             : {
    5286           6 :         switch(IndexMode) {
    5287             :         case GF_SG_FIELD_CODING_IN:
    5288             :                 return 0;
    5289           1 :         case GF_SG_FIELD_CODING_DEF:
    5290             :                 return 4;
    5291             :         case GF_SG_FIELD_CODING_OUT:
    5292             :                 return 0;
    5293             :         case GF_SG_FIELD_CODING_DYN:
    5294             :                 return 0;
    5295           2 :         default:
    5296             :                 return 4;
    5297             :         }
    5298             : }
    5299             : 
    5300             : static GF_Err FaceDefMesh_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5301             : {
    5302           4 :         switch(IndexMode) {
    5303           0 :         case GF_SG_FIELD_CODING_DEF:
    5304           0 :                 *allField = FaceDefMesh_Def2All[inField];
    5305             :                 return GF_OK;
    5306             :         default:
    5307             :                 return GF_BAD_PARAM;
    5308             :         }
    5309             : }
    5310           8 : static GF_Err FaceDefMesh_get_field(GF_Node *node, GF_FieldInfo *info)
    5311             : {
    5312           8 :         switch (info->fieldIndex) {
    5313           2 :         case 0:
    5314           2 :                 info->name = "faceSceneGraphNode";
    5315           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5316           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5317           2 :                 info->NDTtype = NDT_SF3DNode;
    5318           2 :                 info->far_ptr = & ((M_FaceDefMesh *)node)->faceSceneGraphNode;
    5319           2 :                 return GF_OK;
    5320           2 :         case 1:
    5321           2 :                 info->name = "intervalBorders";
    5322           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5323           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    5324           2 :                 info->far_ptr = & ((M_FaceDefMesh *) node)->intervalBorders;
    5325           2 :                 return GF_OK;
    5326           2 :         case 2:
    5327           2 :                 info->name = "coordIndex";
    5328           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5329           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    5330           2 :                 info->far_ptr = & ((M_FaceDefMesh *) node)->coordIndex;
    5331           2 :                 return GF_OK;
    5332           2 :         case 3:
    5333           2 :                 info->name = "displacements";
    5334           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5335           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
    5336           2 :                 info->far_ptr = & ((M_FaceDefMesh *) node)->displacements;
    5337           2 :                 return GF_OK;
    5338             :         default:
    5339             :                 return GF_BAD_PARAM;
    5340             :         }
    5341             : }
    5342             : 
    5343             : 
    5344           4 : static s32 FaceDefMesh_get_field_index_by_name(char *name)
    5345             : {
    5346           4 :         if (!strcmp("faceSceneGraphNode", name)) return 0;
    5347           3 :         if (!strcmp("intervalBorders", name)) return 1;
    5348           2 :         if (!strcmp("coordIndex", name)) return 2;
    5349           1 :         if (!strcmp("displacements", name)) return 3;
    5350           0 :         return -1;
    5351             : }
    5352             : static Bool FaceDefMesh_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5353             : {
    5354           4 :         switch (FieldIndex) {
    5355           1 :         case 1:
    5356           1 :                 *AType = 0;
    5357           1 :                 *QType = 0;
    5358             :                 return 1;
    5359           1 :         case 2:
    5360           1 :                 *AType = 0;
    5361           1 :                 *QType = 0;
    5362             :                 return 1;
    5363           1 :         case 3:
    5364           1 :                 *AType = 0;
    5365           1 :                 *QType = 0;
    5366             :                 return 1;
    5367             :         default:
    5368             :                 return 0;
    5369             :         }
    5370             : }
    5371             : 
    5372             : 
    5373             : 
    5374           1 : GF_Node *FaceDefMesh_Create()
    5375             : {
    5376             :         M_FaceDefMesh *p;
    5377           1 :         GF_SAFEALLOC(p, M_FaceDefMesh);
    5378           1 :         if(!p) return NULL;
    5379           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FaceDefMesh);
    5380             : 
    5381             :         /*default field values*/
    5382           1 :         return (GF_Node *)p;
    5383             : }
    5384             : 
    5385             : 
    5386             : /*
    5387             :         FaceDefTables Node deletion
    5388             : */
    5389             : 
    5390           1 : static void FaceDefTables_Del(GF_Node *node)
    5391             : {
    5392             :         M_FaceDefTables *p = (M_FaceDefTables *) node;
    5393           1 :         gf_node_unregister_children((GF_Node *) p, p->faceDefMesh);
    5394           1 :         gf_node_unregister_children((GF_Node *) p, p->faceDefTransform);
    5395           1 :         gf_node_free((GF_Node *) p);
    5396           1 : }
    5397             : 
    5398             : static const u16 FaceDefTables_Def2All[] = { 0, 1, 2, 3};
    5399             : static const u16 FaceDefTables_In2All[] = { 2, 3};
    5400             : static const u16 FaceDefTables_Out2All[] = { 2, 3};
    5401             : 
    5402             : static u32 FaceDefTables_get_field_count(GF_Node *node, u8 IndexMode)
    5403             : {
    5404             :         switch(IndexMode) {
    5405             :         case GF_SG_FIELD_CODING_IN:
    5406             :                 return 2;
    5407             :         case GF_SG_FIELD_CODING_DEF:
    5408             :                 return 4;
    5409             :         case GF_SG_FIELD_CODING_OUT:
    5410             :                 return 2;
    5411             :         case GF_SG_FIELD_CODING_DYN:
    5412             :                 return 0;
    5413             :         default:
    5414             :                 return 4;
    5415             :         }
    5416             : }
    5417             : 
    5418             : static GF_Err FaceDefTables_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5419             : {
    5420           4 :         switch(IndexMode) {
    5421           0 :         case GF_SG_FIELD_CODING_IN:
    5422           0 :                 *allField = FaceDefTables_In2All[inField];
    5423             :                 return GF_OK;
    5424           0 :         case GF_SG_FIELD_CODING_DEF:
    5425           0 :                 *allField = FaceDefTables_Def2All[inField];
    5426             :                 return GF_OK;
    5427           0 :         case GF_SG_FIELD_CODING_OUT:
    5428           0 :                 *allField = FaceDefTables_Out2All[inField];
    5429             :                 return GF_OK;
    5430             :         default:
    5431             :                 return GF_BAD_PARAM;
    5432             :         }
    5433             : }
    5434           8 : static GF_Err FaceDefTables_get_field(GF_Node *node, GF_FieldInfo *info)
    5435             : {
    5436           8 :         switch (info->fieldIndex) {
    5437           2 :         case 0:
    5438           2 :                 info->name = "fapID";
    5439           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5440           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5441           2 :                 info->far_ptr = & ((M_FaceDefTables *) node)->fapID;
    5442           2 :                 return GF_OK;
    5443           2 :         case 1:
    5444           2 :                 info->name = "highLevelSelect";
    5445           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5446           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5447           2 :                 info->far_ptr = & ((M_FaceDefTables *) node)->highLevelSelect;
    5448           2 :                 return GF_OK;
    5449           2 :         case 2:
    5450           2 :                 info->name = "faceDefMesh";
    5451           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5452           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    5453           2 :                 info->NDTtype = NDT_SFFaceDefMeshNode;
    5454           2 :                 info->far_ptr = & ((M_FaceDefTables *)node)->faceDefMesh;
    5455           2 :                 return GF_OK;
    5456           2 :         case 3:
    5457           2 :                 info->name = "faceDefTransform";
    5458           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5459           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    5460           2 :                 info->NDTtype = NDT_SFFaceDefTransformNode;
    5461           2 :                 info->far_ptr = & ((M_FaceDefTables *)node)->faceDefTransform;
    5462           2 :                 return GF_OK;
    5463             :         default:
    5464             :                 return GF_BAD_PARAM;
    5465             :         }
    5466             : }
    5467             : 
    5468             : 
    5469           4 : static s32 FaceDefTables_get_field_index_by_name(char *name)
    5470             : {
    5471           4 :         if (!strcmp("fapID", name)) return 0;
    5472           3 :         if (!strcmp("highLevelSelect", name)) return 1;
    5473           2 :         if (!strcmp("faceDefMesh", name)) return 2;
    5474           1 :         if (!strcmp("faceDefTransform", name)) return 3;
    5475           0 :         return -1;
    5476             : }
    5477             : static Bool FaceDefTables_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5478             : {
    5479           4 :         switch (FieldIndex) {
    5480           1 :         case 0:
    5481           1 :                 *AType = 0;
    5482           1 :                 *QType = 13;
    5483           1 :                 *QT13_bits = 7;
    5484           1 :                 *b_min = FLT2FIX(1);
    5485           1 :                 *b_max = FLT2FIX( 68);
    5486             :                 return 1;
    5487           1 :         case 1:
    5488           1 :                 *AType = 0;
    5489           1 :                 *QType = 13;
    5490           1 :                 *QT13_bits = 6;
    5491           1 :                 *b_min = FLT2FIX(1);
    5492           1 :                 *b_max = FLT2FIX( 64);
    5493             :                 return 1;
    5494             :         default:
    5495             :                 return 0;
    5496             :         }
    5497             : }
    5498             : 
    5499             : 
    5500             : 
    5501           1 : GF_Node *FaceDefTables_Create()
    5502             : {
    5503             :         M_FaceDefTables *p;
    5504           1 :         GF_SAFEALLOC(p, M_FaceDefTables);
    5505           1 :         if(!p) return NULL;
    5506           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FaceDefTables);
    5507             : 
    5508             :         /*default field values*/
    5509           1 :         p->fapID = 1;
    5510           1 :         p->highLevelSelect = 1;
    5511           1 :         return (GF_Node *)p;
    5512             : }
    5513             : 
    5514             : 
    5515             : /*
    5516             :         FaceDefTransform Node deletion
    5517             : */
    5518             : 
    5519             : static void FaceDefTransform_Del(GF_Node *node)
    5520             : {
    5521             :         M_FaceDefTransform *p = (M_FaceDefTransform *) node;
    5522           1 :         gf_node_unregister((GF_Node *) p->faceSceneGraphNode, (GF_Node *) p);
    5523           1 :         gf_node_free((GF_Node *) p);
    5524             : }
    5525             : 
    5526             : static const u16 FaceDefTransform_Def2All[] = { 0, 1, 2, 3, 4};
    5527             : 
    5528             : static u32 FaceDefTransform_get_field_count(GF_Node *node, u8 IndexMode)
    5529             : {
    5530           6 :         switch(IndexMode) {
    5531             :         case GF_SG_FIELD_CODING_IN:
    5532             :                 return 0;
    5533           1 :         case GF_SG_FIELD_CODING_DEF:
    5534             :                 return 5;
    5535             :         case GF_SG_FIELD_CODING_OUT:
    5536             :                 return 0;
    5537             :         case GF_SG_FIELD_CODING_DYN:
    5538             :                 return 0;
    5539           2 :         default:
    5540             :                 return 5;
    5541             :         }
    5542             : }
    5543             : 
    5544             : static GF_Err FaceDefTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5545             : {
    5546           5 :         switch(IndexMode) {
    5547           0 :         case GF_SG_FIELD_CODING_DEF:
    5548           0 :                 *allField = FaceDefTransform_Def2All[inField];
    5549             :                 return GF_OK;
    5550             :         default:
    5551             :                 return GF_BAD_PARAM;
    5552             :         }
    5553             : }
    5554          10 : static GF_Err FaceDefTransform_get_field(GF_Node *node, GF_FieldInfo *info)
    5555             : {
    5556          10 :         switch (info->fieldIndex) {
    5557           2 :         case 0:
    5558           2 :                 info->name = "faceSceneGraphNode";
    5559           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5560           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5561           2 :                 info->NDTtype = NDT_SF3DNode;
    5562           2 :                 info->far_ptr = & ((M_FaceDefTransform *)node)->faceSceneGraphNode;
    5563           2 :                 return GF_OK;
    5564           2 :         case 1:
    5565           2 :                 info->name = "fieldId";
    5566           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5567           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5568           2 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->fieldId;
    5569           2 :                 return GF_OK;
    5570           2 :         case 2:
    5571           2 :                 info->name = "rotationDef";
    5572           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5573           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
    5574           2 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->rotationDef;
    5575           2 :                 return GF_OK;
    5576           2 :         case 3:
    5577           2 :                 info->name = "scaleDef";
    5578           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5579           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    5580           2 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->scaleDef;
    5581           2 :                 return GF_OK;
    5582           2 :         case 4:
    5583           2 :                 info->name = "translationDef";
    5584           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    5585           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    5586           2 :                 info->far_ptr = & ((M_FaceDefTransform *) node)->translationDef;
    5587           2 :                 return GF_OK;
    5588             :         default:
    5589             :                 return GF_BAD_PARAM;
    5590             :         }
    5591             : }
    5592             : 
    5593             : 
    5594           5 : static s32 FaceDefTransform_get_field_index_by_name(char *name)
    5595             : {
    5596           5 :         if (!strcmp("faceSceneGraphNode", name)) return 0;
    5597           4 :         if (!strcmp("fieldId", name)) return 1;
    5598           3 :         if (!strcmp("rotationDef", name)) return 2;
    5599           2 :         if (!strcmp("scaleDef", name)) return 3;
    5600           1 :         if (!strcmp("translationDef", name)) return 4;
    5601           0 :         return -1;
    5602             : }
    5603             : static Bool FaceDefTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    5604             : {
    5605           5 :         switch (FieldIndex) {
    5606           1 :         case 2:
    5607           1 :                 *AType = 0;
    5608           1 :                 *QType = 10;
    5609           1 :                 *b_min = FIX_MIN;
    5610           1 :                 *b_max = FIX_MAX;
    5611             :                 return 1;
    5612           1 :         case 3:
    5613           1 :                 *AType = 0;
    5614           1 :                 *QType = 7;
    5615             :                 return 1;
    5616           1 :         case 4:
    5617           1 :                 *AType = 0;
    5618           1 :                 *QType = 1;
    5619             :                 return 1;
    5620             :         default:
    5621             :                 return 0;
    5622             :         }
    5623             : }
    5624             : 
    5625             : 
    5626             : 
    5627           1 : GF_Node *FaceDefTransform_Create()
    5628             : {
    5629             :         M_FaceDefTransform *p;
    5630           1 :         GF_SAFEALLOC(p, M_FaceDefTransform);
    5631           1 :         if(!p) return NULL;
    5632           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FaceDefTransform);
    5633             : 
    5634             :         /*default field values*/
    5635           1 :         p->fieldId = 1;
    5636           1 :         p->rotationDef.x = FLT2FIX(0);
    5637           1 :         p->rotationDef.y = FLT2FIX(0);
    5638           1 :         p->rotationDef.z = FLT2FIX(1);
    5639           1 :         p->rotationDef.q = FLT2FIX(0);
    5640           1 :         p->scaleDef.x = FLT2FIX(1);
    5641           1 :         p->scaleDef.y = FLT2FIX(1);
    5642           1 :         p->scaleDef.z = FLT2FIX(1);
    5643           1 :         p->translationDef.x = FLT2FIX(0);
    5644           1 :         p->translationDef.y = FLT2FIX(0);
    5645           1 :         p->translationDef.z = FLT2FIX(0);
    5646           1 :         return (GF_Node *)p;
    5647             : }
    5648             : 
    5649             : 
    5650             : /*
    5651             :         FAP Node deletion
    5652             : */
    5653             : 
    5654           1 : static void FAP_Del(GF_Node *node)
    5655             : {
    5656             :         M_FAP *p = (M_FAP *) node;
    5657           1 :         gf_node_unregister((GF_Node *) p->viseme, (GF_Node *) p);
    5658           1 :         gf_node_unregister((GF_Node *) p->expression, (GF_Node *) p);
    5659           1 :         gf_node_free((GF_Node *) p);
    5660           1 : }
    5661             : 
    5662             : static const u16 FAP_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67};
    5663             : static const u16 FAP_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67};
    5664             : static const u16 FAP_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67};
    5665             : 
    5666             : static u32 FAP_get_field_count(GF_Node *node, u8 IndexMode)
    5667             : {
    5668           6 :         switch(IndexMode) {
    5669             :         case GF_SG_FIELD_CODING_IN:
    5670             :                 return 68;
    5671             :         case GF_SG_FIELD_CODING_DEF:
    5672             :                 return 68;
    5673             :         case GF_SG_FIELD_CODING_OUT:
    5674             :                 return 68;
    5675           1 :         case GF_SG_FIELD_CODING_DYN:
    5676             :                 return 0;
    5677             :         default:
    5678             :                 return 68;
    5679             :         }
    5680             : }
    5681             : 
    5682             : static GF_Err FAP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    5683             : {
    5684          68 :         switch(IndexMode) {
    5685           0 :         case GF_SG_FIELD_CODING_IN:
    5686           0 :                 *allField = FAP_In2All[inField];
    5687             :                 return GF_OK;
    5688           0 :         case GF_SG_FIELD_CODING_DEF:
    5689           0 :                 *allField = FAP_Def2All[inField];
    5690             :                 return GF_OK;
    5691           0 :         case GF_SG_FIELD_CODING_OUT:
    5692           0 :                 *allField = FAP_Out2All[inField];
    5693             :                 return GF_OK;
    5694             :         default:
    5695             :                 return GF_BAD_PARAM;
    5696             :         }
    5697             : }
    5698         136 : static GF_Err FAP_get_field(GF_Node *node, GF_FieldInfo *info)
    5699             : {
    5700         136 :         switch (info->fieldIndex) {
    5701           2 :         case 0:
    5702           2 :                 info->name = "viseme";
    5703           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5704           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5705           2 :                 info->NDTtype = NDT_SFVisemeNode;
    5706           2 :                 info->far_ptr = & ((M_FAP *)node)->viseme;
    5707           2 :                 return GF_OK;
    5708           2 :         case 1:
    5709           2 :                 info->name = "expression";
    5710           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5711           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    5712           2 :                 info->NDTtype = NDT_SFExpressionNode;
    5713           2 :                 info->far_ptr = & ((M_FAP *)node)->expression;
    5714           2 :                 return GF_OK;
    5715           2 :         case 2:
    5716           2 :                 info->name = "open_jaw";
    5717           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5718           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5719           2 :                 info->far_ptr = & ((M_FAP *) node)->open_jaw;
    5720           2 :                 return GF_OK;
    5721           2 :         case 3:
    5722           2 :                 info->name = "lower_t_midlip";
    5723           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5724           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5725           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_midlip;
    5726           2 :                 return GF_OK;
    5727           2 :         case 4:
    5728           2 :                 info->name = "raise_b_midlip";
    5729           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5730           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5731           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_midlip;
    5732           2 :                 return GF_OK;
    5733           2 :         case 5:
    5734           2 :                 info->name = "stretch_l_corner";
    5735           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5736           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5737           2 :                 info->far_ptr = & ((M_FAP *) node)->stretch_l_corner;
    5738           2 :                 return GF_OK;
    5739           2 :         case 6:
    5740           2 :                 info->name = "stretch_r_corner";
    5741           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5742           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5743           2 :                 info->far_ptr = & ((M_FAP *) node)->stretch_r_corner;
    5744           2 :                 return GF_OK;
    5745           2 :         case 7:
    5746           2 :                 info->name = "lower_t_lip_lm";
    5747           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5748           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5749           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_lm;
    5750           2 :                 return GF_OK;
    5751           2 :         case 8:
    5752           2 :                 info->name = "lower_t_lip_rm";
    5753           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5754           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5755           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_rm;
    5756           2 :                 return GF_OK;
    5757           2 :         case 9:
    5758           2 :                 info->name = "lower_b_lip_lm";
    5759           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5760           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5761           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_b_lip_lm;
    5762           2 :                 return GF_OK;
    5763           2 :         case 10:
    5764           2 :                 info->name = "lower_b_lip_rm";
    5765           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5766           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5767           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_b_lip_rm;
    5768           2 :                 return GF_OK;
    5769           2 :         case 11:
    5770           2 :                 info->name = "raise_l_cornerlip";
    5771           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5772           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5773           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_cornerlip;
    5774           2 :                 return GF_OK;
    5775           2 :         case 12:
    5776           2 :                 info->name = "raise_r_cornerlip";
    5777           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5778           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5779           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_cornerlip;
    5780           2 :                 return GF_OK;
    5781           2 :         case 13:
    5782           2 :                 info->name = "thrust_jaw";
    5783           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5784           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5785           2 :                 info->far_ptr = & ((M_FAP *) node)->thrust_jaw;
    5786           2 :                 return GF_OK;
    5787           2 :         case 14:
    5788           2 :                 info->name = "shift_jaw";
    5789           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5790           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5791           2 :                 info->far_ptr = & ((M_FAP *) node)->shift_jaw;
    5792           2 :                 return GF_OK;
    5793           2 :         case 15:
    5794           2 :                 info->name = "push_b_lip";
    5795           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5796           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5797           2 :                 info->far_ptr = & ((M_FAP *) node)->push_b_lip;
    5798           2 :                 return GF_OK;
    5799           2 :         case 16:
    5800           2 :                 info->name = "push_t_lip";
    5801           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5802           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5803           2 :                 info->far_ptr = & ((M_FAP *) node)->push_t_lip;
    5804           2 :                 return GF_OK;
    5805           2 :         case 17:
    5806           2 :                 info->name = "depress_chin";
    5807           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5808           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5809           2 :                 info->far_ptr = & ((M_FAP *) node)->depress_chin;
    5810           2 :                 return GF_OK;
    5811           2 :         case 18:
    5812           2 :                 info->name = "close_t_l_eyelid";
    5813           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5814           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5815           2 :                 info->far_ptr = & ((M_FAP *) node)->close_t_l_eyelid;
    5816           2 :                 return GF_OK;
    5817           2 :         case 19:
    5818           2 :                 info->name = "close_t_r_eyelid";
    5819           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5820           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5821           2 :                 info->far_ptr = & ((M_FAP *) node)->close_t_r_eyelid;
    5822           2 :                 return GF_OK;
    5823           2 :         case 20:
    5824           2 :                 info->name = "close_b_l_eyelid";
    5825           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5826           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5827           2 :                 info->far_ptr = & ((M_FAP *) node)->close_b_l_eyelid;
    5828           2 :                 return GF_OK;
    5829           2 :         case 21:
    5830           2 :                 info->name = "close_b_r_eyelid";
    5831           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5832           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5833           2 :                 info->far_ptr = & ((M_FAP *) node)->close_b_r_eyelid;
    5834           2 :                 return GF_OK;
    5835           2 :         case 22:
    5836           2 :                 info->name = "yaw_l_eyeball";
    5837           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5838           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5839           2 :                 info->far_ptr = & ((M_FAP *) node)->yaw_l_eyeball;
    5840           2 :                 return GF_OK;
    5841           2 :         case 23:
    5842           2 :                 info->name = "yaw_r_eyeball";
    5843           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5844           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5845           2 :                 info->far_ptr = & ((M_FAP *) node)->yaw_r_eyeball;
    5846           2 :                 return GF_OK;
    5847           2 :         case 24:
    5848           2 :                 info->name = "pitch_l_eyeball";
    5849           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5850           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5851           2 :                 info->far_ptr = & ((M_FAP *) node)->pitch_l_eyeball;
    5852           2 :                 return GF_OK;
    5853           2 :         case 25:
    5854           2 :                 info->name = "pitch_r_eyeball";
    5855           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5856           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5857           2 :                 info->far_ptr = & ((M_FAP *) node)->pitch_r_eyeball;
    5858           2 :                 return GF_OK;
    5859           2 :         case 26:
    5860           2 :                 info->name = "thrust_l_eyeball";
    5861           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5862           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5863           2 :                 info->far_ptr = & ((M_FAP *) node)->thrust_l_eyeball;
    5864           2 :                 return GF_OK;
    5865           2 :         case 27:
    5866           2 :                 info->name = "thrust_r_eyeball";
    5867           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5868           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5869           2 :                 info->far_ptr = & ((M_FAP *) node)->thrust_r_eyeball;
    5870           2 :                 return GF_OK;
    5871           2 :         case 28:
    5872           2 :                 info->name = "dilate_l_pupil";
    5873           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5874           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5875           2 :                 info->far_ptr = & ((M_FAP *) node)->dilate_l_pupil;
    5876           2 :                 return GF_OK;
    5877           2 :         case 29:
    5878           2 :                 info->name = "dilate_r_pupil";
    5879           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5880           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5881           2 :                 info->far_ptr = & ((M_FAP *) node)->dilate_r_pupil;
    5882           2 :                 return GF_OK;
    5883           2 :         case 30:
    5884           2 :                 info->name = "raise_l_i_eyebrow";
    5885           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5886           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5887           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_i_eyebrow;
    5888           2 :                 return GF_OK;
    5889           2 :         case 31:
    5890           2 :                 info->name = "raise_r_i_eyebrow";
    5891           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5892           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5893           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_i_eyebrow;
    5894           2 :                 return GF_OK;
    5895           2 :         case 32:
    5896           2 :                 info->name = "raise_l_m_eyebrow";
    5897           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5898           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5899           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_m_eyebrow;
    5900           2 :                 return GF_OK;
    5901           2 :         case 33:
    5902           2 :                 info->name = "raise_r_m_eyebrow";
    5903           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5904           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5905           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_m_eyebrow;
    5906           2 :                 return GF_OK;
    5907           2 :         case 34:
    5908           2 :                 info->name = "raise_l_o_eyebrow";
    5909           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5910           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5911           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_o_eyebrow;
    5912           2 :                 return GF_OK;
    5913           2 :         case 35:
    5914           2 :                 info->name = "raise_r_o_eyebrow";
    5915           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5916           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5917           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_o_eyebrow;
    5918           2 :                 return GF_OK;
    5919           2 :         case 36:
    5920           2 :                 info->name = "squeeze_l_eyebrow";
    5921           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5922           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5923           2 :                 info->far_ptr = & ((M_FAP *) node)->squeeze_l_eyebrow;
    5924           2 :                 return GF_OK;
    5925           2 :         case 37:
    5926           2 :                 info->name = "squeeze_r_eyebrow";
    5927           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5928           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5929           2 :                 info->far_ptr = & ((M_FAP *) node)->squeeze_r_eyebrow;
    5930           2 :                 return GF_OK;
    5931           2 :         case 38:
    5932           2 :                 info->name = "puff_l_cheek";
    5933           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5934           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5935           2 :                 info->far_ptr = & ((M_FAP *) node)->puff_l_cheek;
    5936           2 :                 return GF_OK;
    5937           2 :         case 39:
    5938           2 :                 info->name = "puff_r_cheek";
    5939           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5940           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5941           2 :                 info->far_ptr = & ((M_FAP *) node)->puff_r_cheek;
    5942           2 :                 return GF_OK;
    5943           2 :         case 40:
    5944           2 :                 info->name = "lift_l_cheek";
    5945           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5946           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5947           2 :                 info->far_ptr = & ((M_FAP *) node)->lift_l_cheek;
    5948           2 :                 return GF_OK;
    5949           2 :         case 41:
    5950           2 :                 info->name = "lift_r_cheek";
    5951           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5952           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5953           2 :                 info->far_ptr = & ((M_FAP *) node)->lift_r_cheek;
    5954           2 :                 return GF_OK;
    5955           2 :         case 42:
    5956           2 :                 info->name = "shift_tongue_tip";
    5957           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5958           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5959           2 :                 info->far_ptr = & ((M_FAP *) node)->shift_tongue_tip;
    5960           2 :                 return GF_OK;
    5961           2 :         case 43:
    5962           2 :                 info->name = "raise_tongue_tip";
    5963           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5964           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5965           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_tongue_tip;
    5966           2 :                 return GF_OK;
    5967           2 :         case 44:
    5968           2 :                 info->name = "thrust_tongue_tip";
    5969           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5970           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5971           2 :                 info->far_ptr = & ((M_FAP *) node)->thrust_tongue_tip;
    5972           2 :                 return GF_OK;
    5973           2 :         case 45:
    5974           2 :                 info->name = "raise_tongue";
    5975           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5976           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5977           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_tongue;
    5978           2 :                 return GF_OK;
    5979           2 :         case 46:
    5980           2 :                 info->name = "tongue_roll";
    5981           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5982           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5983           2 :                 info->far_ptr = & ((M_FAP *) node)->tongue_roll;
    5984           2 :                 return GF_OK;
    5985           2 :         case 47:
    5986           2 :                 info->name = "head_pitch";
    5987           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5988           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5989           2 :                 info->far_ptr = & ((M_FAP *) node)->head_pitch;
    5990           2 :                 return GF_OK;
    5991           2 :         case 48:
    5992           2 :                 info->name = "head_yaw";
    5993           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    5994           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    5995           2 :                 info->far_ptr = & ((M_FAP *) node)->head_yaw;
    5996           2 :                 return GF_OK;
    5997           2 :         case 49:
    5998           2 :                 info->name = "head_roll";
    5999           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6000           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6001           2 :                 info->far_ptr = & ((M_FAP *) node)->head_roll;
    6002           2 :                 return GF_OK;
    6003           2 :         case 50:
    6004           2 :                 info->name = "lower_t_midlip_o";
    6005           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6006           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6007           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_midlip_o;
    6008           2 :                 return GF_OK;
    6009           2 :         case 51:
    6010           2 :                 info->name = "raise_b_midlip_o";
    6011           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6012           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6013           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_midlip_o;
    6014           2 :                 return GF_OK;
    6015           2 :         case 52:
    6016           2 :                 info->name = "stretch_l_cornerlip";
    6017           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6018           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6019           2 :                 info->far_ptr = & ((M_FAP *) node)->stretch_l_cornerlip;
    6020           2 :                 return GF_OK;
    6021           2 :         case 53:
    6022           2 :                 info->name = "stretch_r_cornerlip";
    6023           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6024           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6025           2 :                 info->far_ptr = & ((M_FAP *) node)->stretch_r_cornerlip;
    6026           2 :                 return GF_OK;
    6027           2 :         case 54:
    6028           2 :                 info->name = "lower_t_lip_lm_o";
    6029           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6030           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6031           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_lm_o;
    6032           2 :                 return GF_OK;
    6033           2 :         case 55:
    6034           2 :                 info->name = "lower_t_lip_rm_o";
    6035           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6036           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6037           2 :                 info->far_ptr = & ((M_FAP *) node)->lower_t_lip_rm_o;
    6038           2 :                 return GF_OK;
    6039           2 :         case 56:
    6040           2 :                 info->name = "raise_b_lip_lm_o";
    6041           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6042           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6043           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_lip_lm_o;
    6044           2 :                 return GF_OK;
    6045           2 :         case 57:
    6046           2 :                 info->name = "raise_b_lip_rm_o";
    6047           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6048           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6049           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_b_lip_rm_o;
    6050           2 :                 return GF_OK;
    6051           2 :         case 58:
    6052           2 :                 info->name = "raise_l_cornerlip_o";
    6053           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6054           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6055           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_cornerlip_o;
    6056           2 :                 return GF_OK;
    6057           2 :         case 59:
    6058           2 :                 info->name = "raise_r_cornerlip_o";
    6059           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6060           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6061           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_cornerlip_o;
    6062           2 :                 return GF_OK;
    6063           2 :         case 60:
    6064           2 :                 info->name = "stretch_l_nose";
    6065           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6066           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6067           2 :                 info->far_ptr = & ((M_FAP *) node)->stretch_l_nose;
    6068           2 :                 return GF_OK;
    6069           2 :         case 61:
    6070           2 :                 info->name = "stretch_r_nose";
    6071           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6072           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6073           2 :                 info->far_ptr = & ((M_FAP *) node)->stretch_r_nose;
    6074           2 :                 return GF_OK;
    6075           2 :         case 62:
    6076           2 :                 info->name = "raise_nose";
    6077           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6078           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6079           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_nose;
    6080           2 :                 return GF_OK;
    6081           2 :         case 63:
    6082           2 :                 info->name = "bend_nose";
    6083           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6084           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6085           2 :                 info->far_ptr = & ((M_FAP *) node)->bend_nose;
    6086           2 :                 return GF_OK;
    6087           2 :         case 64:
    6088           2 :                 info->name = "raise_l_ear";
    6089           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6090           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6091           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_l_ear;
    6092           2 :                 return GF_OK;
    6093           2 :         case 65:
    6094           2 :                 info->name = "raise_r_ear";
    6095           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6096           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6097           2 :                 info->far_ptr = & ((M_FAP *) node)->raise_r_ear;
    6098           2 :                 return GF_OK;
    6099           2 :         case 66:
    6100           2 :                 info->name = "pull_l_ear";
    6101           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6102           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6103           2 :                 info->far_ptr = & ((M_FAP *) node)->pull_l_ear;
    6104           2 :                 return GF_OK;
    6105           2 :         case 67:
    6106           2 :                 info->name = "pull_r_ear";
    6107           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6108           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
    6109           2 :                 info->far_ptr = & ((M_FAP *) node)->pull_r_ear;
    6110           2 :                 return GF_OK;
    6111             :         default:
    6112             :                 return GF_BAD_PARAM;
    6113             :         }
    6114             : }
    6115             : 
    6116             : 
    6117          68 : static s32 FAP_get_field_index_by_name(char *name)
    6118             : {
    6119          68 :         if (!strcmp("viseme", name)) return 0;
    6120          67 :         if (!strcmp("expression", name)) return 1;
    6121          66 :         if (!strcmp("open_jaw", name)) return 2;
    6122          65 :         if (!strcmp("lower_t_midlip", name)) return 3;
    6123          64 :         if (!strcmp("raise_b_midlip", name)) return 4;
    6124          63 :         if (!strcmp("stretch_l_corner", name)) return 5;
    6125          62 :         if (!strcmp("stretch_r_corner", name)) return 6;
    6126          61 :         if (!strcmp("lower_t_lip_lm", name)) return 7;
    6127          60 :         if (!strcmp("lower_t_lip_rm", name)) return 8;
    6128          59 :         if (!strcmp("lower_b_lip_lm", name)) return 9;
    6129          58 :         if (!strcmp("lower_b_lip_rm", name)) return 10;
    6130          57 :         if (!strcmp("raise_l_cornerlip", name)) return 11;
    6131          56 :         if (!strcmp("raise_r_cornerlip", name)) return 12;
    6132          55 :         if (!strcmp("thrust_jaw", name)) return 13;
    6133          54 :         if (!strcmp("shift_jaw", name)) return 14;
    6134          53 :         if (!strcmp("push_b_lip", name)) return 15;
    6135          52 :         if (!strcmp("push_t_lip", name)) return 16;
    6136          51 :         if (!strcmp("depress_chin", name)) return 17;
    6137          50 :         if (!strcmp("close_t_l_eyelid", name)) return 18;
    6138          49 :         if (!strcmp("close_t_r_eyelid", name)) return 19;
    6139          48 :         if (!strcmp("close_b_l_eyelid", name)) return 20;
    6140          47 :         if (!strcmp("close_b_r_eyelid", name)) return 21;
    6141          46 :         if (!strcmp("yaw_l_eyeball", name)) return 22;
    6142          45 :         if (!strcmp("yaw_r_eyeball", name)) return 23;
    6143          44 :         if (!strcmp("pitch_l_eyeball", name)) return 24;
    6144          43 :         if (!strcmp("pitch_r_eyeball", name)) return 25;
    6145          42 :         if (!strcmp("thrust_l_eyeball", name)) return 26;
    6146          41 :         if (!strcmp("thrust_r_eyeball", name)) return 27;
    6147          40 :         if (!strcmp("dilate_l_pupil", name)) return 28;
    6148          39 :         if (!strcmp("dilate_r_pupil", name)) return 29;
    6149          38 :         if (!strcmp("raise_l_i_eyebrow", name)) return 30;
    6150          37 :         if (!strcmp("raise_r_i_eyebrow", name)) return 31;
    6151          36 :         if (!strcmp("raise_l_m_eyebrow", name)) return 32;
    6152          35 :         if (!strcmp("raise_r_m_eyebrow", name)) return 33;
    6153          34 :         if (!strcmp("raise_l_o_eyebrow", name)) return 34;
    6154          33 :         if (!strcmp("raise_r_o_eyebrow", name)) return 35;
    6155          32 :         if (!strcmp("squeeze_l_eyebrow", name)) return 36;
    6156          31 :         if (!strcmp("squeeze_r_eyebrow", name)) return 37;
    6157          30 :         if (!strcmp("puff_l_cheek", name)) return 38;
    6158          29 :         if (!strcmp("puff_r_cheek", name)) return 39;
    6159          28 :         if (!strcmp("lift_l_cheek", name)) return 40;
    6160          27 :         if (!strcmp("lift_r_cheek", name)) return 41;
    6161          26 :         if (!strcmp("shift_tongue_tip", name)) return 42;
    6162          25 :         if (!strcmp("raise_tongue_tip", name)) return 43;
    6163          24 :         if (!strcmp("thrust_tongue_tip", name)) return 44;
    6164          23 :         if (!strcmp("raise_tongue", name)) return 45;
    6165          22 :         if (!strcmp("tongue_roll", name)) return 46;
    6166          21 :         if (!strcmp("head_pitch", name)) return 47;
    6167          20 :         if (!strcmp("head_yaw", name)) return 48;
    6168          19 :         if (!strcmp("head_roll", name)) return 49;
    6169          18 :         if (!strcmp("lower_t_midlip_o", name)) return 50;
    6170          17 :         if (!strcmp("raise_b_midlip_o", name)) return 51;
    6171          16 :         if (!strcmp("stretch_l_cornerlip", name)) return 52;
    6172          15 :         if (!strcmp("stretch_r_cornerlip", name)) return 53;
    6173          14 :         if (!strcmp("lower_t_lip_lm_o", name)) return 54;
    6174          13 :         if (!strcmp("lower_t_lip_rm_o", name)) return 55;
    6175          12 :         if (!strcmp("raise_b_lip_lm_o", name)) return 56;
    6176          11 :         if (!strcmp("raise_b_lip_rm_o", name)) return 57;
    6177          10 :         if (!strcmp("raise_l_cornerlip_o", name)) return 58;
    6178           9 :         if (!strcmp("raise_r_cornerlip_o", name)) return 59;
    6179           8 :         if (!strcmp("stretch_l_nose", name)) return 60;
    6180           7 :         if (!strcmp("stretch_r_nose", name)) return 61;
    6181           6 :         if (!strcmp("raise_nose", name)) return 62;
    6182           5 :         if (!strcmp("bend_nose", name)) return 63;
    6183           4 :         if (!strcmp("raise_l_ear", name)) return 64;
    6184           3 :         if (!strcmp("raise_r_ear", name)) return 65;
    6185           2 :         if (!strcmp("pull_l_ear", name)) return 66;
    6186           1 :         if (!strcmp("pull_r_ear", name)) return 67;
    6187           0 :         return -1;
    6188             : }
    6189          68 : static Bool FAP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    6190             : {
    6191          68 :         switch (FieldIndex) {
    6192           1 :         case 2:
    6193           1 :                 *AType = 0;
    6194           1 :                 *QType = 0;
    6195           1 :                 *b_min = FLT2FIX(0);
    6196           1 :                 *b_max = FIX_MAX;
    6197             :                 return 1;
    6198           1 :         case 3:
    6199           1 :                 *AType = 0;
    6200           1 :                 *QType = 0;
    6201           1 :                 *b_min = FIX_MIN;
    6202           1 :                 *b_max = FIX_MAX;
    6203             :                 return 1;
    6204           1 :         case 4:
    6205           1 :                 *AType = 0;
    6206           1 :                 *QType = 0;
    6207           1 :                 *b_min = FIX_MIN;
    6208           1 :                 *b_max = FIX_MAX;
    6209             :                 return 1;
    6210           1 :         case 5:
    6211           1 :                 *AType = 0;
    6212           1 :                 *QType = 0;
    6213           1 :                 *b_min = FIX_MIN;
    6214           1 :                 *b_max = FIX_MAX;
    6215             :                 return 1;
    6216           1 :         case 6:
    6217           1 :                 *AType = 0;
    6218           1 :                 *QType = 0;
    6219           1 :                 *b_min = FIX_MIN;
    6220           1 :                 *b_max = FIX_MAX;
    6221             :                 return 1;
    6222           1 :         case 7:
    6223           1 :                 *AType = 0;
    6224           1 :                 *QType = 0;
    6225           1 :                 *b_min = FIX_MIN;
    6226           1 :                 *b_max = FIX_MAX;
    6227             :                 return 1;
    6228           1 :         case 8:
    6229           1 :                 *AType = 0;
    6230           1 :                 *QType = 0;
    6231           1 :                 *b_min = FIX_MIN;
    6232           1 :                 *b_max = FIX_MAX;
    6233             :                 return 1;
    6234           1 :         case 9:
    6235           1 :                 *AType = 0;
    6236           1 :                 *QType = 0;
    6237           1 :                 *b_min = FIX_MIN;
    6238           1 :                 *b_max = FIX_MAX;
    6239             :                 return 1;
    6240           1 :         case 10:
    6241           1 :                 *AType = 0;
    6242           1 :                 *QType = 0;
    6243           1 :                 *b_min = FIX_MIN;
    6244           1 :                 *b_max = FIX_MAX;
    6245             :                 return 1;
    6246           1 :         case 11:
    6247           1 :                 *AType = 0;
    6248           1 :                 *QType = 0;
    6249           1 :                 *b_min = FIX_MIN;
    6250           1 :                 *b_max = FIX_MAX;
    6251             :                 return 1;
    6252           1 :         case 12:
    6253           1 :                 *AType = 0;
    6254           1 :                 *QType = 0;
    6255           1 :                 *b_min = FIX_MIN;
    6256           1 :                 *b_max = FIX_MAX;
    6257             :                 return 1;
    6258           1 :         case 13:
    6259           1 :                 *AType = 0;
    6260           1 :                 *QType = 0;
    6261           1 :                 *b_min = FLT2FIX(0);
    6262           1 :                 *b_max = FIX_MAX;
    6263             :                 return 1;
    6264           1 :         case 14:
    6265           1 :                 *AType = 0;
    6266           1 :                 *QType = 0;
    6267           1 :                 *b_min = FIX_MIN;
    6268           1 :                 *b_max = FIX_MAX;
    6269             :                 return 1;
    6270           1 :         case 15:
    6271           1 :                 *AType = 0;
    6272           1 :                 *QType = 0;
    6273           1 :                 *b_min = FIX_MIN;
    6274           1 :                 *b_max = FIX_MAX;
    6275             :                 return 1;
    6276           1 :         case 16:
    6277           1 :                 *AType = 0;
    6278           1 :                 *QType = 0;
    6279           1 :                 *b_min = FIX_MIN;
    6280           1 :                 *b_max = FIX_MAX;
    6281             :                 return 1;
    6282           1 :         case 17:
    6283           1 :                 *AType = 0;
    6284           1 :                 *QType = 0;
    6285           1 :                 *b_min = FIX_MIN;
    6286           1 :                 *b_max = FIX_MAX;
    6287             :                 return 1;
    6288           1 :         case 18:
    6289           1 :                 *AType = 0;
    6290           1 :                 *QType = 0;
    6291           1 :                 *b_min = FIX_MIN;
    6292           1 :                 *b_max = FIX_MAX;
    6293             :                 return 1;
    6294           1 :         case 19:
    6295           1 :                 *AType = 0;
    6296           1 :                 *QType = 0;
    6297           1 :                 *b_min = FIX_MIN;
    6298           1 :                 *b_max = FIX_MAX;
    6299             :                 return 1;
    6300           1 :         case 20:
    6301           1 :                 *AType = 0;
    6302           1 :                 *QType = 0;
    6303           1 :                 *b_min = FIX_MIN;
    6304           1 :                 *b_max = FIX_MAX;
    6305             :                 return 1;
    6306           1 :         case 21:
    6307           1 :                 *AType = 0;
    6308           1 :                 *QType = 0;
    6309           1 :                 *b_min = FIX_MIN;
    6310           1 :                 *b_max = FIX_MAX;
    6311             :                 return 1;
    6312           1 :         case 22:
    6313           1 :                 *AType = 0;
    6314           1 :                 *QType = 0;
    6315           1 :                 *b_min = FIX_MIN;
    6316           1 :                 *b_max = FIX_MAX;
    6317             :                 return 1;
    6318           1 :         case 23:
    6319           1 :                 *AType = 0;
    6320           1 :                 *QType = 0;
    6321           1 :                 *b_min = FIX_MIN;
    6322           1 :                 *b_max = FIX_MAX;
    6323             :                 return 1;
    6324           1 :         case 24:
    6325           1 :                 *AType = 0;
    6326           1 :                 *QType = 0;
    6327           1 :                 *b_min = FIX_MIN;
    6328           1 :                 *b_max = FIX_MAX;
    6329             :                 return 1;
    6330           1 :         case 25:
    6331           1 :                 *AType = 0;
    6332           1 :                 *QType = 0;
    6333           1 :                 *b_min = FIX_MIN;
    6334           1 :                 *b_max = FIX_MAX;
    6335             :                 return 1;
    6336           1 :         case 26:
    6337           1 :                 *AType = 0;
    6338           1 :                 *QType = 0;
    6339           1 :                 *b_min = FIX_MIN;
    6340           1 :                 *b_max = FIX_MAX;
    6341             :                 return 1;
    6342           1 :         case 27:
    6343           1 :                 *AType = 0;
    6344           1 :                 *QType = 0;
    6345           1 :                 *b_min = FIX_MIN;
    6346           1 :                 *b_max = FIX_MAX;
    6347             :                 return 1;
    6348           1 :         case 28:
    6349           1 :                 *AType = 0;
    6350           1 :                 *QType = 0;
    6351           1 :                 *b_min = FIX_MIN;
    6352           1 :                 *b_max = FIX_MAX;
    6353             :                 return 1;
    6354           1 :         case 29:
    6355           1 :                 *AType = 0;
    6356           1 :                 *QType = 0;
    6357           1 :                 *b_min = FIX_MIN;
    6358           1 :                 *b_max = FIX_MAX;
    6359             :                 return 1;
    6360           1 :         case 30:
    6361           1 :                 *AType = 0;
    6362           1 :                 *QType = 0;
    6363           1 :                 *b_min = FIX_MIN;
    6364           1 :                 *b_max = FIX_MAX;
    6365             :                 return 1;
    6366           1 :         case 31:
    6367           1 :                 *AType = 0;
    6368           1 :                 *QType = 0;
    6369           1 :                 *b_min = FIX_MIN;
    6370           1 :                 *b_max = FIX_MAX;
    6371             :                 return 1;
    6372           1 :         case 32:
    6373           1 :                 *AType = 0;
    6374           1 :                 *QType = 0;
    6375           1 :                 *b_min = FIX_MIN;
    6376           1 :                 *b_max = FIX_MAX;
    6377             :                 return 1;
    6378           1 :         case 33:
    6379           1 :                 *AType = 0;
    6380           1 :                 *QType = 0;
    6381           1 :                 *b_min = FIX_MIN;
    6382           1 :                 *b_max = FIX_MAX;
    6383             :                 return 1;
    6384           1 :         case 34:
    6385           1 :                 *AType = 0;
    6386           1 :                 *QType = 0;
    6387           1 :                 *b_min = FIX_MIN;
    6388           1 :                 *b_max = FIX_MAX;
    6389             :                 return 1;
    6390           1 :         case 35:
    6391           1 :                 *AType = 0;
    6392           1 :                 *QType = 0;
    6393           1 :                 *b_min = FIX_MIN;
    6394           1 :                 *b_max = FIX_MAX;
    6395             :                 return 1;
    6396           1 :         case 36:
    6397           1 :                 *AType = 0;
    6398           1 :                 *QType = 0;
    6399           1 :                 *b_min = FIX_MIN;
    6400           1 :                 *b_max = FIX_MAX;
    6401             :                 return 1;
    6402           1 :         case 37:
    6403           1 :                 *AType = 0;
    6404           1 :                 *QType = 0;
    6405           1 :                 *b_min = FIX_MIN;
    6406           1 :                 *b_max = FIX_MAX;
    6407             :                 return 1;
    6408           1 :         case 38:
    6409           1 :                 *AType = 0;
    6410           1 :                 *QType = 0;
    6411           1 :                 *b_min = FIX_MIN;
    6412           1 :                 *b_max = FIX_MAX;
    6413             :                 return 1;
    6414           1 :         case 39:
    6415           1 :                 *AType = 0;
    6416           1 :                 *QType = 0;
    6417           1 :                 *b_min = FIX_MIN;
    6418           1 :                 *b_max = FIX_MAX;
    6419             :                 return 1;
    6420           1 :         case 40:
    6421           1 :                 *AType = 0;
    6422           1 :                 *QType = 0;
    6423           1 :                 *b_min = FLT2FIX(0);
    6424           1 :                 *b_max = FIX_MAX;
    6425             :                 return 1;
    6426           1 :         case 41:
    6427           1 :                 *AType = 0;
    6428           1 :                 *QType = 0;
    6429           1 :                 *b_min = FLT2FIX(0);
    6430           1 :                 *b_max = FIX_MAX;
    6431             :                 return 1;
    6432           1 :         case 42:
    6433           1 :                 *AType = 0;
    6434           1 :                 *QType = 0;
    6435           1 :                 *b_min = FIX_MIN;
    6436           1 :                 *b_max = FIX_MAX;
    6437             :                 return 1;
    6438           1 :         case 43:
    6439           1 :                 *AType = 0;
    6440           1 :                 *QType = 0;
    6441           1 :                 *b_min = FIX_MIN;
    6442           1 :                 *b_max = FIX_MAX;
    6443             :                 return 1;
    6444           1 :         case 44:
    6445           1 :                 *AType = 0;
    6446           1 :                 *QType = 0;
    6447           1 :                 *b_min = FIX_MIN;
    6448           1 :                 *b_max = FIX_MAX;
    6449             :                 return 1;
    6450           1 :         case 45:
    6451           1 :                 *AType = 0;
    6452           1 :                 *QType = 0;
    6453           1 :                 *b_min = FIX_MIN;
    6454           1 :                 *b_max = FIX_MAX;
    6455             :                 return 1;
    6456           1 :         case 46:
    6457           1 :                 *AType = 0;
    6458           1 :                 *QType = 0;
    6459           1 :                 *b_min = FLT2FIX(0);
    6460           1 :                 *b_max = FIX_MAX;
    6461             :                 return 1;
    6462           1 :         case 47:
    6463           1 :                 *AType = 0;
    6464           1 :                 *QType = 0;
    6465           1 :                 *b_min = FIX_MIN;
    6466           1 :                 *b_max = FIX_MAX;
    6467             :                 return 1;
    6468           1 :         case 48:
    6469           1 :                 *AType = 0;
    6470           1 :                 *QType = 0;
    6471           1 :                 *b_min = FIX_MIN;
    6472           1 :                 *b_max = FIX_MAX;
    6473             :                 return 1;
    6474           1 :         case 49:
    6475           1 :                 *AType = 0;
    6476           1 :                 *QType = 0;
    6477           1 :                 *b_min = FIX_MIN;
    6478           1 :                 *b_max = FIX_MAX;
    6479             :                 return 1;
    6480           1 :         case 50:
    6481           1 :                 *AType = 0;
    6482           1 :                 *QType = 0;
    6483           1 :                 *b_min = FIX_MIN;
    6484           1 :                 *b_max = FIX_MAX;
    6485             :                 return 1;
    6486           1 :         case 51:
    6487           1 :                 *AType = 0;
    6488           1 :                 *QType = 0;
    6489           1 :                 *b_min = FIX_MIN;
    6490           1 :                 *b_max = FIX_MAX;
    6491             :                 return 1;
    6492           1 :         case 52:
    6493           1 :                 *AType = 0;
    6494           1 :                 *QType = 0;
    6495           1 :                 *b_min = FIX_MIN;
    6496           1 :                 *b_max = FIX_MAX;
    6497             :                 return 1;
    6498           1 :         case 53:
    6499           1 :                 *AType = 0;
    6500           1 :                 *QType = 0;
    6501           1 :                 *b_min = FIX_MIN;
    6502           1 :                 *b_max = FIX_MAX;
    6503             :                 return 1;
    6504           1 :         case 54:
    6505           1 :                 *AType = 0;
    6506           1 :                 *QType = 0;
    6507           1 :                 *b_min = FIX_MIN;
    6508           1 :                 *b_max = FIX_MAX;
    6509             :                 return 1;
    6510           1 :         case 55:
    6511           1 :                 *AType = 0;
    6512           1 :                 *QType = 0;
    6513           1 :                 *b_min = FIX_MIN;
    6514           1 :                 *b_max = FIX_MAX;
    6515             :                 return 1;
    6516           1 :         case 56:
    6517           1 :                 *AType = 0;
    6518           1 :                 *QType = 0;
    6519           1 :                 *b_min = FIX_MIN;
    6520           1 :                 *b_max = FIX_MAX;
    6521             :                 return 1;
    6522           1 :         case 57:
    6523           1 :                 *AType = 0;
    6524           1 :                 *QType = 0;
    6525           1 :                 *b_min = FIX_MIN;
    6526           1 :                 *b_max = FIX_MAX;
    6527             :                 return 1;
    6528           1 :         case 58:
    6529           1 :                 *AType = 0;
    6530           1 :                 *QType = 0;
    6531           1 :                 *b_min = FIX_MIN;
    6532           1 :                 *b_max = FIX_MAX;
    6533             :                 return 1;
    6534           1 :         case 59:
    6535           1 :                 *AType = 0;
    6536           1 :                 *QType = 0;
    6537           1 :                 *b_min = FIX_MIN;
    6538           1 :                 *b_max = FIX_MAX;
    6539             :                 return 1;
    6540           1 :         case 60:
    6541           1 :                 *AType = 0;
    6542           1 :                 *QType = 0;
    6543           1 :                 *b_min = FIX_MIN;
    6544           1 :                 *b_max = FIX_MAX;
    6545             :                 return 1;
    6546           1 :         case 61:
    6547           1 :                 *AType = 0;
    6548           1 :                 *QType = 0;
    6549           1 :                 *b_min = FIX_MIN;
    6550           1 :                 *b_max = FIX_MAX;
    6551             :                 return 1;
    6552           1 :         case 62:
    6553           1 :                 *AType = 0;
    6554           1 :                 *QType = 0;
    6555           1 :                 *b_min = FIX_MIN;
    6556           1 :                 *b_max = FIX_MAX;
    6557             :                 return 1;
    6558           1 :         case 63:
    6559           1 :                 *AType = 0;
    6560           1 :                 *QType = 0;
    6561           1 :                 *b_min = FIX_MIN;
    6562           1 :                 *b_max = FIX_MAX;
    6563             :                 return 1;
    6564           1 :         case 64:
    6565           1 :                 *AType = 0;
    6566           1 :                 *QType = 0;
    6567           1 :                 *b_min = FIX_MIN;
    6568           1 :                 *b_max = FIX_MAX;
    6569             :                 return 1;
    6570           1 :         case 65:
    6571           1 :                 *AType = 0;
    6572           1 :                 *QType = 0;
    6573           1 :                 *b_min = FIX_MIN;
    6574           1 :                 *b_max = FIX_MAX;
    6575             :                 return 1;
    6576           1 :         case 66:
    6577           1 :                 *AType = 0;
    6578           1 :                 *QType = 0;
    6579           1 :                 *b_min = FIX_MIN;
    6580           1 :                 *b_max = FIX_MAX;
    6581             :                 return 1;
    6582           1 :         case 67:
    6583           1 :                 *AType = 0;
    6584           1 :                 *QType = 0;
    6585           1 :                 *b_min = FIX_MIN;
    6586           1 :                 *b_max = FIX_MAX;
    6587             :                 return 1;
    6588             :         default:
    6589             :                 return 0;
    6590             :         }
    6591             : }
    6592             : 
    6593             : 
    6594             : 
    6595           1 : GF_Node *FAP_Create()
    6596             : {
    6597             :         M_FAP *p;
    6598           1 :         GF_SAFEALLOC(p, M_FAP);
    6599           1 :         if(!p) return NULL;
    6600           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FAP);
    6601             : 
    6602             :         /*default field values*/
    6603           1 :         p->open_jaw = 0x80000000;
    6604           1 :         p->lower_t_midlip = 0x80000000;
    6605           1 :         p->raise_b_midlip = 0x80000000;
    6606           1 :         p->stretch_l_corner = 0x80000000;
    6607           1 :         p->stretch_r_corner = 0x80000000;
    6608           1 :         p->lower_t_lip_lm = 0x80000000;
    6609           1 :         p->lower_t_lip_rm = 0x80000000;
    6610           1 :         p->lower_b_lip_lm = 0x80000000;
    6611           1 :         p->lower_b_lip_rm = 0x80000000;
    6612           1 :         p->raise_l_cornerlip = 0x80000000;
    6613           1 :         p->raise_r_cornerlip = 0x80000000;
    6614           1 :         p->thrust_jaw = 0x80000000;
    6615           1 :         p->shift_jaw = 0x80000000;
    6616           1 :         p->push_b_lip = 0x80000000;
    6617           1 :         p->push_t_lip = 0x80000000;
    6618           1 :         p->depress_chin = 0x80000000;
    6619           1 :         p->close_t_l_eyelid = 0x80000000;
    6620           1 :         p->close_t_r_eyelid = 0x80000000;
    6621           1 :         p->close_b_l_eyelid = 0x80000000;
    6622           1 :         p->close_b_r_eyelid = 0x80000000;
    6623           1 :         p->yaw_l_eyeball = 0x80000000;
    6624           1 :         p->yaw_r_eyeball = 0x80000000;
    6625           1 :         p->pitch_l_eyeball = 0x80000000;
    6626           1 :         p->pitch_r_eyeball = 0x80000000;
    6627           1 :         p->thrust_l_eyeball = 0x80000000;
    6628           1 :         p->thrust_r_eyeball = 0x80000000;
    6629           1 :         p->dilate_l_pupil = 0x80000000;
    6630           1 :         p->dilate_r_pupil = 0x80000000;
    6631           1 :         p->raise_l_i_eyebrow = 0x80000000;
    6632           1 :         p->raise_r_i_eyebrow = 0x80000000;
    6633           1 :         p->raise_l_m_eyebrow = 0x80000000;
    6634           1 :         p->raise_r_m_eyebrow = 0x80000000;
    6635           1 :         p->raise_l_o_eyebrow = 0x80000000;
    6636           1 :         p->raise_r_o_eyebrow = 0x80000000;
    6637           1 :         p->squeeze_l_eyebrow = 0x80000000;
    6638           1 :         p->squeeze_r_eyebrow = 0x80000000;
    6639           1 :         p->puff_l_cheek = 0x80000000;
    6640           1 :         p->puff_r_cheek = 0x80000000;
    6641           1 :         p->lift_l_cheek = 0x80000000;
    6642           1 :         p->lift_r_cheek = 0x80000000;
    6643           1 :         p->shift_tongue_tip = 0x80000000;
    6644           1 :         p->raise_tongue_tip = 0x80000000;
    6645           1 :         p->thrust_tongue_tip = 0x80000000;
    6646           1 :         p->raise_tongue = 0x80000000;
    6647           1 :         p->tongue_roll = 0x80000000;
    6648           1 :         p->head_pitch = 0x80000000;
    6649           1 :         p->head_yaw = 0x80000000;
    6650           1 :         p->head_roll = 0x80000000;
    6651           1 :         p->lower_t_midlip_o = 0x80000000;
    6652           1 :         p->raise_b_midlip_o = 0x80000000;
    6653           1 :         p->stretch_l_cornerlip = 0x80000000;
    6654           1 :         p->stretch_r_cornerlip = 0x80000000;
    6655           1 :         p->lower_t_lip_lm_o = 0x80000000;
    6656           1 :         p->lower_t_lip_rm_o = 0x80000000;
    6657           1 :         p->raise_b_lip_lm_o = 0x80000000;
    6658           1 :         p->raise_b_lip_rm_o = 0x80000000;
    6659           1 :         p->raise_l_cornerlip_o = 0x80000000;
    6660           1 :         p->raise_r_cornerlip_o = 0x80000000;
    6661           1 :         p->stretch_l_nose = 0x80000000;
    6662           1 :         p->stretch_r_nose = 0x80000000;
    6663           1 :         p->raise_nose = 0x80000000;
    6664           1 :         p->bend_nose = 0x80000000;
    6665           1 :         p->raise_l_ear = 0x80000000;
    6666           1 :         p->raise_r_ear = 0x80000000;
    6667           1 :         p->pull_l_ear = 0x80000000;
    6668           1 :         p->pull_r_ear = 0x80000000;
    6669           1 :         return (GF_Node *)p;
    6670             : }
    6671             : 
    6672             : 
    6673             : /*
    6674             :         FDP Node deletion
    6675             : */
    6676             : 
    6677           1 : static void FDP_Del(GF_Node *node)
    6678             : {
    6679             :         M_FDP *p = (M_FDP *) node;
    6680           1 :         gf_node_unregister((GF_Node *) p->featurePointsCoord, (GF_Node *) p);
    6681           1 :         gf_node_unregister((GF_Node *) p->textureCoord, (GF_Node *) p);
    6682           1 :         gf_node_unregister_children((GF_Node *) p, p->faceDefTables);
    6683           1 :         gf_node_unregister_children((GF_Node *) p, p->faceSceneGraph);
    6684           1 :         gf_node_free((GF_Node *) p);
    6685           1 : }
    6686             : 
    6687             : static const u16 FDP_Def2All[] = { 0, 1, 2, 3, 4};
    6688             : static const u16 FDP_In2All[] = { 0, 1, 2, 3};
    6689             : static const u16 FDP_Out2All[] = { 0, 1, 2, 3};
    6690             : 
    6691             : static u32 FDP_get_field_count(GF_Node *node, u8 IndexMode)
    6692             : {
    6693             :         switch(IndexMode) {
    6694             :         case GF_SG_FIELD_CODING_IN:
    6695             :                 return 4;
    6696             :         case GF_SG_FIELD_CODING_DEF:
    6697             :                 return 5;
    6698             :         case GF_SG_FIELD_CODING_OUT:
    6699             :                 return 4;
    6700             :         case GF_SG_FIELD_CODING_DYN:
    6701             :                 return 0;
    6702             :         default:
    6703             :                 return 5;
    6704             :         }
    6705             : }
    6706             : 
    6707             : static GF_Err FDP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    6708             : {
    6709           5 :         switch(IndexMode) {
    6710           0 :         case GF_SG_FIELD_CODING_IN:
    6711           0 :                 *allField = FDP_In2All[inField];
    6712             :                 return GF_OK;
    6713           0 :         case GF_SG_FIELD_CODING_DEF:
    6714           0 :                 *allField = FDP_Def2All[inField];
    6715             :                 return GF_OK;
    6716           0 :         case GF_SG_FIELD_CODING_OUT:
    6717           0 :                 *allField = FDP_Out2All[inField];
    6718             :                 return GF_OK;
    6719             :         default:
    6720             :                 return GF_BAD_PARAM;
    6721             :         }
    6722             : }
    6723          10 : static GF_Err FDP_get_field(GF_Node *node, GF_FieldInfo *info)
    6724             : {
    6725          10 :         switch (info->fieldIndex) {
    6726           2 :         case 0:
    6727           2 :                 info->name = "featurePointsCoord";
    6728           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6729           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    6730           2 :                 info->NDTtype = NDT_SFCoordinateNode;
    6731           2 :                 info->far_ptr = & ((M_FDP *)node)->featurePointsCoord;
    6732           2 :                 return GF_OK;
    6733           2 :         case 1:
    6734           2 :                 info->name = "textureCoord";
    6735           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6736           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
    6737           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    6738           2 :                 info->far_ptr = & ((M_FDP *)node)->textureCoord;
    6739           2 :                 return GF_OK;
    6740           2 :         case 2:
    6741           2 :                 info->name = "faceDefTables";
    6742           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6743           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    6744           2 :                 info->NDTtype = NDT_SFFaceDefTablesNode;
    6745           2 :                 info->far_ptr = & ((M_FDP *)node)->faceDefTables;
    6746           2 :                 return GF_OK;
    6747           2 :         case 3:
    6748           2 :                 info->name = "faceSceneGraph";
    6749           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6750           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
    6751           2 :                 info->NDTtype = NDT_SF3DNode;
    6752           2 :                 info->far_ptr = & ((M_FDP *)node)->faceSceneGraph;
    6753           2 :                 return GF_OK;
    6754           2 :         case 4:
    6755           2 :                 info->name = "useOrthoTexture";
    6756           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    6757           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    6758           2 :                 info->far_ptr = & ((M_FDP *) node)->useOrthoTexture;
    6759           2 :                 return GF_OK;
    6760             :         default:
    6761             :                 return GF_BAD_PARAM;
    6762             :         }
    6763             : }
    6764             : 
    6765             : 
    6766           5 : static s32 FDP_get_field_index_by_name(char *name)
    6767             : {
    6768           5 :         if (!strcmp("featurePointsCoord", name)) return 0;
    6769           4 :         if (!strcmp("textureCoord", name)) return 1;
    6770           3 :         if (!strcmp("faceDefTables", name)) return 2;
    6771           2 :         if (!strcmp("faceSceneGraph", name)) return 3;
    6772           1 :         if (!strcmp("useOrthoTexture", name)) return 4;
    6773           0 :         return -1;
    6774             : }
    6775             : static Bool FDP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    6776             : {
    6777             :         switch (FieldIndex) {
    6778             :         default:
    6779             :                 return 0;
    6780             :         }
    6781             : }
    6782             : 
    6783             : 
    6784             : 
    6785           1 : GF_Node *FDP_Create()
    6786             : {
    6787             :         M_FDP *p;
    6788           1 :         GF_SAFEALLOC(p, M_FDP);
    6789           1 :         if(!p) return NULL;
    6790           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FDP);
    6791             : 
    6792             :         /*default field values*/
    6793           1 :         return (GF_Node *)p;
    6794             : }
    6795             : 
    6796             : 
    6797             : /*
    6798             :         FIT Node deletion
    6799             : */
    6800             : 
    6801           1 : static void FIT_Del(GF_Node *node)
    6802             : {
    6803             :         M_FIT *p = (M_FIT *) node;
    6804           1 :         gf_sg_mfint32_del(p->FAPs);
    6805           1 :         gf_sg_mfint32_del(p->Graph);
    6806           1 :         gf_sg_mfint32_del(p->numeratorExp);
    6807           1 :         gf_sg_mfint32_del(p->denominatorExp);
    6808           1 :         gf_sg_mfint32_del(p->numeratorImpulse);
    6809           1 :         gf_sg_mfint32_del(p->numeratorTerms);
    6810           1 :         gf_sg_mfint32_del(p->denominatorTerms);
    6811           1 :         gf_sg_mffloat_del(p->numeratorCoefs);
    6812           1 :         gf_sg_mffloat_del(p->denominatorCoefs);
    6813           1 :         gf_node_free((GF_Node *) p);
    6814           1 : }
    6815             : 
    6816             : static const u16 FIT_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    6817             : static const u16 FIT_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    6818             : static const u16 FIT_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    6819             : 
    6820             : static u32 FIT_get_field_count(GF_Node *node, u8 IndexMode)
    6821             : {
    6822           6 :         switch(IndexMode) {
    6823             :         case GF_SG_FIELD_CODING_IN:
    6824             :                 return 9;
    6825             :         case GF_SG_FIELD_CODING_DEF:
    6826             :                 return 9;
    6827             :         case GF_SG_FIELD_CODING_OUT:
    6828             :                 return 9;
    6829           1 :         case GF_SG_FIELD_CODING_DYN:
    6830             :                 return 0;
    6831             :         default:
    6832             :                 return 9;
    6833             :         }
    6834             : }
    6835             : 
    6836             : static GF_Err FIT_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    6837             : {
    6838           9 :         switch(IndexMode) {
    6839           0 :         case GF_SG_FIELD_CODING_IN:
    6840           0 :                 *allField = FIT_In2All[inField];
    6841             :                 return GF_OK;
    6842           0 :         case GF_SG_FIELD_CODING_DEF:
    6843           0 :                 *allField = FIT_Def2All[inField];
    6844             :                 return GF_OK;
    6845           0 :         case GF_SG_FIELD_CODING_OUT:
    6846           0 :                 *allField = FIT_Out2All[inField];
    6847             :                 return GF_OK;
    6848             :         default:
    6849             :                 return GF_BAD_PARAM;
    6850             :         }
    6851             : }
    6852          18 : static GF_Err FIT_get_field(GF_Node *node, GF_FieldInfo *info)
    6853             : {
    6854          18 :         switch (info->fieldIndex) {
    6855           2 :         case 0:
    6856           2 :                 info->name = "FAPs";
    6857           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6858           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6859           2 :                 info->far_ptr = & ((M_FIT *) node)->FAPs;
    6860           2 :                 return GF_OK;
    6861           2 :         case 1:
    6862           2 :                 info->name = "Graph";
    6863           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6864           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6865           2 :                 info->far_ptr = & ((M_FIT *) node)->Graph;
    6866           2 :                 return GF_OK;
    6867           2 :         case 2:
    6868           2 :                 info->name = "numeratorExp";
    6869           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6870           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6871           2 :                 info->far_ptr = & ((M_FIT *) node)->numeratorExp;
    6872           2 :                 return GF_OK;
    6873           2 :         case 3:
    6874           2 :                 info->name = "denominatorExp";
    6875           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6876           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6877           2 :                 info->far_ptr = & ((M_FIT *) node)->denominatorExp;
    6878           2 :                 return GF_OK;
    6879           2 :         case 4:
    6880           2 :                 info->name = "numeratorImpulse";
    6881           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6882           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6883           2 :                 info->far_ptr = & ((M_FIT *) node)->numeratorImpulse;
    6884           2 :                 return GF_OK;
    6885           2 :         case 5:
    6886           2 :                 info->name = "numeratorTerms";
    6887           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6888           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6889           2 :                 info->far_ptr = & ((M_FIT *) node)->numeratorTerms;
    6890           2 :                 return GF_OK;
    6891           2 :         case 6:
    6892           2 :                 info->name = "denominatorTerms";
    6893           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6894           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
    6895           2 :                 info->far_ptr = & ((M_FIT *) node)->denominatorTerms;
    6896           2 :                 return GF_OK;
    6897           2 :         case 7:
    6898           2 :                 info->name = "numeratorCoefs";
    6899           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6900           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    6901           2 :                 info->far_ptr = & ((M_FIT *) node)->numeratorCoefs;
    6902           2 :                 return GF_OK;
    6903           2 :         case 8:
    6904           2 :                 info->name = "denominatorCoefs";
    6905           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    6906           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    6907           2 :                 info->far_ptr = & ((M_FIT *) node)->denominatorCoefs;
    6908           2 :                 return GF_OK;
    6909             :         default:
    6910             :                 return GF_BAD_PARAM;
    6911             :         }
    6912             : }
    6913             : 
    6914             : 
    6915           9 : static s32 FIT_get_field_index_by_name(char *name)
    6916             : {
    6917           9 :         if (!strcmp("FAPs", name)) return 0;
    6918           8 :         if (!strcmp("Graph", name)) return 1;
    6919           7 :         if (!strcmp("numeratorExp", name)) return 2;
    6920           6 :         if (!strcmp("denominatorExp", name)) return 3;
    6921           5 :         if (!strcmp("numeratorImpulse", name)) return 4;
    6922           4 :         if (!strcmp("numeratorTerms", name)) return 5;
    6923           3 :         if (!strcmp("denominatorTerms", name)) return 6;
    6924           2 :         if (!strcmp("numeratorCoefs", name)) return 7;
    6925           1 :         if (!strcmp("denominatorCoefs", name)) return 8;
    6926           0 :         return -1;
    6927             : }
    6928           9 : static Bool FIT_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    6929             : {
    6930           9 :         switch (FieldIndex) {
    6931           1 :         case 0:
    6932           1 :                 *AType = 0;
    6933           1 :                 *QType = 13;
    6934           1 :                 *QT13_bits = 7;
    6935           1 :                 *b_min = FLT2FIX(-1);
    6936           1 :                 *b_max = FLT2FIX(68);
    6937             :                 return 1;
    6938           1 :         case 1:
    6939           1 :                 *AType = 0;
    6940           1 :                 *QType = 13;
    6941           1 :                 *QT13_bits = 7;
    6942           1 :                 *b_min = FLT2FIX(0);
    6943           1 :                 *b_max = FLT2FIX(68);
    6944             :                 return 1;
    6945           1 :         case 2:
    6946           1 :                 *AType = 0;
    6947           1 :                 *QType = 13;
    6948           1 :                 *QT13_bits = 4;
    6949           1 :                 *b_min = FLT2FIX(0);
    6950           1 :                 *b_max = FLT2FIX(15);
    6951             :                 return 1;
    6952           1 :         case 3:
    6953           1 :                 *AType = 0;
    6954           1 :                 *QType = 13;
    6955           1 :                 *QT13_bits = 4;
    6956           1 :                 *b_min = FLT2FIX(0);
    6957           1 :                 *b_max = FLT2FIX(15);
    6958             :                 return 1;
    6959           1 :         case 4:
    6960           1 :                 *AType = 0;
    6961           1 :                 *QType = 13;
    6962           1 :                 *QT13_bits = 10;
    6963           1 :                 *b_min = FLT2FIX(0);
    6964           1 :                 *b_max = FLT2FIX(1023);
    6965             :                 return 1;
    6966           1 :         case 5:
    6967           1 :                 *AType = 0;
    6968           1 :                 *QType = 13;
    6969           1 :                 *QT13_bits = 4;
    6970           1 :                 *b_min = FLT2FIX(0);
    6971           1 :                 *b_max = FLT2FIX(10);
    6972             :                 return 1;
    6973           1 :         case 6:
    6974           1 :                 *AType = 0;
    6975           1 :                 *QType = 13;
    6976           1 :                 *QT13_bits = 4;
    6977           1 :                 *b_min = FLT2FIX(0);
    6978           1 :                 *b_max = FLT2FIX(10);
    6979             :                 return 1;
    6980             :         default:
    6981             :                 return 0;
    6982             :         }
    6983             : }
    6984             : 
    6985             : 
    6986             : 
    6987           1 : GF_Node *FIT_Create()
    6988             : {
    6989             :         M_FIT *p;
    6990           1 :         GF_SAFEALLOC(p, M_FIT);
    6991           1 :         if(!p) return NULL;
    6992           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FIT);
    6993             : 
    6994             :         /*default field values*/
    6995           1 :         return (GF_Node *)p;
    6996             : }
    6997             : 
    6998             : 
    6999             : /*
    7000             :         Fog Node deletion
    7001             : */
    7002             : 
    7003             : static void Fog_Del(GF_Node *node)
    7004             : {
    7005             :         M_Fog *p = (M_Fog *) node;
    7006           5 :         gf_sg_sfstring_del(p->fogType);
    7007           5 :         gf_node_free((GF_Node *) p);
    7008             : }
    7009             : 
    7010             : static const u16 Fog_Def2All[] = { 0, 1, 2};
    7011             : static const u16 Fog_In2All[] = { 0, 1, 2, 3};
    7012             : static const u16 Fog_Out2All[] = { 0, 1, 2, 4};
    7013             : static const u16 Fog_Dyn2All[] = { 0, 2};
    7014             : 
    7015             : static u32 Fog_get_field_count(GF_Node *node, u8 IndexMode)
    7016             : {
    7017             :         switch(IndexMode) {
    7018             :         case GF_SG_FIELD_CODING_IN:
    7019             :                 return 4;
    7020             :         case GF_SG_FIELD_CODING_DEF:
    7021             :                 return 3;
    7022             :         case GF_SG_FIELD_CODING_OUT:
    7023             :                 return 4;
    7024             :         case GF_SG_FIELD_CODING_DYN:
    7025             :                 return 2;
    7026             :         default:
    7027             :                 return 5;
    7028             :         }
    7029             : }
    7030             : 
    7031             : static GF_Err Fog_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7032             : {
    7033           5 :         switch(IndexMode) {
    7034           0 :         case GF_SG_FIELD_CODING_IN:
    7035           0 :                 *allField = Fog_In2All[inField];
    7036             :                 return GF_OK;
    7037           0 :         case GF_SG_FIELD_CODING_DEF:
    7038           0 :                 *allField = Fog_Def2All[inField];
    7039             :                 return GF_OK;
    7040           0 :         case GF_SG_FIELD_CODING_OUT:
    7041           0 :                 *allField = Fog_Out2All[inField];
    7042             :                 return GF_OK;
    7043           0 :         case GF_SG_FIELD_CODING_DYN:
    7044           0 :                 *allField = Fog_Dyn2All[inField];
    7045             :                 return GF_OK;
    7046             :         default:
    7047             :                 return GF_BAD_PARAM;
    7048             :         }
    7049             : }
    7050          31 : static GF_Err Fog_get_field(GF_Node *node, GF_FieldInfo *info)
    7051             : {
    7052          31 :         switch (info->fieldIndex) {
    7053           6 :         case 0:
    7054           6 :                 info->name = "color";
    7055           6 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7056           6 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    7057           6 :                 info->far_ptr = & ((M_Fog *) node)->color;
    7058           6 :                 return GF_OK;
    7059           2 :         case 1:
    7060           2 :                 info->name = "fogType";
    7061           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7062           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    7063           2 :                 info->far_ptr = & ((M_Fog *) node)->fogType;
    7064           2 :                 return GF_OK;
    7065          14 :         case 2:
    7066          14 :                 info->name = "visibilityRange";
    7067          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7068          14 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7069          14 :                 info->far_ptr = & ((M_Fog *) node)->visibilityRange;
    7070          14 :                 return GF_OK;
    7071           7 :         case 3:
    7072           7 :                 info->name = "set_bind";
    7073           7 :                 info->eventType = GF_SG_EVENT_IN;
    7074           7 :                 info->on_event_in = ((M_Fog *)node)->on_set_bind;
    7075           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7076           7 :                 info->far_ptr = & ((M_Fog *) node)->set_bind;
    7077           7 :                 return GF_OK;
    7078           2 :         case 4:
    7079           2 :                 info->name = "isBound";
    7080           2 :                 info->eventType = GF_SG_EVENT_OUT;
    7081           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7082           2 :                 info->far_ptr = & ((M_Fog *) node)->isBound;
    7083           2 :                 return GF_OK;
    7084             :         default:
    7085             :                 return GF_BAD_PARAM;
    7086             :         }
    7087             : }
    7088             : 
    7089             : 
    7090          21 : static s32 Fog_get_field_index_by_name(char *name)
    7091             : {
    7092          21 :         if (!strcmp("color", name)) return 0;
    7093          16 :         if (!strcmp("fogType", name)) return 1;
    7094          15 :         if (!strcmp("visibilityRange", name)) return 2;
    7095           6 :         if (!strcmp("set_bind", name)) return 3;
    7096           1 :         if (!strcmp("isBound", name)) return 4;
    7097           0 :         return -1;
    7098             : }
    7099             : static Bool Fog_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7100             : {
    7101           5 :         switch (FieldIndex) {
    7102           1 :         case 0:
    7103           1 :                 *AType = 4;
    7104           1 :                 *QType = 4;
    7105           1 :                 *b_min = FLT2FIX(0);
    7106           1 :                 *b_max = FLT2FIX(1);
    7107             :                 return 1;
    7108           1 :         case 2:
    7109           1 :                 *AType = 7;
    7110           1 :                 *QType = 11;
    7111           1 :                 *b_min = FLT2FIX(0);
    7112           1 :                 *b_max = FIX_MAX;
    7113             :                 return 1;
    7114             :         default:
    7115             :                 return 0;
    7116             :         }
    7117             : }
    7118             : 
    7119             : 
    7120             : 
    7121           5 : GF_Node *Fog_Create()
    7122             : {
    7123             :         M_Fog *p;
    7124           5 :         GF_SAFEALLOC(p, M_Fog);
    7125           5 :         if(!p) return NULL;
    7126           5 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Fog);
    7127             : 
    7128             :         /*default field values*/
    7129           5 :         p->color.red = FLT2FIX(1);
    7130           5 :         p->color.green = FLT2FIX(1);
    7131           5 :         p->color.blue = FLT2FIX(1);
    7132           5 :         p->fogType.buffer = (char*)gf_malloc(sizeof(char) * 7);
    7133             :         strcpy(p->fogType.buffer, "LINEAR");
    7134           5 :         p->visibilityRange = FLT2FIX(0);
    7135           5 :         return (GF_Node *)p;
    7136             : }
    7137             : 
    7138             : 
    7139             : /*
    7140             :         FontStyle Node deletion
    7141             : */
    7142             : 
    7143         573 : static void FontStyle_Del(GF_Node *node)
    7144             : {
    7145             :         M_FontStyle *p = (M_FontStyle *) node;
    7146         573 :         gf_sg_mfstring_del(p->family);
    7147         573 :         gf_sg_mfstring_del(p->justify);
    7148         573 :         gf_sg_sfstring_del(p->language);
    7149         573 :         gf_sg_sfstring_del(p->style);
    7150         573 :         gf_node_free((GF_Node *) p);
    7151         573 : }
    7152             : 
    7153             : static const u16 FontStyle_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    7154             : static const u16 FontStyle_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    7155             : static const u16 FontStyle_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
    7156             : 
    7157             : static u32 FontStyle_get_field_count(GF_Node *node, u8 IndexMode)
    7158             : {
    7159         160 :         switch(IndexMode) {
    7160             :         case GF_SG_FIELD_CODING_IN:
    7161             :                 return 9;
    7162             :         case GF_SG_FIELD_CODING_DEF:
    7163             :                 return 9;
    7164             :         case GF_SG_FIELD_CODING_OUT:
    7165             :                 return 9;
    7166           1 :         case GF_SG_FIELD_CODING_DYN:
    7167             :                 return 0;
    7168             :         default:
    7169             :                 return 9;
    7170             :         }
    7171             : }
    7172             : 
    7173             : static GF_Err FontStyle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7174             : {
    7175         352 :         switch(IndexMode) {
    7176           0 :         case GF_SG_FIELD_CODING_IN:
    7177           0 :                 *allField = FontStyle_In2All[inField];
    7178             :                 return GF_OK;
    7179         343 :         case GF_SG_FIELD_CODING_DEF:
    7180         343 :                 *allField = FontStyle_Def2All[inField];
    7181             :                 return GF_OK;
    7182           0 :         case GF_SG_FIELD_CODING_OUT:
    7183           0 :                 *allField = FontStyle_Out2All[inField];
    7184             :                 return GF_OK;
    7185             :         default:
    7186             :                 return GF_BAD_PARAM;
    7187             :         }
    7188             : }
    7189        3419 : static GF_Err FontStyle_get_field(GF_Node *node, GF_FieldInfo *info)
    7190             : {
    7191        3419 :         switch (info->fieldIndex) {
    7192         304 :         case 0:
    7193         304 :                 info->name = "family";
    7194         304 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7195         304 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    7196         304 :                 info->far_ptr = & ((M_FontStyle *) node)->family;
    7197         304 :                 return GF_OK;
    7198         236 :         case 1:
    7199         236 :                 info->name = "horizontal";
    7200         236 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7201         236 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7202         236 :                 info->far_ptr = & ((M_FontStyle *) node)->horizontal;
    7203         236 :                 return GF_OK;
    7204         921 :         case 2:
    7205         921 :                 info->name = "justify";
    7206         921 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7207         921 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    7208         921 :                 info->far_ptr = & ((M_FontStyle *) node)->justify;
    7209         921 :                 return GF_OK;
    7210         195 :         case 3:
    7211         195 :                 info->name = "language";
    7212         195 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7213         195 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    7214         195 :                 info->far_ptr = & ((M_FontStyle *) node)->language;
    7215         195 :                 return GF_OK;
    7216         245 :         case 4:
    7217         245 :                 info->name = "leftToRight";
    7218         245 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7219         245 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7220         245 :                 info->far_ptr = & ((M_FontStyle *) node)->leftToRight;
    7221         245 :                 return GF_OK;
    7222         847 :         case 5:
    7223         847 :                 info->name = "size";
    7224         847 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7225         847 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7226         847 :                 info->far_ptr = & ((M_FontStyle *) node)->size;
    7227         847 :                 return GF_OK;
    7228         198 :         case 6:
    7229         198 :                 info->name = "spacing";
    7230         198 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7231         198 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7232         198 :                 info->far_ptr = & ((M_FontStyle *) node)->spacing;
    7233         198 :                 return GF_OK;
    7234         228 :         case 7:
    7235         228 :                 info->name = "style";
    7236         228 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7237         228 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    7238         228 :                 info->far_ptr = & ((M_FontStyle *) node)->style;
    7239         228 :                 return GF_OK;
    7240         245 :         case 8:
    7241         245 :                 info->name = "topToBottom";
    7242         245 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7243         245 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7244         245 :                 info->far_ptr = & ((M_FontStyle *) node)->topToBottom;
    7245         245 :                 return GF_OK;
    7246             :         default:
    7247             :                 return GF_BAD_PARAM;
    7248             :         }
    7249             : }
    7250             : 
    7251             : 
    7252        1454 : static s32 FontStyle_get_field_index_by_name(char *name)
    7253             : {
    7254        1454 :         if (!strcmp("family", name)) return 0;
    7255        1385 :         if (!strcmp("horizontal", name)) return 1;
    7256        1343 :         if (!strcmp("justify", name)) return 2;
    7257         746 :         if (!strcmp("language", name)) return 3;
    7258         745 :         if (!strcmp("leftToRight", name)) return 4;
    7259         694 :         if (!strcmp("size", name)) return 5;
    7260         111 :         if (!strcmp("spacing", name)) return 6;
    7261         109 :         if (!strcmp("style", name)) return 7;
    7262          84 :         if (!strcmp("topToBottom", name)) return 8;
    7263          33 :         return -1;
    7264             : }
    7265             : static Bool FontStyle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7266             : {
    7267          19 :         switch (FieldIndex) {
    7268          11 :         case 5:
    7269          11 :                 *AType = 0;
    7270          11 :                 *QType = 11;
    7271          11 :                 *b_min = FLT2FIX(0);
    7272          11 :                 *b_max = FIX_MAX;
    7273             :                 return 1;
    7274           1 :         case 6:
    7275           1 :                 *AType = 0;
    7276           1 :                 *QType = 11;
    7277           1 :                 *b_min = FLT2FIX(0);
    7278           1 :                 *b_max = FIX_MAX;
    7279             :                 return 1;
    7280             :         default:
    7281             :                 return 0;
    7282             :         }
    7283             : }
    7284             : 
    7285             : 
    7286             : 
    7287         573 : GF_Node *FontStyle_Create()
    7288             : {
    7289             :         M_FontStyle *p;
    7290         573 :         GF_SAFEALLOC(p, M_FontStyle);
    7291         573 :         if(!p) return NULL;
    7292         573 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FontStyle);
    7293             : 
    7294             :         /*default field values*/
    7295         573 :         p->family.vals = (char**)gf_malloc(sizeof(SFString)*1);
    7296         573 :         p->family.count = 1;
    7297         573 :         p->family.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
    7298         573 :         strcpy(p->family.vals[0], "SERIF");
    7299         573 :         p->horizontal = 1;
    7300         573 :         p->justify.vals = (char**)gf_malloc(sizeof(SFString)*1);
    7301         573 :         p->justify.count = 1;
    7302         573 :         p->justify.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
    7303         573 :         strcpy(p->justify.vals[0], "BEGIN");
    7304         573 :         p->leftToRight = 1;
    7305         573 :         p->size = FLT2FIX(1.0);
    7306         573 :         p->spacing = FLT2FIX(1.0);
    7307         573 :         p->style.buffer = (char*)gf_malloc(sizeof(char) * 6);
    7308             :         strcpy(p->style.buffer, "PLAIN");
    7309         573 :         p->topToBottom = 1;
    7310         573 :         return (GF_Node *)p;
    7311             : }
    7312             : 
    7313             : 
    7314             : /*
    7315             :         Form Node deletion
    7316             : */
    7317             : 
    7318         108 : static void Form_Del(GF_Node *node)
    7319             : {
    7320             :         M_Form *p = (M_Form *) node;
    7321         108 :         gf_sg_mfint32_del(p->groups);
    7322         108 :         gf_sg_mfstring_del(p->constraints);
    7323         108 :         gf_sg_mfint32_del(p->groupsIndex);
    7324         108 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    7325         108 :         gf_node_free((GF_Node *) p);
    7326         108 : }
    7327             : 
    7328             : static const u16 Form_Def2All[] = { 2, 3, 4, 5, 6};
    7329             : static const u16 Form_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
    7330             : static const u16 Form_Out2All[] = { 2, 3, 4, 5, 6};
    7331             : static const u16 Form_Dyn2All[] = { 3};
    7332             : 
    7333             : static u32 Form_get_field_count(GF_Node *node, u8 IndexMode)
    7334             : {
    7335             :         switch(IndexMode) {
    7336             :         case GF_SG_FIELD_CODING_IN:
    7337             :                 return 7;
    7338             :         case GF_SG_FIELD_CODING_DEF:
    7339             :                 return 5;
    7340             :         case GF_SG_FIELD_CODING_OUT:
    7341             :                 return 5;
    7342             :         case GF_SG_FIELD_CODING_DYN:
    7343             :                 return 1;
    7344             :         default:
    7345             :                 return 7;
    7346             :         }
    7347             : }
    7348             : 
    7349             : static GF_Err Form_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7350             : {
    7351         167 :         switch(IndexMode) {
    7352           0 :         case GF_SG_FIELD_CODING_IN:
    7353           0 :                 *allField = Form_In2All[inField];
    7354             :                 return GF_OK;
    7355         160 :         case GF_SG_FIELD_CODING_DEF:
    7356         160 :                 *allField = Form_Def2All[inField];
    7357             :                 return GF_OK;
    7358           0 :         case GF_SG_FIELD_CODING_OUT:
    7359           0 :                 *allField = Form_Out2All[inField];
    7360             :                 return GF_OK;
    7361           0 :         case GF_SG_FIELD_CODING_DYN:
    7362           0 :                 *allField = Form_Dyn2All[inField];
    7363             :                 return GF_OK;
    7364             :         default:
    7365             :                 return GF_BAD_PARAM;
    7366             :         }
    7367             : }
    7368        1026 : static GF_Err Form_get_field(GF_Node *node, GF_FieldInfo *info)
    7369             : {
    7370        1026 :         switch (info->fieldIndex) {
    7371          17 :         case 0:
    7372          17 :                 info->name = "addChildren";
    7373          17 :                 info->eventType = GF_SG_EVENT_IN;
    7374          17 :                 info->on_event_in = ((M_Form *)node)->on_addChildren;
    7375          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7376          17 :                 info->NDTtype = NDT_SF2DNode;
    7377          17 :                 info->far_ptr = & ((M_Form *)node)->addChildren;
    7378          17 :                 return GF_OK;
    7379          17 :         case 1:
    7380          17 :                 info->name = "removeChildren";
    7381          17 :                 info->eventType = GF_SG_EVENT_IN;
    7382          17 :                 info->on_event_in = ((M_Form *)node)->on_removeChildren;
    7383          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7384          17 :                 info->NDTtype = NDT_SF2DNode;
    7385          17 :                 info->far_ptr = & ((M_Form *)node)->removeChildren;
    7386          17 :                 return GF_OK;
    7387         392 :         case 2:
    7388         392 :                 info->name = "children";
    7389         392 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7390         392 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7391         392 :                 info->NDTtype = NDT_SF2DNode;
    7392         392 :                 info->far_ptr = & ((M_Form *)node)->children;
    7393         392 :                 return GF_OK;
    7394         150 :         case 3:
    7395         150 :                 info->name = "size";
    7396         150 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7397         150 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    7398         150 :                 info->far_ptr = & ((M_Form *) node)->size;
    7399         150 :                 return GF_OK;
    7400         150 :         case 4:
    7401         150 :                 info->name = "groups";
    7402         150 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7403         150 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7404         150 :                 info->far_ptr = & ((M_Form *) node)->groups;
    7405         150 :                 return GF_OK;
    7406         150 :         case 5:
    7407         150 :                 info->name = "constraints";
    7408         150 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7409         150 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    7410         150 :                 info->far_ptr = & ((M_Form *) node)->constraints;
    7411         150 :                 return GF_OK;
    7412         150 :         case 6:
    7413         150 :                 info->name = "groupsIndex";
    7414         150 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7415         150 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7416         150 :                 info->far_ptr = & ((M_Form *) node)->groupsIndex;
    7417         150 :                 return GF_OK;
    7418             :         default:
    7419             :                 return GF_BAD_PARAM;
    7420             :         }
    7421             : }
    7422             : 
    7423             : 
    7424         495 : static s32 Form_get_field_index_by_name(char *name)
    7425             : {
    7426         495 :         if (!strcmp("addChildren", name)) return 0;
    7427         494 :         if (!strcmp("removeChildren", name)) return 1;
    7428         493 :         if (!strcmp("children", name)) return 2;
    7429         140 :         if (!strcmp("size", name)) return 3;
    7430         105 :         if (!strcmp("groups", name)) return 4;
    7431          70 :         if (!strcmp("constraints", name)) return 5;
    7432          35 :         if (!strcmp("groupsIndex", name)) return 6;
    7433           0 :         return -1;
    7434             : }
    7435             : static Bool Form_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7436             : {
    7437         119 :         switch (FieldIndex) {
    7438           9 :         case 3:
    7439           9 :                 *AType = 12;
    7440           9 :                 *QType = 12;
    7441           9 :                 *b_min = FLT2FIX(0);
    7442           9 :                 *b_max = FIX_MAX;
    7443             :                 return 1;
    7444          33 :         case 4:
    7445          33 :                 *AType = 0;
    7446          33 :                 *QType = 13;
    7447          33 :                 *QT13_bits = 10;
    7448          33 :                 *b_min = FLT2FIX(-1);
    7449          33 :                 *b_max = FLT2FIX(1022);
    7450             :                 return 1;
    7451          73 :         case 6:
    7452          73 :                 *AType = 0;
    7453          73 :                 *QType = 13;
    7454          73 :                 *QT13_bits = 10;
    7455          73 :                 *b_min = FLT2FIX(-1);
    7456          73 :                 *b_max = FLT2FIX(1022);
    7457             :                 return 1;
    7458             :         default:
    7459             :                 return 0;
    7460             :         }
    7461             : }
    7462             : 
    7463             : 
    7464             : 
    7465         108 : GF_Node *Form_Create()
    7466             : {
    7467             :         M_Form *p;
    7468         108 :         GF_SAFEALLOC(p, M_Form);
    7469         108 :         if(!p) return NULL;
    7470         108 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Form);
    7471         108 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    7472             : 
    7473             :         /*default field values*/
    7474         108 :         p->size.x = FLT2FIX(-1);
    7475         108 :         p->size.y = FLT2FIX(-1);
    7476         108 :         return (GF_Node *)p;
    7477             : }
    7478             : 
    7479             : 
    7480             : /*
    7481             :         Group Node deletion
    7482             : */
    7483             : 
    7484             : static void Group_Del(GF_Node *node)
    7485             : {
    7486             :         M_Group *p = (M_Group *) node;
    7487         113 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    7488         113 :         gf_node_free((GF_Node *) p);
    7489             : }
    7490             : 
    7491             : static const u16 Group_Def2All[] = { 2};
    7492             : static const u16 Group_In2All[] = { 0, 1, 2};
    7493             : static const u16 Group_Out2All[] = { 2};
    7494             : 
    7495             : static u32 Group_get_field_count(GF_Node *node, u8 IndexMode)
    7496             : {
    7497             :         switch(IndexMode) {
    7498             :         case GF_SG_FIELD_CODING_IN:
    7499             :                 return 3;
    7500             :         case GF_SG_FIELD_CODING_DEF:
    7501             :                 return 1;
    7502             :         case GF_SG_FIELD_CODING_OUT:
    7503             :                 return 1;
    7504             :         case GF_SG_FIELD_CODING_DYN:
    7505             :                 return 0;
    7506             :         default:
    7507             :                 return 3;
    7508             :         }
    7509             : }
    7510             : 
    7511             : static GF_Err Group_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7512             : {
    7513         207 :         switch(IndexMode) {
    7514         192 :         case GF_SG_FIELD_CODING_IN:
    7515         192 :                 *allField = Group_In2All[inField];
    7516             :                 return GF_OK;
    7517          12 :         case GF_SG_FIELD_CODING_DEF:
    7518          12 :                 *allField = Group_Def2All[inField];
    7519             :                 return GF_OK;
    7520           0 :         case GF_SG_FIELD_CODING_OUT:
    7521           0 :                 *allField = Group_Out2All[inField];
    7522             :                 return GF_OK;
    7523             :         default:
    7524             :                 return GF_BAD_PARAM;
    7525             :         }
    7526             : }
    7527             : static GF_Err Group_get_field(GF_Node *node, GF_FieldInfo *info)
    7528             : {
    7529         192 :         switch (info->fieldIndex) {
    7530           6 :         case 0:
    7531           6 :                 info->name = "addChildren";
    7532           6 :                 info->eventType = GF_SG_EVENT_IN;
    7533           6 :                 info->on_event_in = ((M_Group *)node)->on_addChildren;
    7534           6 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7535           6 :                 info->NDTtype = NDT_SF3DNode;
    7536           6 :                 info->far_ptr = & ((M_Group *)node)->addChildren;
    7537             :                 return GF_OK;
    7538           6 :         case 1:
    7539           6 :                 info->name = "removeChildren";
    7540           6 :                 info->eventType = GF_SG_EVENT_IN;
    7541           6 :                 info->on_event_in = ((M_Group *)node)->on_removeChildren;
    7542           6 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7543           6 :                 info->NDTtype = NDT_SF3DNode;
    7544           6 :                 info->far_ptr = & ((M_Group *)node)->removeChildren;
    7545             :                 return GF_OK;
    7546         180 :         case 2:
    7547         180 :                 info->name = "children";
    7548         180 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7549         180 :                 info->fieldType = GF_SG_VRML_MFNODE;
    7550         180 :                 info->NDTtype = NDT_SF3DNode;
    7551         180 :                 info->far_ptr = & ((M_Group *)node)->children;
    7552             :                 return GF_OK;
    7553             :         default:
    7554             :                 return GF_BAD_PARAM;
    7555             :         }
    7556             : }
    7557             : 
    7558             : 
    7559          88 : static s32 Group_get_field_index_by_name(char *name)
    7560             : {
    7561          88 :         if (!strcmp("addChildren", name)) return 0;
    7562          87 :         if (!strcmp("removeChildren", name)) return 1;
    7563          86 :         if (!strcmp("children", name)) return 2;
    7564           0 :         return -1;
    7565             : }
    7566             : static Bool Group_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7567             : {
    7568             :         switch (FieldIndex) {
    7569             :         default:
    7570             :                 return 0;
    7571             :         }
    7572             : }
    7573             : 
    7574             : 
    7575             : 
    7576         113 : GF_Node *Group_Create()
    7577             : {
    7578             :         M_Group *p;
    7579         113 :         GF_SAFEALLOC(p, M_Group);
    7580         113 :         if(!p) return NULL;
    7581         113 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Group);
    7582         113 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    7583             : 
    7584             :         /*default field values*/
    7585         113 :         return (GF_Node *)p;
    7586             : }
    7587             : 
    7588             : 
    7589             : /*
    7590             :         ImageTexture Node deletion
    7591             : */
    7592             : 
    7593             : static void ImageTexture_Del(GF_Node *node)
    7594             : {
    7595             :         M_ImageTexture *p = (M_ImageTexture *) node;
    7596         224 :         gf_sg_mfurl_del(p->url);
    7597         224 :         gf_node_free((GF_Node *) p);
    7598             : }
    7599             : 
    7600             : static const u16 ImageTexture_Def2All[] = { 0, 1, 2};
    7601             : static const u16 ImageTexture_In2All[] = { 0};
    7602             : static const u16 ImageTexture_Out2All[] = { 0};
    7603             : 
    7604             : static u32 ImageTexture_get_field_count(GF_Node *node, u8 IndexMode)
    7605             : {
    7606             :         switch(IndexMode) {
    7607             :         case GF_SG_FIELD_CODING_IN:
    7608             :                 return 1;
    7609             :         case GF_SG_FIELD_CODING_DEF:
    7610             :                 return 3;
    7611             :         case GF_SG_FIELD_CODING_OUT:
    7612             :                 return 1;
    7613             :         case GF_SG_FIELD_CODING_DYN:
    7614             :                 return 0;
    7615             :         default:
    7616             :                 return 3;
    7617             :         }
    7618             : }
    7619             : 
    7620             : static GF_Err ImageTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7621             : {
    7622         171 :         switch(IndexMode) {
    7623           0 :         case GF_SG_FIELD_CODING_IN:
    7624           0 :                 *allField = ImageTexture_In2All[inField];
    7625             :                 return GF_OK;
    7626         168 :         case GF_SG_FIELD_CODING_DEF:
    7627         168 :                 *allField = ImageTexture_Def2All[inField];
    7628             :                 return GF_OK;
    7629           0 :         case GF_SG_FIELD_CODING_OUT:
    7630           0 :                 *allField = ImageTexture_Out2All[inField];
    7631             :                 return GF_OK;
    7632             :         default:
    7633             :                 return GF_BAD_PARAM;
    7634             :         }
    7635             : }
    7636             : static GF_Err ImageTexture_get_field(GF_Node *node, GF_FieldInfo *info)
    7637             : {
    7638        2563 :         switch (info->fieldIndex) {
    7639         921 :         case 0:
    7640         921 :                 info->name = "url";
    7641         921 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7642         921 :                 info->fieldType = GF_SG_VRML_MFURL;
    7643         921 :                 info->far_ptr = & ((M_ImageTexture *) node)->url;
    7644             :                 return GF_OK;
    7645         821 :         case 1:
    7646         821 :                 info->name = "repeatS";
    7647         821 :                 info->eventType = GF_SG_EVENT_FIELD;
    7648         821 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7649         821 :                 info->far_ptr = & ((M_ImageTexture *) node)->repeatS;
    7650             :                 return GF_OK;
    7651         821 :         case 2:
    7652         821 :                 info->name = "repeatT";
    7653         821 :                 info->eventType = GF_SG_EVENT_FIELD;
    7654         821 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7655         821 :                 info->far_ptr = & ((M_ImageTexture *) node)->repeatT;
    7656             :                 return GF_OK;
    7657             :         default:
    7658             :                 return GF_BAD_PARAM;
    7659             :         }
    7660             : }
    7661             : 
    7662             : 
    7663         169 : static s32 ImageTexture_get_field_index_by_name(char *name)
    7664             : {
    7665         169 :         if (!strcmp("url", name)) return 0;
    7666          60 :         if (!strcmp("repeatS", name)) return 1;
    7667          30 :         if (!strcmp("repeatT", name)) return 2;
    7668           0 :         return -1;
    7669             : }
    7670             : static Bool ImageTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7671             : {
    7672             :         switch (FieldIndex) {
    7673             :         default:
    7674             :                 return 0;
    7675             :         }
    7676             : }
    7677             : 
    7678             : 
    7679             : 
    7680         224 : GF_Node *ImageTexture_Create()
    7681             : {
    7682             :         M_ImageTexture *p;
    7683         224 :         GF_SAFEALLOC(p, M_ImageTexture);
    7684         224 :         if(!p) return NULL;
    7685         224 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ImageTexture);
    7686             : 
    7687             :         /*default field values*/
    7688         224 :         p->repeatS = 1;
    7689         224 :         p->repeatT = 1;
    7690         224 :         return (GF_Node *)p;
    7691             : }
    7692             : 
    7693             : 
    7694             : /*
    7695             :         IndexedFaceSet Node deletion
    7696             : */
    7697             : 
    7698         199 : static void IndexedFaceSet_Del(GF_Node *node)
    7699             : {
    7700             :         M_IndexedFaceSet *p = (M_IndexedFaceSet *) node;
    7701         199 :         gf_sg_mfint32_del(p->set_colorIndex);
    7702         199 :         gf_sg_mfint32_del(p->set_coordIndex);
    7703         199 :         gf_sg_mfint32_del(p->set_normalIndex);
    7704         199 :         gf_sg_mfint32_del(p->set_texCoordIndex);
    7705         199 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    7706         199 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    7707         199 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
    7708         199 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
    7709         199 :         gf_sg_mfint32_del(p->colorIndex);
    7710         199 :         gf_sg_mfint32_del(p->coordIndex);
    7711         199 :         gf_sg_mfint32_del(p->normalIndex);
    7712         199 :         gf_sg_mfint32_del(p->texCoordIndex);
    7713         199 :         gf_node_free((GF_Node *) p);
    7714         199 : }
    7715             : 
    7716             : static const u16 IndexedFaceSet_Def2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
    7717             : static const u16 IndexedFaceSet_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    7718             : static const u16 IndexedFaceSet_Out2All[] = { 4, 5, 6, 7};
    7719             : 
    7720             : static u32 IndexedFaceSet_get_field_count(GF_Node *node, u8 IndexMode)
    7721             : {
    7722             :         switch(IndexMode) {
    7723             :         case GF_SG_FIELD_CODING_IN:
    7724             :                 return 8;
    7725             :         case GF_SG_FIELD_CODING_DEF:
    7726             :                 return 14;
    7727             :         case GF_SG_FIELD_CODING_OUT:
    7728             :                 return 4;
    7729             :         case GF_SG_FIELD_CODING_DYN:
    7730             :                 return 0;
    7731             :         default:
    7732             :                 return 18;
    7733             :         }
    7734             : }
    7735             : 
    7736             : static GF_Err IndexedFaceSet_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7737             : {
    7738         948 :         switch(IndexMode) {
    7739           0 :         case GF_SG_FIELD_CODING_IN:
    7740           0 :                 *allField = IndexedFaceSet_In2All[inField];
    7741             :                 return GF_OK;
    7742         930 :         case GF_SG_FIELD_CODING_DEF:
    7743         930 :                 *allField = IndexedFaceSet_Def2All[inField];
    7744             :                 return GF_OK;
    7745           0 :         case GF_SG_FIELD_CODING_OUT:
    7746           0 :                 *allField = IndexedFaceSet_Out2All[inField];
    7747             :                 return GF_OK;
    7748             :         default:
    7749             :                 return GF_BAD_PARAM;
    7750             :         }
    7751             : }
    7752        3104 : static GF_Err IndexedFaceSet_get_field(GF_Node *node, GF_FieldInfo *info)
    7753             : {
    7754        3104 :         switch (info->fieldIndex) {
    7755          47 :         case 0:
    7756          47 :                 info->name = "set_colorIndex";
    7757          47 :                 info->eventType = GF_SG_EVENT_IN;
    7758          47 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_colorIndex;
    7759          47 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7760          47 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_colorIndex;
    7761          47 :                 return GF_OK;
    7762          47 :         case 1:
    7763          47 :                 info->name = "set_coordIndex";
    7764          47 :                 info->eventType = GF_SG_EVENT_IN;
    7765          47 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_coordIndex;
    7766          47 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7767          47 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_coordIndex;
    7768          47 :                 return GF_OK;
    7769          47 :         case 2:
    7770          47 :                 info->name = "set_normalIndex";
    7771          47 :                 info->eventType = GF_SG_EVENT_IN;
    7772          47 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_normalIndex;
    7773          47 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7774          47 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_normalIndex;
    7775          47 :                 return GF_OK;
    7776          47 :         case 3:
    7777          47 :                 info->name = "set_texCoordIndex";
    7778          47 :                 info->eventType = GF_SG_EVENT_IN;
    7779          47 :                 info->on_event_in = ((M_IndexedFaceSet *)node)->on_set_texCoordIndex;
    7780          47 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7781          47 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->set_texCoordIndex;
    7782          47 :                 return GF_OK;
    7783         168 :         case 4:
    7784         168 :                 info->name = "color";
    7785         168 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7786         168 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7787         168 :                 info->NDTtype = NDT_SFColorNode;
    7788         168 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->color;
    7789         168 :                 return GF_OK;
    7790         169 :         case 5:
    7791         169 :                 info->name = "coord";
    7792         169 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7793         169 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7794         169 :                 info->NDTtype = NDT_SFCoordinateNode;
    7795         169 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->coord;
    7796         169 :                 return GF_OK;
    7797         166 :         case 6:
    7798         166 :                 info->name = "normal";
    7799         166 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7800         166 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7801         166 :                 info->NDTtype = NDT_SFNormalNode;
    7802         166 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->normal;
    7803         166 :                 return GF_OK;
    7804         107 :         case 7:
    7805         107 :                 info->name = "texCoord";
    7806         107 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    7807         107 :                 info->fieldType = GF_SG_VRML_SFNODE;
    7808         107 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    7809         107 :                 info->far_ptr = & ((M_IndexedFaceSet *)node)->texCoord;
    7810         107 :                 return GF_OK;
    7811         213 :         case 8:
    7812         213 :                 info->name = "ccw";
    7813         213 :                 info->eventType = GF_SG_EVENT_FIELD;
    7814         213 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7815         213 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->ccw;
    7816         213 :                 return GF_OK;
    7817         213 :         case 9:
    7818         213 :                 info->name = "colorIndex";
    7819         213 :                 info->eventType = GF_SG_EVENT_FIELD;
    7820         213 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7821         213 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->colorIndex;
    7822         213 :                 return GF_OK;
    7823         214 :         case 10:
    7824         214 :                 info->name = "colorPerVertex";
    7825         214 :                 info->eventType = GF_SG_EVENT_FIELD;
    7826         214 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7827         214 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->colorPerVertex;
    7828         214 :                 return GF_OK;
    7829         212 :         case 11:
    7830         212 :                 info->name = "convex";
    7831         212 :                 info->eventType = GF_SG_EVENT_FIELD;
    7832         212 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7833         212 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->convex;
    7834         212 :                 return GF_OK;
    7835         274 :         case 12:
    7836         274 :                 info->name = "coordIndex";
    7837         274 :                 info->eventType = GF_SG_EVENT_FIELD;
    7838         274 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7839         274 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->coordIndex;
    7840         274 :                 return GF_OK;
    7841         272 :         case 13:
    7842         272 :                 info->name = "creaseAngle";
    7843         272 :                 info->eventType = GF_SG_EVENT_FIELD;
    7844         272 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    7845         272 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->creaseAngle;
    7846         272 :                 return GF_OK;
    7847         212 :         case 14:
    7848         212 :                 info->name = "normalIndex";
    7849         212 :                 info->eventType = GF_SG_EVENT_FIELD;
    7850         212 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7851         212 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->normalIndex;
    7852         212 :                 return GF_OK;
    7853         212 :         case 15:
    7854         212 :                 info->name = "normalPerVertex";
    7855         212 :                 info->eventType = GF_SG_EVENT_FIELD;
    7856         212 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7857         212 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->normalPerVertex;
    7858         212 :                 return GF_OK;
    7859         272 :         case 16:
    7860         272 :                 info->name = "solid";
    7861         272 :                 info->eventType = GF_SG_EVENT_FIELD;
    7862         272 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    7863         272 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->solid;
    7864         272 :                 return GF_OK;
    7865         212 :         case 17:
    7866         212 :                 info->name = "texCoordIndex";
    7867         212 :                 info->eventType = GF_SG_EVENT_FIELD;
    7868         212 :                 info->fieldType = GF_SG_VRML_MFINT32;
    7869         212 :                 info->far_ptr = & ((M_IndexedFaceSet *) node)->texCoordIndex;
    7870         212 :                 return GF_OK;
    7871             :         default:
    7872             :                 return GF_BAD_PARAM;
    7873             :         }
    7874             : }
    7875             : 
    7876             : 
    7877         122 : static s32 IndexedFaceSet_get_field_index_by_name(char *name)
    7878             : {
    7879         122 :         if (!strcmp("set_colorIndex", name)) return 0;
    7880         121 :         if (!strcmp("set_coordIndex", name)) return 1;
    7881         120 :         if (!strcmp("set_normalIndex", name)) return 2;
    7882         119 :         if (!strcmp("set_texCoordIndex", name)) return 3;
    7883         118 :         if (!strcmp("color", name)) return 4;
    7884         100 :         if (!strcmp("coord", name)) return 5;
    7885          81 :         if (!strcmp("normal", name)) return 6;
    7886          65 :         if (!strcmp("texCoord", name)) return 7;
    7887          64 :         if (!strcmp("ccw", name)) return 8;
    7888          62 :         if (!strcmp("colorIndex", name)) return 9;
    7889          60 :         if (!strcmp("colorPerVertex", name)) return 10;
    7890          57 :         if (!strcmp("convex", name)) return 11;
    7891          56 :         if (!strcmp("coordIndex", name)) return 12;
    7892          37 :         if (!strcmp("creaseAngle", name)) return 13;
    7893          20 :         if (!strcmp("normalIndex", name)) return 14;
    7894          19 :         if (!strcmp("normalPerVertex", name)) return 15;
    7895          18 :         if (!strcmp("solid", name)) return 16;
    7896           1 :         if (!strcmp("texCoordIndex", name)) return 17;
    7897           0 :         return -1;
    7898             : }
    7899         266 : static Bool IndexedFaceSet_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    7900             : {
    7901         266 :         switch (FieldIndex) {
    7902           1 :         case 9:
    7903           1 :                 *AType = 0;
    7904           1 :                 *QType = 14;
    7905           1 :                 *b_min = FLT2FIX(-1);
    7906           1 :                 *b_max = FIX_MAX;
    7907             :                 return 1;
    7908         241 :         case 12:
    7909         241 :                 *AType = 0;
    7910         241 :                 *QType = 14;
    7911         241 :                 *b_min = FLT2FIX(-1);
    7912         241 :                 *b_max = FIX_MAX;
    7913             :                 return 1;
    7914           9 :         case 13:
    7915           9 :                 *AType = 0;
    7916           9 :                 *QType = 6;
    7917           9 :                 *b_min = FLT2FIX(0);
    7918           9 :                 *b_max = FLT2FIX(6.2831853);
    7919             :                 return 1;
    7920           1 :         case 14:
    7921           1 :                 *AType = 0;
    7922           1 :                 *QType = 14;
    7923           1 :                 *b_min = FLT2FIX(-1);
    7924           1 :                 *b_max = FIX_MAX;
    7925             :                 return 1;
    7926           1 :         case 17:
    7927           1 :                 *AType = 0;
    7928           1 :                 *QType = 14;
    7929           1 :                 *b_min = FLT2FIX(-1);
    7930           1 :                 *b_max = FIX_MAX;
    7931             :                 return 1;
    7932             :         default:
    7933             :                 return 0;
    7934             :         }
    7935             : }
    7936             : 
    7937             : 
    7938             : 
    7939         199 : GF_Node *IndexedFaceSet_Create()
    7940             : {
    7941             :         M_IndexedFaceSet *p;
    7942         199 :         GF_SAFEALLOC(p, M_IndexedFaceSet);
    7943         199 :         if(!p) return NULL;
    7944         199 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedFaceSet);
    7945             : 
    7946             :         /*default field values*/
    7947         199 :         p->ccw = 1;
    7948         199 :         p->colorPerVertex = 1;
    7949         199 :         p->convex = 1;
    7950         199 :         p->creaseAngle = FLT2FIX(0.0);
    7951         199 :         p->normalPerVertex = 1;
    7952         199 :         p->solid = 1;
    7953         199 :         return (GF_Node *)p;
    7954             : }
    7955             : 
    7956             : 
    7957             : /*
    7958             :         IndexedFaceSet2D Node deletion
    7959             : */
    7960             : 
    7961         363 : static void IndexedFaceSet2D_Del(GF_Node *node)
    7962             : {
    7963             :         M_IndexedFaceSet2D *p = (M_IndexedFaceSet2D *) node;
    7964         363 :         gf_sg_mfint32_del(p->set_colorIndex);
    7965         363 :         gf_sg_mfint32_del(p->set_coordIndex);
    7966         363 :         gf_sg_mfint32_del(p->set_texCoordIndex);
    7967         363 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    7968         363 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    7969         363 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
    7970         363 :         gf_sg_mfint32_del(p->colorIndex);
    7971         363 :         gf_sg_mfint32_del(p->coordIndex);
    7972         363 :         gf_sg_mfint32_del(p->texCoordIndex);
    7973         363 :         gf_node_free((GF_Node *) p);
    7974         363 : }
    7975             : 
    7976             : static const u16 IndexedFaceSet2D_Def2All[] = { 3, 4, 5, 6, 7, 8, 9, 10};
    7977             : static const u16 IndexedFaceSet2D_In2All[] = { 0, 1, 2, 3, 4, 5};
    7978             : static const u16 IndexedFaceSet2D_Out2All[] = { 3, 4, 5};
    7979             : 
    7980             : static u32 IndexedFaceSet2D_get_field_count(GF_Node *node, u8 IndexMode)
    7981             : {
    7982             :         switch(IndexMode) {
    7983             :         case GF_SG_FIELD_CODING_IN:
    7984             :                 return 6;
    7985             :         case GF_SG_FIELD_CODING_DEF:
    7986             :                 return 8;
    7987             :         case GF_SG_FIELD_CODING_OUT:
    7988             :                 return 3;
    7989             :         case GF_SG_FIELD_CODING_DYN:
    7990             :                 return 0;
    7991             :         default:
    7992             :                 return 11;
    7993             :         }
    7994             : }
    7995             : 
    7996             : static GF_Err IndexedFaceSet2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    7997             : {
    7998         667 :         switch(IndexMode) {
    7999           0 :         case GF_SG_FIELD_CODING_IN:
    8000           0 :                 *allField = IndexedFaceSet2D_In2All[inField];
    8001             :                 return GF_OK;
    8002         656 :         case GF_SG_FIELD_CODING_DEF:
    8003         656 :                 *allField = IndexedFaceSet2D_Def2All[inField];
    8004             :                 return GF_OK;
    8005           0 :         case GF_SG_FIELD_CODING_OUT:
    8006           0 :                 *allField = IndexedFaceSet2D_Out2All[inField];
    8007             :                 return GF_OK;
    8008             :         default:
    8009             :                 return GF_BAD_PARAM;
    8010             :         }
    8011             : }
    8012        2727 : static GF_Err IndexedFaceSet2D_get_field(GF_Node *node, GF_FieldInfo *info)
    8013             : {
    8014        2727 :         switch (info->fieldIndex) {
    8015          87 :         case 0:
    8016          87 :                 info->name = "set_colorIndex";
    8017          87 :                 info->eventType = GF_SG_EVENT_IN;
    8018          87 :                 info->on_event_in = ((M_IndexedFaceSet2D *)node)->on_set_colorIndex;
    8019          87 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8020          87 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->set_colorIndex;
    8021          87 :                 return GF_OK;
    8022          87 :         case 1:
    8023          87 :                 info->name = "set_coordIndex";
    8024          87 :                 info->eventType = GF_SG_EVENT_IN;
    8025          87 :                 info->on_event_in = ((M_IndexedFaceSet2D *)node)->on_set_coordIndex;
    8026          87 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8027          87 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->set_coordIndex;
    8028          87 :                 return GF_OK;
    8029          87 :         case 2:
    8030          87 :                 info->name = "set_texCoordIndex";
    8031          87 :                 info->eventType = GF_SG_EVENT_IN;
    8032          87 :                 info->on_event_in = ((M_IndexedFaceSet2D *)node)->on_set_texCoordIndex;
    8033          87 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8034          87 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->set_texCoordIndex;
    8035          87 :                 return GF_OK;
    8036         162 :         case 3:
    8037         162 :                 info->name = "color";
    8038         162 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8039         162 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8040         162 :                 info->NDTtype = NDT_SFColorNode;
    8041         162 :                 info->far_ptr = & ((M_IndexedFaceSet2D *)node)->color;
    8042         162 :                 return GF_OK;
    8043         486 :         case 4:
    8044         486 :                 info->name = "coord";
    8045         486 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8046         486 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8047         486 :                 info->NDTtype = NDT_SFCoordinate2DNode;
    8048         486 :                 info->far_ptr = & ((M_IndexedFaceSet2D *)node)->coord;
    8049         486 :                 return GF_OK;
    8050         159 :         case 5:
    8051         159 :                 info->name = "texCoord";
    8052         159 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8053         159 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8054         159 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
    8055         159 :                 info->far_ptr = & ((M_IndexedFaceSet2D *)node)->texCoord;
    8056         159 :                 return GF_OK;
    8057         380 :         case 6:
    8058         380 :                 info->name = "colorIndex";
    8059         380 :                 info->eventType = GF_SG_EVENT_FIELD;
    8060         380 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8061         380 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->colorIndex;
    8062         380 :                 return GF_OK;
    8063         324 :         case 7:
    8064         324 :                 info->name = "colorPerVertex";
    8065         324 :                 info->eventType = GF_SG_EVENT_FIELD;
    8066         324 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8067         324 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->colorPerVertex;
    8068         324 :                 return GF_OK;
    8069         306 :         case 8:
    8070         306 :                 info->name = "convex";
    8071         306 :                 info->eventType = GF_SG_EVENT_FIELD;
    8072         306 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8073         306 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->convex;
    8074         306 :                 return GF_OK;
    8075         343 :         case 9:
    8076         343 :                 info->name = "coordIndex";
    8077         343 :                 info->eventType = GF_SG_EVENT_FIELD;
    8078         343 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8079         343 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->coordIndex;
    8080         343 :                 return GF_OK;
    8081         306 :         case 10:
    8082         306 :                 info->name = "texCoordIndex";
    8083         306 :                 info->eventType = GF_SG_EVENT_FIELD;
    8084         306 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8085         306 :                 info->far_ptr = & ((M_IndexedFaceSet2D *) node)->texCoordIndex;
    8086         306 :                 return GF_OK;
    8087             :         default:
    8088             :                 return GF_BAD_PARAM;
    8089             :         }
    8090             : }
    8091             : 
    8092             : 
    8093         262 : static s32 IndexedFaceSet2D_get_field_index_by_name(char *name)
    8094             : {
    8095         262 :         if (!strcmp("set_colorIndex", name)) return 0;
    8096         261 :         if (!strcmp("set_coordIndex", name)) return 1;
    8097         260 :         if (!strcmp("set_texCoordIndex", name)) return 2;
    8098         259 :         if (!strcmp("color", name)) return 3;
    8099         255 :         if (!strcmp("coord", name)) return 4;
    8100         119 :         if (!strcmp("texCoord", name)) return 5;
    8101         118 :         if (!strcmp("colorIndex", name)) return 6;
    8102          44 :         if (!strcmp("colorPerVertex", name)) return 7;
    8103          25 :         if (!strcmp("convex", name)) return 8;
    8104          24 :         if (!strcmp("coordIndex", name)) return 9;
    8105           1 :         if (!strcmp("texCoordIndex", name)) return 10;
    8106           0 :         return -1;
    8107             : }
    8108             : static Bool IndexedFaceSet2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8109             : {
    8110          83 :         switch (FieldIndex) {
    8111           1 :         case 6:
    8112           1 :                 *AType = 0;
    8113           1 :                 *QType = 14;
    8114           1 :                 *b_min = FLT2FIX(-1);
    8115           1 :                 *b_max = FIX_MAX;
    8116             :                 return 1;
    8117          73 :         case 9:
    8118          73 :                 *AType = 0;
    8119          73 :                 *QType = 14;
    8120          73 :                 *b_min = FLT2FIX(-1);
    8121          73 :                 *b_max = FIX_MAX;
    8122             :                 return 1;
    8123           1 :         case 10:
    8124           1 :                 *AType = 0;
    8125           1 :                 *QType = 14;
    8126           1 :                 *b_min = FLT2FIX(-1);
    8127           1 :                 *b_max = FIX_MAX;
    8128             :                 return 1;
    8129             :         default:
    8130             :                 return 0;
    8131             :         }
    8132             : }
    8133             : 
    8134             : 
    8135             : 
    8136         363 : GF_Node *IndexedFaceSet2D_Create()
    8137             : {
    8138             :         M_IndexedFaceSet2D *p;
    8139         363 :         GF_SAFEALLOC(p, M_IndexedFaceSet2D);
    8140         363 :         if(!p) return NULL;
    8141         363 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedFaceSet2D);
    8142             : 
    8143             :         /*default field values*/
    8144         363 :         p->colorPerVertex = 1;
    8145         363 :         p->convex = 1;
    8146         363 :         return (GF_Node *)p;
    8147             : }
    8148             : 
    8149             : 
    8150             : /*
    8151             :         IndexedLineSet Node deletion
    8152             : */
    8153             : 
    8154          68 : static void IndexedLineSet_Del(GF_Node *node)
    8155             : {
    8156             :         M_IndexedLineSet *p = (M_IndexedLineSet *) node;
    8157          68 :         gf_sg_mfint32_del(p->set_colorIndex);
    8158          68 :         gf_sg_mfint32_del(p->set_coordIndex);
    8159          68 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    8160          68 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    8161          68 :         gf_sg_mfint32_del(p->colorIndex);
    8162          68 :         gf_sg_mfint32_del(p->coordIndex);
    8163          68 :         gf_node_free((GF_Node *) p);
    8164          68 : }
    8165             : 
    8166             : static const u16 IndexedLineSet_Def2All[] = { 2, 3, 4, 5, 6};
    8167             : static const u16 IndexedLineSet_In2All[] = { 0, 1, 2, 3};
    8168             : static const u16 IndexedLineSet_Out2All[] = { 2, 3};
    8169             : 
    8170             : static u32 IndexedLineSet_get_field_count(GF_Node *node, u8 IndexMode)
    8171             : {
    8172             :         switch(IndexMode) {
    8173             :         case GF_SG_FIELD_CODING_IN:
    8174             :                 return 4;
    8175             :         case GF_SG_FIELD_CODING_DEF:
    8176             :                 return 5;
    8177             :         case GF_SG_FIELD_CODING_OUT:
    8178             :                 return 2;
    8179             :         case GF_SG_FIELD_CODING_DYN:
    8180             :                 return 0;
    8181             :         default:
    8182             :                 return 7;
    8183             :         }
    8184             : }
    8185             : 
    8186             : static GF_Err IndexedLineSet_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8187             : {
    8188         167 :         switch(IndexMode) {
    8189           0 :         case GF_SG_FIELD_CODING_IN:
    8190           0 :                 *allField = IndexedLineSet_In2All[inField];
    8191             :                 return GF_OK;
    8192         160 :         case GF_SG_FIELD_CODING_DEF:
    8193         160 :                 *allField = IndexedLineSet_Def2All[inField];
    8194             :                 return GF_OK;
    8195           0 :         case GF_SG_FIELD_CODING_OUT:
    8196           0 :                 *allField = IndexedLineSet_Out2All[inField];
    8197             :                 return GF_OK;
    8198             :         default:
    8199             :                 return GF_BAD_PARAM;
    8200             :         }
    8201             : }
    8202         570 : static GF_Err IndexedLineSet_get_field(GF_Node *node, GF_FieldInfo *info)
    8203             : {
    8204         570 :         switch (info->fieldIndex) {
    8205          17 :         case 0:
    8206          17 :                 info->name = "set_colorIndex";
    8207          17 :                 info->eventType = GF_SG_EVENT_IN;
    8208          17 :                 info->on_event_in = ((M_IndexedLineSet *)node)->on_set_colorIndex;
    8209          17 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8210          17 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->set_colorIndex;
    8211          17 :                 return GF_OK;
    8212          17 :         case 1:
    8213          17 :                 info->name = "set_coordIndex";
    8214          17 :                 info->eventType = GF_SG_EVENT_IN;
    8215          17 :                 info->on_event_in = ((M_IndexedLineSet *)node)->on_set_coordIndex;
    8216          17 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8217          17 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->set_coordIndex;
    8218          17 :                 return GF_OK;
    8219          98 :         case 2:
    8220          98 :                 info->name = "color";
    8221          98 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8222          98 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8223          98 :                 info->NDTtype = NDT_SFColorNode;
    8224          98 :                 info->far_ptr = & ((M_IndexedLineSet *)node)->color;
    8225          98 :                 return GF_OK;
    8226          98 :         case 3:
    8227          98 :                 info->name = "coord";
    8228          98 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8229          98 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8230          98 :                 info->NDTtype = NDT_SFCoordinateNode;
    8231          98 :                 info->far_ptr = & ((M_IndexedLineSet *)node)->coord;
    8232          98 :                 return GF_OK;
    8233         133 :         case 4:
    8234         133 :                 info->name = "colorIndex";
    8235         133 :                 info->eventType = GF_SG_EVENT_FIELD;
    8236         133 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8237         133 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->colorIndex;
    8238         133 :                 return GF_OK;
    8239          74 :         case 5:
    8240          74 :                 info->name = "colorPerVertex";
    8241          74 :                 info->eventType = GF_SG_EVENT_FIELD;
    8242          74 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8243          74 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->colorPerVertex;
    8244          74 :                 return GF_OK;
    8245         133 :         case 6:
    8246         133 :                 info->name = "coordIndex";
    8247         133 :                 info->eventType = GF_SG_EVENT_FIELD;
    8248         133 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8249         133 :                 info->far_ptr = & ((M_IndexedLineSet *) node)->coordIndex;
    8250         133 :                 return GF_OK;
    8251             :         default:
    8252             :                 return GF_BAD_PARAM;
    8253             :         }
    8254             : }
    8255             : 
    8256             : 
    8257          77 : static s32 IndexedLineSet_get_field_index_by_name(char *name)
    8258             : {
    8259          77 :         if (!strcmp("set_colorIndex", name)) return 0;
    8260          76 :         if (!strcmp("set_coordIndex", name)) return 1;
    8261          75 :         if (!strcmp("color", name)) return 2;
    8262          57 :         if (!strcmp("coord", name)) return 3;
    8263          39 :         if (!strcmp("colorIndex", name)) return 4;
    8264          21 :         if (!strcmp("colorPerVertex", name)) return 5;
    8265          18 :         if (!strcmp("coordIndex", name)) return 6;
    8266           0 :         return -1;
    8267             : }
    8268             : static Bool IndexedLineSet_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8269             : {
    8270         375 :         switch (FieldIndex) {
    8271         185 :         case 4:
    8272         185 :                 *AType = 0;
    8273         185 :                 *QType = 14;
    8274         185 :                 *b_min = FLT2FIX(-1);
    8275         185 :                 *b_max = FIX_MAX;
    8276             :                 return 1;
    8277         185 :         case 6:
    8278         185 :                 *AType = 0;
    8279         185 :                 *QType = 14;
    8280         185 :                 *b_min = FLT2FIX(-1);
    8281         185 :                 *b_max = FIX_MAX;
    8282             :                 return 1;
    8283             :         default:
    8284             :                 return 0;
    8285             :         }
    8286             : }
    8287             : 
    8288             : 
    8289             : 
    8290          68 : GF_Node *IndexedLineSet_Create()
    8291             : {
    8292             :         M_IndexedLineSet *p;
    8293          68 :         GF_SAFEALLOC(p, M_IndexedLineSet);
    8294          68 :         if(!p) return NULL;
    8295          68 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedLineSet);
    8296             : 
    8297             :         /*default field values*/
    8298          68 :         p->colorPerVertex = 1;
    8299          68 :         return (GF_Node *)p;
    8300             : }
    8301             : 
    8302             : 
    8303             : /*
    8304             :         IndexedLineSet2D Node deletion
    8305             : */
    8306             : 
    8307         109 : static void IndexedLineSet2D_Del(GF_Node *node)
    8308             : {
    8309             :         M_IndexedLineSet2D *p = (M_IndexedLineSet2D *) node;
    8310         109 :         gf_sg_mfint32_del(p->set_colorIndex);
    8311         109 :         gf_sg_mfint32_del(p->set_coordIndex);
    8312         109 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
    8313         109 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
    8314         109 :         gf_sg_mfint32_del(p->colorIndex);
    8315         109 :         gf_sg_mfint32_del(p->coordIndex);
    8316         109 :         gf_node_free((GF_Node *) p);
    8317         109 : }
    8318             : 
    8319             : static const u16 IndexedLineSet2D_Def2All[] = { 2, 3, 4, 5, 6};
    8320             : static const u16 IndexedLineSet2D_In2All[] = { 0, 1, 2, 3};
    8321             : static const u16 IndexedLineSet2D_Out2All[] = { 2, 3};
    8322             : 
    8323             : static u32 IndexedLineSet2D_get_field_count(GF_Node *node, u8 IndexMode)
    8324             : {
    8325             :         switch(IndexMode) {
    8326             :         case GF_SG_FIELD_CODING_IN:
    8327             :                 return 4;
    8328             :         case GF_SG_FIELD_CODING_DEF:
    8329             :                 return 5;
    8330             :         case GF_SG_FIELD_CODING_OUT:
    8331             :                 return 2;
    8332             :         case GF_SG_FIELD_CODING_DYN:
    8333             :                 return 0;
    8334             :         default:
    8335             :                 return 7;
    8336             :         }
    8337             : }
    8338             : 
    8339             : static GF_Err IndexedLineSet2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8340             : {
    8341         122 :         switch(IndexMode) {
    8342           0 :         case GF_SG_FIELD_CODING_IN:
    8343           0 :                 *allField = IndexedLineSet2D_In2All[inField];
    8344             :                 return GF_OK;
    8345         115 :         case GF_SG_FIELD_CODING_DEF:
    8346         115 :                 *allField = IndexedLineSet2D_Def2All[inField];
    8347             :                 return GF_OK;
    8348           0 :         case GF_SG_FIELD_CODING_OUT:
    8349           0 :                 *allField = IndexedLineSet2D_Out2All[inField];
    8350             :                 return GF_OK;
    8351             :         default:
    8352             :                 return GF_BAD_PARAM;
    8353             :         }
    8354             : }
    8355         445 : static GF_Err IndexedLineSet2D_get_field(GF_Node *node, GF_FieldInfo *info)
    8356             : {
    8357         445 :         switch (info->fieldIndex) {
    8358          17 :         case 0:
    8359          17 :                 info->name = "set_colorIndex";
    8360          17 :                 info->eventType = GF_SG_EVENT_IN;
    8361          17 :                 info->on_event_in = ((M_IndexedLineSet2D *)node)->on_set_colorIndex;
    8362          17 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8363          17 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->set_colorIndex;
    8364          17 :                 return GF_OK;
    8365          17 :         case 1:
    8366          17 :                 info->name = "set_coordIndex";
    8367          17 :                 info->eventType = GF_SG_EVENT_IN;
    8368          17 :                 info->on_event_in = ((M_IndexedLineSet2D *)node)->on_set_coordIndex;
    8369          17 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8370          17 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->set_coordIndex;
    8371          17 :                 return GF_OK;
    8372          39 :         case 2:
    8373          39 :                 info->name = "color";
    8374          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8375          39 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8376          39 :                 info->NDTtype = NDT_SFColorNode;
    8377          39 :                 info->far_ptr = & ((M_IndexedLineSet2D *)node)->color;
    8378          39 :                 return GF_OK;
    8379         139 :         case 3:
    8380         139 :                 info->name = "coord";
    8381         139 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8382         139 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8383         139 :                 info->NDTtype = NDT_SFCoordinate2DNode;
    8384         139 :                 info->far_ptr = & ((M_IndexedLineSet2D *)node)->coord;
    8385         139 :                 return GF_OK;
    8386          74 :         case 4:
    8387          74 :                 info->name = "colorIndex";
    8388          74 :                 info->eventType = GF_SG_EVENT_FIELD;
    8389          74 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8390          74 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->colorIndex;
    8391          74 :                 return GF_OK;
    8392          74 :         case 5:
    8393          74 :                 info->name = "colorPerVertex";
    8394          74 :                 info->eventType = GF_SG_EVENT_FIELD;
    8395          74 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    8396          74 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->colorPerVertex;
    8397          74 :                 return GF_OK;
    8398          85 :         case 6:
    8399          85 :                 info->name = "coordIndex";
    8400          85 :                 info->eventType = GF_SG_EVENT_FIELD;
    8401          85 :                 info->fieldType = GF_SG_VRML_MFINT32;
    8402          85 :                 info->far_ptr = & ((M_IndexedLineSet2D *) node)->coordIndex;
    8403          85 :                 return GF_OK;
    8404             :         default:
    8405             :                 return GF_BAD_PARAM;
    8406             :         }
    8407             : }
    8408             : 
    8409             : 
    8410          84 : static s32 IndexedLineSet2D_get_field_index_by_name(char *name)
    8411             : {
    8412          84 :         if (!strcmp("set_colorIndex", name)) return 0;
    8413          83 :         if (!strcmp("set_coordIndex", name)) return 1;
    8414          82 :         if (!strcmp("color", name)) return 2;
    8415          79 :         if (!strcmp("coord", name)) return 3;
    8416          20 :         if (!strcmp("colorIndex", name)) return 4;
    8417          17 :         if (!strcmp("colorPerVertex", name)) return 5;
    8418          14 :         if (!strcmp("coordIndex", name)) return 6;
    8419           0 :         return -1;
    8420             : }
    8421             : static Bool IndexedLineSet2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8422             : {
    8423           7 :         switch (FieldIndex) {
    8424           1 :         case 4:
    8425           1 :                 *AType = 0;
    8426           1 :                 *QType = 14;
    8427           1 :                 *b_min = FLT2FIX(-1);
    8428           1 :                 *b_max = FIX_MAX;
    8429             :                 return 1;
    8430           1 :         case 6:
    8431           1 :                 *AType = 0;
    8432           1 :                 *QType = 14;
    8433           1 :                 *b_min = FLT2FIX(-1);
    8434           1 :                 *b_max = FIX_MAX;
    8435             :                 return 1;
    8436             :         default:
    8437             :                 return 0;
    8438             :         }
    8439             : }
    8440             : 
    8441             : 
    8442             : 
    8443         109 : GF_Node *IndexedLineSet2D_Create()
    8444             : {
    8445             :         M_IndexedLineSet2D *p;
    8446         109 :         GF_SAFEALLOC(p, M_IndexedLineSet2D);
    8447         109 :         if(!p) return NULL;
    8448         109 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_IndexedLineSet2D);
    8449             : 
    8450             :         /*default field values*/
    8451         109 :         p->colorPerVertex = 1;
    8452         109 :         return (GF_Node *)p;
    8453             : }
    8454             : 
    8455             : 
    8456             : /*
    8457             :         Inline Node deletion
    8458             : */
    8459             : 
    8460             : static void Inline_Del(GF_Node *node)
    8461             : {
    8462             :         M_Inline *p = (M_Inline *) node;
    8463         729 :         gf_sg_mfurl_del(p->url);
    8464         729 :         gf_node_free((GF_Node *) p);
    8465             : }
    8466             : 
    8467             : static const u16 Inline_Def2All[] = { 0};
    8468             : static const u16 Inline_In2All[] = { 0};
    8469             : static const u16 Inline_Out2All[] = { 0};
    8470             : 
    8471             : static u32 Inline_get_field_count(GF_Node *node, u8 IndexMode)
    8472             : {
    8473           6 :         switch(IndexMode) {
    8474             :         case GF_SG_FIELD_CODING_IN:
    8475             :                 return 1;
    8476             :         case GF_SG_FIELD_CODING_DEF:
    8477             :                 return 1;
    8478             :         case GF_SG_FIELD_CODING_OUT:
    8479             :                 return 1;
    8480           1 :         case GF_SG_FIELD_CODING_DYN:
    8481             :                 return 0;
    8482             :         default:
    8483             :                 return 1;
    8484             :         }
    8485             : }
    8486             : 
    8487             : static GF_Err Inline_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8488             : {
    8489           1 :         switch(IndexMode) {
    8490           0 :         case GF_SG_FIELD_CODING_IN:
    8491           0 :                 *allField = Inline_In2All[inField];
    8492             :                 return GF_OK;
    8493           0 :         case GF_SG_FIELD_CODING_DEF:
    8494           0 :                 *allField = Inline_Def2All[inField];
    8495             :                 return GF_OK;
    8496           0 :         case GF_SG_FIELD_CODING_OUT:
    8497           0 :                 *allField = Inline_Out2All[inField];
    8498             :                 return GF_OK;
    8499             :         default:
    8500             :                 return GF_BAD_PARAM;
    8501             :         }
    8502             : }
    8503             : static GF_Err Inline_get_field(GF_Node *node, GF_FieldInfo *info)
    8504             : {
    8505         202 :         switch (info->fieldIndex) {
    8506         202 :         case 0:
    8507         202 :                 info->name = "url";
    8508         202 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8509         202 :                 info->fieldType = GF_SG_VRML_MFURL;
    8510         202 :                 info->far_ptr = & ((M_Inline *) node)->url;
    8511             :                 return GF_OK;
    8512             :         default:
    8513             :                 return GF_BAD_PARAM;
    8514             :         }
    8515             : }
    8516             : 
    8517             : 
    8518             : static s32 Inline_get_field_index_by_name(char *name)
    8519             : {
    8520         188 :         if (!strcmp("url", name)) return 0;
    8521             :         return -1;
    8522             : }
    8523             : static Bool Inline_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8524             : {
    8525             :         switch (FieldIndex) {
    8526             :         default:
    8527             :                 return 0;
    8528             :         }
    8529             : }
    8530             : 
    8531             : 
    8532             : 
    8533         729 : GF_Node *Inline_Create()
    8534             : {
    8535             :         M_Inline *p;
    8536         729 :         GF_SAFEALLOC(p, M_Inline);
    8537         729 :         if(!p) return NULL;
    8538         729 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Inline);
    8539             : 
    8540             :         /*default field values*/
    8541         729 :         return (GF_Node *)p;
    8542             : }
    8543             : 
    8544             : 
    8545             : /*
    8546             :         LOD Node deletion
    8547             : */
    8548             : 
    8549           2 : static void LOD_Del(GF_Node *node)
    8550             : {
    8551             :         M_LOD *p = (M_LOD *) node;
    8552           2 :         gf_node_unregister_children((GF_Node *) p, p->level);
    8553           2 :         gf_sg_mffloat_del(p->range);
    8554           2 :         gf_node_free((GF_Node *) p);
    8555           2 : }
    8556             : 
    8557             : static const u16 LOD_Def2All[] = { 0, 1, 2};
    8558             : static const u16 LOD_In2All[] = { 0};
    8559             : static const u16 LOD_Out2All[] = { 0};
    8560             : 
    8561             : static u32 LOD_get_field_count(GF_Node *node, u8 IndexMode)
    8562             : {
    8563             :         switch(IndexMode) {
    8564             :         case GF_SG_FIELD_CODING_IN:
    8565             :                 return 1;
    8566             :         case GF_SG_FIELD_CODING_DEF:
    8567             :                 return 3;
    8568             :         case GF_SG_FIELD_CODING_OUT:
    8569             :                 return 1;
    8570             :         case GF_SG_FIELD_CODING_DYN:
    8571             :                 return 0;
    8572             :         default:
    8573             :                 return 3;
    8574             :         }
    8575             : }
    8576             : 
    8577             : static GF_Err LOD_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8578             : {
    8579           3 :         switch(IndexMode) {
    8580           0 :         case GF_SG_FIELD_CODING_IN:
    8581           0 :                 *allField = LOD_In2All[inField];
    8582             :                 return GF_OK;
    8583           0 :         case GF_SG_FIELD_CODING_DEF:
    8584           0 :                 *allField = LOD_Def2All[inField];
    8585             :                 return GF_OK;
    8586           0 :         case GF_SG_FIELD_CODING_OUT:
    8587           0 :                 *allField = LOD_Out2All[inField];
    8588             :                 return GF_OK;
    8589             :         default:
    8590             :                 return GF_BAD_PARAM;
    8591             :         }
    8592             : }
    8593             : static GF_Err LOD_get_field(GF_Node *node, GF_FieldInfo *info)
    8594             : {
    8595           9 :         switch (info->fieldIndex) {
    8596           3 :         case 0:
    8597           3 :                 info->name = "level";
    8598           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8599           3 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8600           3 :                 info->NDTtype = NDT_SF3DNode;
    8601           3 :                 info->far_ptr = & ((M_LOD *)node)->level;
    8602             :                 return GF_OK;
    8603           3 :         case 1:
    8604           3 :                 info->name = "center";
    8605           3 :                 info->eventType = GF_SG_EVENT_FIELD;
    8606           3 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    8607           3 :                 info->far_ptr = & ((M_LOD *) node)->center;
    8608             :                 return GF_OK;
    8609           3 :         case 2:
    8610           3 :                 info->name = "range";
    8611           3 :                 info->eventType = GF_SG_EVENT_FIELD;
    8612           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
    8613           3 :                 info->far_ptr = & ((M_LOD *) node)->range;
    8614             :                 return GF_OK;
    8615             :         default:
    8616             :                 return GF_BAD_PARAM;
    8617             :         }
    8618             : }
    8619             : 
    8620             : 
    8621           6 : static s32 LOD_get_field_index_by_name(char *name)
    8622             : {
    8623           6 :         if (!strcmp("level", name)) return 0;
    8624           4 :         if (!strcmp("center", name)) return 1;
    8625           2 :         if (!strcmp("range", name)) return 2;
    8626           0 :         return -1;
    8627             : }
    8628             : static Bool LOD_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8629             : {
    8630           3 :         switch (FieldIndex) {
    8631           1 :         case 1:
    8632           1 :                 *AType = 0;
    8633           1 :                 *QType = 1;
    8634           1 :                 *b_min = FIX_MIN;
    8635           1 :                 *b_max = FIX_MAX;
    8636             :                 return 1;
    8637           1 :         case 2:
    8638           1 :                 *AType = 0;
    8639           1 :                 *QType = 11;
    8640           1 :                 *b_min = FLT2FIX(0);
    8641           1 :                 *b_max = FIX_MAX;
    8642             :                 return 1;
    8643             :         default:
    8644             :                 return 0;
    8645             :         }
    8646             : }
    8647             : 
    8648             : 
    8649             : 
    8650           2 : GF_Node *LOD_Create()
    8651             : {
    8652             :         M_LOD *p;
    8653           2 :         GF_SAFEALLOC(p, M_LOD);
    8654           2 :         if(!p) return NULL;
    8655           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_LOD);
    8656             : 
    8657             :         /*default field values*/
    8658           2 :         p->center.x = FLT2FIX(0);
    8659           2 :         p->center.y = FLT2FIX(0);
    8660           2 :         p->center.z = FLT2FIX(0);
    8661           2 :         return (GF_Node *)p;
    8662             : }
    8663             : 
    8664             : 
    8665             : /*
    8666             :         Layer2D Node deletion
    8667             : */
    8668             : 
    8669         444 : static void Layer2D_Del(GF_Node *node)
    8670             : {
    8671             :         M_Layer2D *p = (M_Layer2D *) node;
    8672         444 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    8673         444 :         gf_node_unregister((GF_Node *) p->viewport, (GF_Node *) p);
    8674         444 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    8675         444 :         gf_node_free((GF_Node *) p);
    8676         444 : }
    8677             : 
    8678             : static const u16 Layer2D_Def2All[] = { 2, 3, 4, 5};
    8679             : static const u16 Layer2D_In2All[] = { 0, 1, 2, 3, 4, 5};
    8680             : static const u16 Layer2D_Out2All[] = { 2, 3, 4, 5};
    8681             : static const u16 Layer2D_Dyn2All[] = { 3};
    8682             : 
    8683             : static u32 Layer2D_get_field_count(GF_Node *node, u8 IndexMode)
    8684             : {
    8685             :         switch(IndexMode) {
    8686             :         case GF_SG_FIELD_CODING_IN:
    8687             :                 return 6;
    8688             :         case GF_SG_FIELD_CODING_DEF:
    8689             :                 return 4;
    8690             :         case GF_SG_FIELD_CODING_OUT:
    8691             :                 return 4;
    8692             :         case GF_SG_FIELD_CODING_DYN:
    8693             :                 return 1;
    8694             :         default:
    8695             :                 return 6;
    8696             :         }
    8697             : }
    8698             : 
    8699             : static GF_Err Layer2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8700             : {
    8701         101 :         switch(IndexMode) {
    8702           0 :         case GF_SG_FIELD_CODING_IN:
    8703           0 :                 *allField = Layer2D_In2All[inField];
    8704             :                 return GF_OK;
    8705          95 :         case GF_SG_FIELD_CODING_DEF:
    8706          95 :                 *allField = Layer2D_Def2All[inField];
    8707             :                 return GF_OK;
    8708           0 :         case GF_SG_FIELD_CODING_OUT:
    8709           0 :                 *allField = Layer2D_Out2All[inField];
    8710             :                 return GF_OK;
    8711           0 :         case GF_SG_FIELD_CODING_DYN:
    8712           0 :                 *allField = Layer2D_Dyn2All[inField];
    8713             :                 return GF_OK;
    8714             :         default:
    8715             :                 return GF_BAD_PARAM;
    8716             :         }
    8717             : }
    8718        2585 : static GF_Err Layer2D_get_field(GF_Node *node, GF_FieldInfo *info)
    8719             : {
    8720        2585 :         switch (info->fieldIndex) {
    8721          17 :         case 0:
    8722          17 :                 info->name = "addChildren";
    8723          17 :                 info->eventType = GF_SG_EVENT_IN;
    8724          17 :                 info->on_event_in = ((M_Layer2D *)node)->on_addChildren;
    8725          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8726          17 :                 info->NDTtype = NDT_SF2DNode;
    8727          17 :                 info->far_ptr = & ((M_Layer2D *)node)->addChildren;
    8728          17 :                 return GF_OK;
    8729          17 :         case 1:
    8730          17 :                 info->name = "removeChildren";
    8731          17 :                 info->eventType = GF_SG_EVENT_IN;
    8732          17 :                 info->on_event_in = ((M_Layer2D *)node)->on_removeChildren;
    8733          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8734          17 :                 info->NDTtype = NDT_SF2DNode;
    8735          17 :                 info->far_ptr = & ((M_Layer2D *)node)->removeChildren;
    8736          17 :                 return GF_OK;
    8737         423 :         case 2:
    8738         423 :                 info->name = "children";
    8739         423 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8740         423 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8741         423 :                 info->NDTtype = NDT_SF2DNode;
    8742         423 :                 info->far_ptr = & ((M_Layer2D *)node)->children;
    8743         423 :                 return GF_OK;
    8744        2003 :         case 3:
    8745        2003 :                 info->name = "size";
    8746        2003 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8747        2003 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    8748        2003 :                 info->far_ptr = & ((M_Layer2D *) node)->size;
    8749        2003 :                 return GF_OK;
    8750          46 :         case 4:
    8751          46 :                 info->name = "background";
    8752          46 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8753          46 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8754          46 :                 info->NDTtype = NDT_SFBackground2DNode;
    8755          46 :                 info->far_ptr = & ((M_Layer2D *)node)->background;
    8756          46 :                 return GF_OK;
    8757          79 :         case 5:
    8758          79 :                 info->name = "viewport";
    8759          79 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8760          79 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8761          79 :                 info->NDTtype = NDT_SFViewportNode;
    8762          79 :                 info->far_ptr = & ((M_Layer2D *)node)->viewport;
    8763          79 :                 return GF_OK;
    8764             :         default:
    8765             :                 return GF_BAD_PARAM;
    8766             :         }
    8767             : }
    8768             : 
    8769             : 
    8770        2090 : static s32 Layer2D_get_field_index_by_name(char *name)
    8771             : {
    8772        2090 :         if (!strcmp("addChildren", name)) return 0;
    8773        2089 :         if (!strcmp("removeChildren", name)) return 1;
    8774        2088 :         if (!strcmp("children", name)) return 2;
    8775        1784 :         if (!strcmp("size", name)) return 3;
    8776          53 :         if (!strcmp("background", name)) return 4;
    8777          43 :         if (!strcmp("viewport", name)) return 5;
    8778           0 :         return -1;
    8779             : }
    8780             : static Bool Layer2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8781             : {
    8782          14 :         switch (FieldIndex) {
    8783           9 :         case 3:
    8784           9 :                 *AType = 12;
    8785           9 :                 *QType = 12;
    8786           9 :                 *b_min = FIX_MIN;
    8787           9 :                 *b_max = FIX_MAX;
    8788             :                 return 1;
    8789             :         default:
    8790             :                 return 0;
    8791             :         }
    8792             : }
    8793             : 
    8794             : 
    8795             : 
    8796         444 : GF_Node *Layer2D_Create()
    8797             : {
    8798             :         M_Layer2D *p;
    8799         444 :         GF_SAFEALLOC(p, M_Layer2D);
    8800         444 :         if(!p) return NULL;
    8801         444 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Layer2D);
    8802         444 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    8803             : 
    8804             :         /*default field values*/
    8805         444 :         p->size.x = FLT2FIX(-1);
    8806         444 :         p->size.y = FLT2FIX(-1);
    8807         444 :         return (GF_Node *)p;
    8808             : }
    8809             : 
    8810             : 
    8811             : /*
    8812             :         Layer3D Node deletion
    8813             : */
    8814             : 
    8815          75 : static void Layer3D_Del(GF_Node *node)
    8816             : {
    8817             :         M_Layer3D *p = (M_Layer3D *) node;
    8818          75 :         gf_node_unregister((GF_Node *) p->background, (GF_Node *) p);
    8819          75 :         gf_node_unregister((GF_Node *) p->fog, (GF_Node *) p);
    8820          75 :         gf_node_unregister((GF_Node *) p->navigationInfo, (GF_Node *) p);
    8821          75 :         gf_node_unregister((GF_Node *) p->viewpoint, (GF_Node *) p);
    8822          75 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    8823          75 :         gf_node_free((GF_Node *) p);
    8824          75 : }
    8825             : 
    8826             : static const u16 Layer3D_Def2All[] = { 2, 3, 4, 5, 6, 7};
    8827             : static const u16 Layer3D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
    8828             : static const u16 Layer3D_Out2All[] = { 2, 3, 4, 5, 6, 7};
    8829             : static const u16 Layer3D_Dyn2All[] = { 3};
    8830             : 
    8831             : static u32 Layer3D_get_field_count(GF_Node *node, u8 IndexMode)
    8832             : {
    8833             :         switch(IndexMode) {
    8834             :         case GF_SG_FIELD_CODING_IN:
    8835             :                 return 8;
    8836             :         case GF_SG_FIELD_CODING_DEF:
    8837             :                 return 6;
    8838             :         case GF_SG_FIELD_CODING_OUT:
    8839             :                 return 6;
    8840             :         case GF_SG_FIELD_CODING_DYN:
    8841             :                 return 1;
    8842             :         default:
    8843             :                 return 8;
    8844             :         }
    8845             : }
    8846             : 
    8847             : static GF_Err Layer3D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    8848             : {
    8849         158 :         switch(IndexMode) {
    8850           0 :         case GF_SG_FIELD_CODING_IN:
    8851           0 :                 *allField = Layer3D_In2All[inField];
    8852             :                 return GF_OK;
    8853         150 :         case GF_SG_FIELD_CODING_DEF:
    8854         150 :                 *allField = Layer3D_Def2All[inField];
    8855             :                 return GF_OK;
    8856           0 :         case GF_SG_FIELD_CODING_OUT:
    8857           0 :                 *allField = Layer3D_Out2All[inField];
    8858             :                 return GF_OK;
    8859           0 :         case GF_SG_FIELD_CODING_DYN:
    8860           0 :                 *allField = Layer3D_Dyn2All[inField];
    8861             :                 return GF_OK;
    8862             :         default:
    8863             :                 return GF_BAD_PARAM;
    8864             :         }
    8865             : }
    8866         442 : static GF_Err Layer3D_get_field(GF_Node *node, GF_FieldInfo *info)
    8867             : {
    8868         442 :         switch (info->fieldIndex) {
    8869          17 :         case 0:
    8870          17 :                 info->name = "addChildren";
    8871          17 :                 info->eventType = GF_SG_EVENT_IN;
    8872          17 :                 info->on_event_in = ((M_Layer3D *)node)->on_addChildren;
    8873          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8874          17 :                 info->NDTtype = NDT_SF3DNode;
    8875          17 :                 info->far_ptr = & ((M_Layer3D *)node)->addChildren;
    8876          17 :                 return GF_OK;
    8877          17 :         case 1:
    8878          17 :                 info->name = "removeChildren";
    8879          17 :                 info->eventType = GF_SG_EVENT_IN;
    8880          17 :                 info->on_event_in = ((M_Layer3D *)node)->on_removeChildren;
    8881          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8882          17 :                 info->NDTtype = NDT_SF3DNode;
    8883          17 :                 info->far_ptr = & ((M_Layer3D *)node)->removeChildren;
    8884          17 :                 return GF_OK;
    8885         105 :         case 2:
    8886         105 :                 info->name = "children";
    8887         105 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8888         105 :                 info->fieldType = GF_SG_VRML_MFNODE;
    8889         105 :                 info->NDTtype = NDT_SF3DNode;
    8890         105 :                 info->far_ptr = & ((M_Layer3D *)node)->children;
    8891         105 :                 return GF_OK;
    8892         140 :         case 3:
    8893         140 :                 info->name = "size";
    8894         140 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8895         140 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    8896         140 :                 info->far_ptr = & ((M_Layer3D *) node)->size;
    8897         140 :                 return GF_OK;
    8898          37 :         case 4:
    8899          37 :                 info->name = "background";
    8900          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8901          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8902          37 :                 info->NDTtype = NDT_SFBackground3DNode;
    8903          37 :                 info->far_ptr = & ((M_Layer3D *)node)->background;
    8904          37 :                 return GF_OK;
    8905          37 :         case 5:
    8906          37 :                 info->name = "fog";
    8907          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8908          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8909          37 :                 info->NDTtype = NDT_SFFogNode;
    8910          37 :                 info->far_ptr = & ((M_Layer3D *)node)->fog;
    8911          37 :                 return GF_OK;
    8912          46 :         case 6:
    8913          46 :                 info->name = "navigationInfo";
    8914          46 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8915          46 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8916          46 :                 info->NDTtype = NDT_SFNavigationInfoNode;
    8917          46 :                 info->far_ptr = & ((M_Layer3D *)node)->navigationInfo;
    8918          46 :                 return GF_OK;
    8919          43 :         case 7:
    8920          43 :                 info->name = "viewpoint";
    8921          43 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    8922          43 :                 info->fieldType = GF_SG_VRML_SFNODE;
    8923          43 :                 info->NDTtype = NDT_SFViewpointNode;
    8924          43 :                 info->far_ptr = & ((M_Layer3D *)node)->viewpoint;
    8925          43 :                 return GF_OK;
    8926             :         default:
    8927             :                 return GF_BAD_PARAM;
    8928             :         }
    8929             : }
    8930             : 
    8931             : 
    8932          71 : static s32 Layer3D_get_field_index_by_name(char *name)
    8933             : {
    8934          71 :         if (!strcmp("addChildren", name)) return 0;
    8935          70 :         if (!strcmp("removeChildren", name)) return 1;
    8936          69 :         if (!strcmp("children", name)) return 2;
    8937          44 :         if (!strcmp("size", name)) return 3;
    8938          19 :         if (!strcmp("background", name)) return 4;
    8939          18 :         if (!strcmp("fog", name)) return 5;
    8940          17 :         if (!strcmp("navigationInfo", name)) return 6;
    8941           7 :         if (!strcmp("viewpoint", name)) return 7;
    8942           0 :         return -1;
    8943             : }
    8944             : static Bool Layer3D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    8945             : {
    8946          16 :         switch (FieldIndex) {
    8947           9 :         case 3:
    8948           9 :                 *AType = 12;
    8949           9 :                 *QType = 12;
    8950           9 :                 *b_min = FIX_MIN;
    8951           9 :                 *b_max = FIX_MAX;
    8952             :                 return 1;
    8953             :         default:
    8954             :                 return 0;
    8955             :         }
    8956             : }
    8957             : 
    8958             : 
    8959             : 
    8960          75 : GF_Node *Layer3D_Create()
    8961             : {
    8962             :         M_Layer3D *p;
    8963          75 :         GF_SAFEALLOC(p, M_Layer3D);
    8964          75 :         if(!p) return NULL;
    8965          75 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Layer3D);
    8966          75 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    8967             : 
    8968             :         /*default field values*/
    8969          75 :         p->size.x = FLT2FIX(-1);
    8970          75 :         p->size.y = FLT2FIX(-1);
    8971          75 :         return (GF_Node *)p;
    8972             : }
    8973             : 
    8974             : 
    8975             : /*
    8976             :         Layout Node deletion
    8977             : */
    8978             : 
    8979         230 : static void Layout_Del(GF_Node *node)
    8980             : {
    8981             :         M_Layout *p = (M_Layout *) node;
    8982         230 :         gf_sg_mfstring_del(p->justify);
    8983         230 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
    8984         230 :         gf_node_free((GF_Node *) p);
    8985         230 : }
    8986             : 
    8987             : static const u16 Layout_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    8988             : static const u16 Layout_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    8989             : static const u16 Layout_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
    8990             : static const u16 Layout_Dyn2All[] = { 4, 9, 13};
    8991             : 
    8992             : static u32 Layout_get_field_count(GF_Node *node, u8 IndexMode)
    8993             : {
    8994             :         switch(IndexMode) {
    8995             :         case GF_SG_FIELD_CODING_IN:
    8996             :                 return 15;
    8997             :         case GF_SG_FIELD_CODING_DEF:
    8998             :                 return 13;
    8999             :         case GF_SG_FIELD_CODING_OUT:
    9000             :                 return 13;
    9001             :         case GF_SG_FIELD_CODING_DYN:
    9002             :                 return 3;
    9003             :         default:
    9004             :                 return 15;
    9005             :         }
    9006             : }
    9007             : 
    9008             : static GF_Err Layout_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9009             : {
    9010         275 :         switch(IndexMode) {
    9011           0 :         case GF_SG_FIELD_CODING_IN:
    9012           0 :                 *allField = Layout_In2All[inField];
    9013             :                 return GF_OK;
    9014         260 :         case GF_SG_FIELD_CODING_DEF:
    9015         260 :                 *allField = Layout_Def2All[inField];
    9016             :                 return GF_OK;
    9017           0 :         case GF_SG_FIELD_CODING_OUT:
    9018           0 :                 *allField = Layout_Out2All[inField];
    9019             :                 return GF_OK;
    9020           0 :         case GF_SG_FIELD_CODING_DYN:
    9021           0 :                 *allField = Layout_Dyn2All[inField];
    9022             :                 return GF_OK;
    9023             :         default:
    9024             :                 return GF_BAD_PARAM;
    9025             :         }
    9026             : }
    9027        1831 : static GF_Err Layout_get_field(GF_Node *node, GF_FieldInfo *info)
    9028             : {
    9029        1831 :         switch (info->fieldIndex) {
    9030          17 :         case 0:
    9031          17 :                 info->name = "addChildren";
    9032          17 :                 info->eventType = GF_SG_EVENT_IN;
    9033          17 :                 info->on_event_in = ((M_Layout *)node)->on_addChildren;
    9034          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    9035          17 :                 info->NDTtype = NDT_SF2DNode;
    9036          17 :                 info->far_ptr = & ((M_Layout *)node)->addChildren;
    9037          17 :                 return GF_OK;
    9038          17 :         case 1:
    9039          17 :                 info->name = "removeChildren";
    9040          17 :                 info->eventType = GF_SG_EVENT_IN;
    9041          17 :                 info->on_event_in = ((M_Layout *)node)->on_removeChildren;
    9042          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
    9043          17 :                 info->NDTtype = NDT_SF2DNode;
    9044          17 :                 info->far_ptr = & ((M_Layout *)node)->removeChildren;
    9045          17 :                 return GF_OK;
    9046         201 :         case 2:
    9047         201 :                 info->name = "children";
    9048         201 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9049         201 :                 info->fieldType = GF_SG_VRML_MFNODE;
    9050         201 :                 info->NDTtype = NDT_SF2DNode;
    9051         201 :                 info->far_ptr = & ((M_Layout *)node)->children;
    9052         201 :                 return GF_OK;
    9053         169 :         case 3:
    9054         169 :                 info->name = "wrap";
    9055         169 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9056         169 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9057         169 :                 info->far_ptr = & ((M_Layout *) node)->wrap;
    9058         169 :                 return GF_OK;
    9059         236 :         case 4:
    9060         236 :                 info->name = "size";
    9061         236 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9062         236 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
    9063         236 :                 info->far_ptr = & ((M_Layout *) node)->size;
    9064         236 :                 return GF_OK;
    9065         131 :         case 5:
    9066         131 :                 info->name = "horizontal";
    9067         131 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9068         131 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9069         131 :                 info->far_ptr = & ((M_Layout *) node)->horizontal;
    9070         131 :                 return GF_OK;
    9071         242 :         case 6:
    9072         242 :                 info->name = "justify";
    9073         242 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9074         242 :                 info->fieldType = GF_SG_VRML_MFSTRING;
    9075         242 :                 info->far_ptr = & ((M_Layout *) node)->justify;
    9076         242 :                 return GF_OK;
    9077         126 :         case 7:
    9078         126 :                 info->name = "leftToRight";
    9079         126 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9080         126 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9081         126 :                 info->far_ptr = & ((M_Layout *) node)->leftToRight;
    9082         126 :                 return GF_OK;
    9083         123 :         case 8:
    9084         123 :                 info->name = "topToBottom";
    9085         123 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9086         123 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9087         123 :                 info->far_ptr = & ((M_Layout *) node)->topToBottom;
    9088         123 :                 return GF_OK;
    9089         133 :         case 9:
    9090         133 :                 info->name = "spacing";
    9091         133 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9092         133 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9093         133 :                 info->far_ptr = & ((M_Layout *) node)->spacing;
    9094         133 :                 return GF_OK;
    9095          85 :         case 10:
    9096          85 :                 info->name = "smoothScroll";
    9097          85 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9098          85 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9099          85 :                 info->far_ptr = & ((M_Layout *) node)->smoothScroll;
    9100          85 :                 return GF_OK;
    9101          85 :         case 11:
    9102          85 :                 info->name = "loop";
    9103          85 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9104          85 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9105          85 :                 info->far_ptr = & ((M_Layout *) node)->loop;
    9106          85 :                 return GF_OK;
    9107          86 :         case 12:
    9108          86 :                 info->name = "scrollVertical";
    9109          86 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9110          86 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9111          86 :                 info->far_ptr = & ((M_Layout *) node)->scrollVertical;
    9112          86 :                 return GF_OK;
    9113         100 :         case 13:
    9114         100 :                 info->name = "scrollRate";
    9115         100 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9116         100 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9117         100 :                 info->far_ptr = & ((M_Layout *) node)->scrollRate;
    9118         100 :                 return GF_OK;
    9119          80 :         case 14:
    9120          80 :                 info->name = "scrollMode";
    9121          80 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9122          80 :                 info->fieldType = GF_SG_VRML_SFINT32;
    9123          80 :                 info->far_ptr = & ((M_Layout *) node)->scrollMode;
    9124          80 :                 return GF_OK;
    9125             :         default:
    9126             :                 return GF_BAD_PARAM;
    9127             :         }
    9128             : }
    9129             : 
    9130             : 
    9131         903 : static s32 Layout_get_field_index_by_name(char *name)
    9132             : {
    9133         903 :         if (!strcmp("addChildren", name)) return 0;
    9134         902 :         if (!strcmp("removeChildren", name)) return 1;
    9135         901 :         if (!strcmp("children", name)) return 2;
    9136         736 :         if (!strcmp("wrap", name)) return 3;
    9137         638 :         if (!strcmp("size", name)) return 4;
    9138         473 :         if (!strcmp("horizontal", name)) return 5;
    9139         413 :         if (!strcmp("justify", name)) return 6;
    9140         244 :         if (!strcmp("leftToRight", name)) return 7;
    9141         189 :         if (!strcmp("topToBottom", name)) return 8;
    9142         137 :         if (!strcmp("spacing", name)) return 9;
    9143          75 :         if (!strcmp("smoothScroll", name)) return 10;
    9144          61 :         if (!strcmp("loop", name)) return 11;
    9145          47 :         if (!strcmp("scrollVertical", name)) return 12;
    9146          35 :         if (!strcmp("scrollRate", name)) return 13;
    9147           9 :         if (!strcmp("scrollMode", name)) return 14;
    9148           0 :         return -1;
    9149             : }
    9150             : static Bool Layout_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9151             : {
    9152          15 :         switch (FieldIndex) {
    9153           1 :         case 4:
    9154           1 :                 *AType = 12;
    9155           1 :                 *QType = 12;
    9156           1 :                 *b_min = FLT2FIX(0);
    9157           1 :                 *b_max = FIX_MAX;
    9158             :                 return 1;
    9159           1 :         case 9:
    9160           1 :                 *AType = 7;
    9161           1 :                 *QType = 0;
    9162           1 :                 *b_min = FLT2FIX(0);
    9163           1 :                 *b_max = FIX_MAX;
    9164             :                 return 1;
    9165           1 :         case 13:
    9166           1 :                 *AType = 7;
    9167           1 :                 *QType = 0;
    9168           1 :                 *b_min = FIX_MIN;
    9169           1 :                 *b_max = FIX_MAX;
    9170             :                 return 1;
    9171           1 :         case 14:
    9172           1 :                 *AType = 0;
    9173           1 :                 *QType = 13;
    9174           1 :                 *QT13_bits = 2;
    9175           1 :                 *b_min = FLT2FIX(-1);
    9176           1 :                 *b_max = FLT2FIX(1);
    9177             :                 return 1;
    9178             :         default:
    9179             :                 return 0;
    9180             :         }
    9181             : }
    9182             : 
    9183             : 
    9184             : 
    9185         230 : GF_Node *Layout_Create()
    9186             : {
    9187             :         M_Layout *p;
    9188         230 :         GF_SAFEALLOC(p, M_Layout);
    9189         230 :         if(!p) return NULL;
    9190         230 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Layout);
    9191         230 :         gf_sg_vrml_parent_setup((GF_Node *) p);
    9192             : 
    9193             :         /*default field values*/
    9194         230 :         p->size.x = FLT2FIX(-1);
    9195         230 :         p->size.y = FLT2FIX(-1);
    9196         230 :         p->horizontal = 1;
    9197         230 :         p->justify.vals = (char**)gf_malloc(sizeof(SFString)*1);
    9198         230 :         p->justify.count = 1;
    9199         230 :         p->justify.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
    9200         230 :         strcpy(p->justify.vals[0], "BEGIN");
    9201         230 :         p->leftToRight = 1;
    9202         230 :         p->topToBottom = 1;
    9203         230 :         p->spacing = FLT2FIX(1);
    9204         230 :         p->scrollVertical = 1;
    9205         230 :         p->scrollRate = FLT2FIX(0);
    9206         230 :         p->scrollMode = 0;
    9207         230 :         return (GF_Node *)p;
    9208             : }
    9209             : 
    9210             : 
    9211             : /*
    9212             :         LineProperties Node deletion
    9213             : */
    9214             : 
    9215             : static void LineProperties_Del(GF_Node *node)
    9216             : {
    9217             :         M_LineProperties *p = (M_LineProperties *) node;
    9218        1140 :         gf_node_free((GF_Node *) p);
    9219             : }
    9220             : 
    9221             : static const u16 LineProperties_Def2All[] = { 0, 1, 2};
    9222             : static const u16 LineProperties_In2All[] = { 0, 1, 2};
    9223             : static const u16 LineProperties_Out2All[] = { 0, 1, 2};
    9224             : static const u16 LineProperties_Dyn2All[] = { 0, 2};
    9225             : 
    9226             : static u32 LineProperties_get_field_count(GF_Node *node, u8 IndexMode)
    9227             : {
    9228        1562 :         switch(IndexMode) {
    9229             :         case GF_SG_FIELD_CODING_IN:
    9230             :                 return 3;
    9231             :         case GF_SG_FIELD_CODING_DEF:
    9232             :                 return 3;
    9233             :         case GF_SG_FIELD_CODING_OUT:
    9234             :                 return 3;
    9235           1 :         case GF_SG_FIELD_CODING_DYN:
    9236             :                 return 2;
    9237             :         default:
    9238             :                 return 3;
    9239             :         }
    9240             : }
    9241             : 
    9242             : static GF_Err LineProperties_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9243             : {
    9244         749 :         switch(IndexMode) {
    9245           0 :         case GF_SG_FIELD_CODING_IN:
    9246           0 :                 *allField = LineProperties_In2All[inField];
    9247             :                 return GF_OK;
    9248         746 :         case GF_SG_FIELD_CODING_DEF:
    9249         746 :                 *allField = LineProperties_Def2All[inField];
    9250             :                 return GF_OK;
    9251           0 :         case GF_SG_FIELD_CODING_OUT:
    9252           0 :                 *allField = LineProperties_Out2All[inField];
    9253             :                 return GF_OK;
    9254           0 :         case GF_SG_FIELD_CODING_DYN:
    9255           0 :                 *allField = LineProperties_Dyn2All[inField];
    9256             :                 return GF_OK;
    9257             :         default:
    9258             :                 return GF_BAD_PARAM;
    9259             :         }
    9260             : }
    9261             : static GF_Err LineProperties_get_field(GF_Node *node, GF_FieldInfo *info)
    9262             : {
    9263        6611 :         switch (info->fieldIndex) {
    9264        2230 :         case 0:
    9265        2230 :                 info->name = "lineColor";
    9266        2230 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9267        2230 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9268        2230 :                 info->far_ptr = & ((M_LineProperties *) node)->lineColor;
    9269             :                 return GF_OK;
    9270        1922 :         case 1:
    9271        1922 :                 info->name = "lineStyle";
    9272        1922 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9273        1922 :                 info->fieldType = GF_SG_VRML_SFINT32;
    9274        1922 :                 info->far_ptr = & ((M_LineProperties *) node)->lineStyle;
    9275             :                 return GF_OK;
    9276        2459 :         case 2:
    9277        2459 :                 info->name = "width";
    9278        2459 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9279        2459 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9280        2459 :                 info->far_ptr = & ((M_LineProperties *) node)->width;
    9281             :                 return GF_OK;
    9282             :         default:
    9283             :                 return GF_BAD_PARAM;
    9284             :         }
    9285             : }
    9286             : 
    9287             : 
    9288         389 : static s32 LineProperties_get_field_index_by_name(char *name)
    9289             : {
    9290         389 :         if (!strcmp("lineColor", name)) return 0;
    9291         234 :         if (!strcmp("lineStyle", name)) return 1;
    9292         227 :         if (!strcmp("width", name)) return 2;
    9293           0 :         return -1;
    9294             : }
    9295             : static Bool LineProperties_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9296             : {
    9297           9 :         switch (FieldIndex) {
    9298           4 :         case 0:
    9299           4 :                 *AType = 4;
    9300           4 :                 *QType = 4;
    9301           4 :                 *b_min = FLT2FIX(0);
    9302           4 :                 *b_max = FLT2FIX(1);
    9303             :                 return 1;
    9304           1 :         case 1:
    9305           1 :                 *AType = 0;
    9306           1 :                 *QType = 13;
    9307           1 :                 *QT13_bits = 3;
    9308           1 :                 *b_min = FLT2FIX(0);
    9309           1 :                 *b_max = FLT2FIX(5);
    9310             :                 return 1;
    9311           4 :         case 2:
    9312           4 :                 *AType = 7;
    9313           4 :                 *QType = 12;
    9314           4 :                 *b_min = FLT2FIX(0);
    9315           4 :                 *b_max = FIX_MAX;
    9316             :                 return 1;
    9317             :         default:
    9318             :                 return 0;
    9319             :         }
    9320             : }
    9321             : 
    9322             : 
    9323             : 
    9324        1140 : GF_Node *LineProperties_Create()
    9325             : {
    9326             :         M_LineProperties *p;
    9327        1140 :         GF_SAFEALLOC(p, M_LineProperties);
    9328        1140 :         if(!p) return NULL;
    9329        1140 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_LineProperties);
    9330             : 
    9331             :         /*default field values*/
    9332        1140 :         p->lineColor.red = FLT2FIX(0);
    9333        1140 :         p->lineColor.green = FLT2FIX(0);
    9334        1140 :         p->lineColor.blue = FLT2FIX(0);
    9335        1140 :         p->lineStyle = 0;
    9336        1140 :         p->width = FLT2FIX(1);
    9337        1140 :         return (GF_Node *)p;
    9338             : }
    9339             : 
    9340             : 
    9341             : /*
    9342             :         ListeningPoint Node deletion
    9343             : */
    9344             : 
    9345             : static void ListeningPoint_Del(GF_Node *node)
    9346             : {
    9347             :         M_ListeningPoint *p = (M_ListeningPoint *) node;
    9348           1 :         gf_sg_sfstring_del(p->description);
    9349           1 :         gf_node_free((GF_Node *) p);
    9350             : }
    9351             : 
    9352             : static const u16 ListeningPoint_Def2All[] = { 1, 2, 3, 4};
    9353             : static const u16 ListeningPoint_In2All[] = { 0, 1, 2, 3};
    9354             : static const u16 ListeningPoint_Out2All[] = { 1, 2, 3, 5, 6};
    9355             : static const u16 ListeningPoint_Dyn2All[] = { 2, 3};
    9356             : 
    9357             : static u32 ListeningPoint_get_field_count(GF_Node *node, u8 IndexMode)
    9358             : {
    9359             :         switch(IndexMode) {
    9360             :         case GF_SG_FIELD_CODING_IN:
    9361             :                 return 4;
    9362             :         case GF_SG_FIELD_CODING_DEF:
    9363             :                 return 4;
    9364             :         case GF_SG_FIELD_CODING_OUT:
    9365             :                 return 5;
    9366             :         case GF_SG_FIELD_CODING_DYN:
    9367             :                 return 2;
    9368             :         default:
    9369             :                 return 7;
    9370             :         }
    9371             : }
    9372             : 
    9373             : static GF_Err ListeningPoint_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9374             : {
    9375           7 :         switch(IndexMode) {
    9376           0 :         case GF_SG_FIELD_CODING_IN:
    9377           0 :                 *allField = ListeningPoint_In2All[inField];
    9378             :                 return GF_OK;
    9379           0 :         case GF_SG_FIELD_CODING_DEF:
    9380           0 :                 *allField = ListeningPoint_Def2All[inField];
    9381             :                 return GF_OK;
    9382           0 :         case GF_SG_FIELD_CODING_OUT:
    9383           0 :                 *allField = ListeningPoint_Out2All[inField];
    9384             :                 return GF_OK;
    9385           0 :         case GF_SG_FIELD_CODING_DYN:
    9386           0 :                 *allField = ListeningPoint_Dyn2All[inField];
    9387             :                 return GF_OK;
    9388             :         default:
    9389             :                 return GF_BAD_PARAM;
    9390             :         }
    9391             : }
    9392          14 : static GF_Err ListeningPoint_get_field(GF_Node *node, GF_FieldInfo *info)
    9393             : {
    9394          14 :         switch (info->fieldIndex) {
    9395           2 :         case 0:
    9396           2 :                 info->name = "set_bind";
    9397           2 :                 info->eventType = GF_SG_EVENT_IN;
    9398           2 :                 info->on_event_in = ((M_ListeningPoint *)node)->on_set_bind;
    9399           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9400           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->set_bind;
    9401           2 :                 return GF_OK;
    9402           2 :         case 1:
    9403           2 :                 info->name = "jump";
    9404           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9405           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9406           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->jump;
    9407           2 :                 return GF_OK;
    9408           2 :         case 2:
    9409           2 :                 info->name = "orientation";
    9410           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9411           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
    9412           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->orientation;
    9413           2 :                 return GF_OK;
    9414           2 :         case 3:
    9415           2 :                 info->name = "position";
    9416           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9417           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
    9418           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->position;
    9419           2 :                 return GF_OK;
    9420           2 :         case 4:
    9421           2 :                 info->name = "description";
    9422           2 :                 info->eventType = GF_SG_EVENT_FIELD;
    9423           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
    9424           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->description;
    9425           2 :                 return GF_OK;
    9426           2 :         case 5:
    9427           2 :                 info->name = "bindTime";
    9428           2 :                 info->eventType = GF_SG_EVENT_OUT;
    9429           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9430           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->bindTime;
    9431           2 :                 return GF_OK;
    9432           2 :         case 6:
    9433           2 :                 info->name = "isBound";
    9434           2 :                 info->eventType = GF_SG_EVENT_OUT;
    9435           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9436           2 :                 info->far_ptr = & ((M_ListeningPoint *) node)->isBound;
    9437           2 :                 return GF_OK;
    9438             :         default:
    9439             :                 return GF_BAD_PARAM;
    9440             :         }
    9441             : }
    9442             : 
    9443             : 
    9444           7 : static s32 ListeningPoint_get_field_index_by_name(char *name)
    9445             : {
    9446           7 :         if (!strcmp("set_bind", name)) return 0;
    9447           6 :         if (!strcmp("jump", name)) return 1;
    9448           5 :         if (!strcmp("orientation", name)) return 2;
    9449           4 :         if (!strcmp("position", name)) return 3;
    9450           3 :         if (!strcmp("description", name)) return 4;
    9451           2 :         if (!strcmp("bindTime", name)) return 5;
    9452           1 :         if (!strcmp("isBound", name)) return 6;
    9453           0 :         return -1;
    9454             : }
    9455             : static Bool ListeningPoint_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9456             : {
    9457           7 :         switch (FieldIndex) {
    9458           1 :         case 2:
    9459           1 :                 *AType = 10;
    9460           1 :                 *QType = 10;
    9461             :                 return 1;
    9462           1 :         case 3:
    9463           1 :                 *AType = 1;
    9464           1 :                 *QType = 1;
    9465           1 :                 *b_min = FIX_MIN;
    9466           1 :                 *b_max = FIX_MAX;
    9467             :                 return 1;
    9468             :         default:
    9469             :                 return 0;
    9470             :         }
    9471             : }
    9472             : 
    9473             : 
    9474             : 
    9475           1 : GF_Node *ListeningPoint_Create()
    9476             : {
    9477             :         M_ListeningPoint *p;
    9478           1 :         GF_SAFEALLOC(p, M_ListeningPoint);
    9479           1 :         if(!p) return NULL;
    9480           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ListeningPoint);
    9481             : 
    9482             :         /*default field values*/
    9483           1 :         p->jump = 1;
    9484           1 :         p->orientation.x = FLT2FIX(0);
    9485           1 :         p->orientation.y = FLT2FIX(0);
    9486           1 :         p->orientation.z = FLT2FIX(1);
    9487           1 :         p->orientation.q = FLT2FIX(0);
    9488           1 :         p->position.x = FLT2FIX(0);
    9489           1 :         p->position.y = FLT2FIX(0);
    9490           1 :         p->position.z = FLT2FIX(10);
    9491           1 :         return (GF_Node *)p;
    9492             : }
    9493             : 
    9494             : 
    9495             : /*
    9496             :         Material Node deletion
    9497             : */
    9498             : 
    9499             : static void Material_Del(GF_Node *node)
    9500             : {
    9501             :         M_Material *p = (M_Material *) node;
    9502         135 :         gf_node_free((GF_Node *) p);
    9503             : }
    9504             : 
    9505             : static const u16 Material_Def2All[] = { 0, 1, 2, 3, 4, 5};
    9506             : static const u16 Material_In2All[] = { 0, 1, 2, 3, 4, 5};
    9507             : static const u16 Material_Out2All[] = { 0, 1, 2, 3, 4, 5};
    9508             : static const u16 Material_Dyn2All[] = { 0, 1, 2, 3, 4, 5};
    9509             : 
    9510             : static u32 Material_get_field_count(GF_Node *node, u8 IndexMode)
    9511             : {
    9512             :         switch(IndexMode) {
    9513             :         case GF_SG_FIELD_CODING_IN:
    9514             :                 return 6;
    9515             :         case GF_SG_FIELD_CODING_DEF:
    9516             :                 return 6;
    9517             :         case GF_SG_FIELD_CODING_OUT:
    9518             :                 return 6;
    9519             :         case GF_SG_FIELD_CODING_DYN:
    9520             :                 return 6;
    9521             :         default:
    9522             :                 return 6;
    9523             :         }
    9524             : }
    9525             : 
    9526             : static GF_Err Material_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9527             : {
    9528         117 :         switch(IndexMode) {
    9529           0 :         case GF_SG_FIELD_CODING_IN:
    9530           0 :                 *allField = Material_In2All[inField];
    9531             :                 return GF_OK;
    9532         111 :         case GF_SG_FIELD_CODING_DEF:
    9533         111 :                 *allField = Material_Def2All[inField];
    9534             :                 return GF_OK;
    9535           0 :         case GF_SG_FIELD_CODING_OUT:
    9536           0 :                 *allField = Material_Out2All[inField];
    9537             :                 return GF_OK;
    9538           0 :         case GF_SG_FIELD_CODING_DYN:
    9539           0 :                 *allField = Material_Dyn2All[inField];
    9540             :                 return GF_OK;
    9541             :         default:
    9542             :                 return GF_BAD_PARAM;
    9543             :         }
    9544             : }
    9545        7128 : static GF_Err Material_get_field(GF_Node *node, GF_FieldInfo *info)
    9546             : {
    9547        7128 :         switch (info->fieldIndex) {
    9548        1160 :         case 0:
    9549        1160 :                 info->name = "ambientIntensity";
    9550        1160 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9551        1160 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9552        1160 :                 info->far_ptr = & ((M_Material *) node)->ambientIntensity;
    9553        1160 :                 return GF_OK;
    9554        1308 :         case 1:
    9555        1308 :                 info->name = "diffuseColor";
    9556        1308 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9557        1308 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9558        1308 :                 info->far_ptr = & ((M_Material *) node)->diffuseColor;
    9559        1308 :                 return GF_OK;
    9560        1163 :         case 2:
    9561        1163 :                 info->name = "emissiveColor";
    9562        1163 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9563        1163 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9564        1163 :                 info->far_ptr = & ((M_Material *) node)->emissiveColor;
    9565        1163 :                 return GF_OK;
    9566        1165 :         case 3:
    9567        1165 :                 info->name = "shininess";
    9568        1165 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9569        1165 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9570        1165 :                 info->far_ptr = & ((M_Material *) node)->shininess;
    9571        1165 :                 return GF_OK;
    9572        1160 :         case 4:
    9573        1160 :                 info->name = "specularColor";
    9574        1160 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9575        1160 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9576        1160 :                 info->far_ptr = & ((M_Material *) node)->specularColor;
    9577        1160 :                 return GF_OK;
    9578        1172 :         case 5:
    9579        1172 :                 info->name = "transparency";
    9580        1172 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9581        1172 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9582        1172 :                 info->far_ptr = & ((M_Material *) node)->transparency;
    9583        1172 :                 return GF_OK;
    9584             :         default:
    9585             :                 return GF_BAD_PARAM;
    9586             :         }
    9587             : }
    9588             : 
    9589             : 
    9590         119 : static s32 Material_get_field_index_by_name(char *name)
    9591             : {
    9592         119 :         if (!strcmp("ambientIntensity", name)) return 0;
    9593         118 :         if (!strcmp("diffuseColor", name)) return 1;
    9594          19 :         if (!strcmp("emissiveColor", name)) return 2;
    9595          15 :         if (!strcmp("shininess", name)) return 3;
    9596           9 :         if (!strcmp("specularColor", name)) return 4;
    9597           8 :         if (!strcmp("transparency", name)) return 5;
    9598           0 :         return -1;
    9599             : }
    9600          10 : static Bool Material_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9601             : {
    9602          10 :         switch (FieldIndex) {
    9603           1 :         case 0:
    9604           1 :                 *AType = 8;
    9605           1 :                 *QType = 4;
    9606           1 :                 *b_min = FLT2FIX(0);
    9607           1 :                 *b_max = FLT2FIX(1);
    9608             :                 return 1;
    9609           5 :         case 1:
    9610           5 :                 *AType = 4;
    9611           5 :                 *QType = 4;
    9612           5 :                 *b_min = FLT2FIX(0);
    9613           5 :                 *b_max = FLT2FIX(1);
    9614             :                 return 1;
    9615           1 :         case 2:
    9616           1 :                 *AType = 4;
    9617           1 :                 *QType = 4;
    9618           1 :                 *b_min = FLT2FIX(0);
    9619           1 :                 *b_max = FLT2FIX(1);
    9620             :                 return 1;
    9621           1 :         case 3:
    9622           1 :                 *AType = 8;
    9623           1 :                 *QType = 4;
    9624           1 :                 *b_min = FLT2FIX(0);
    9625           1 :                 *b_max = FLT2FIX(1);
    9626             :                 return 1;
    9627           1 :         case 4:
    9628           1 :                 *AType = 4;
    9629           1 :                 *QType = 4;
    9630           1 :                 *b_min = FLT2FIX(0);
    9631           1 :                 *b_max = FLT2FIX(1);
    9632             :                 return 1;
    9633           1 :         case 5:
    9634           1 :                 *AType = 8;
    9635           1 :                 *QType = 4;
    9636           1 :                 *b_min = FLT2FIX(0);
    9637           1 :                 *b_max = FLT2FIX(1);
    9638             :                 return 1;
    9639             :         default:
    9640             :                 return 0;
    9641             :         }
    9642             : }
    9643             : 
    9644             : 
    9645             : 
    9646         135 : GF_Node *Material_Create()
    9647             : {
    9648             :         M_Material *p;
    9649         135 :         GF_SAFEALLOC(p, M_Material);
    9650         135 :         if(!p) return NULL;
    9651         135 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Material);
    9652             : 
    9653             :         /*default field values*/
    9654         135 :         p->ambientIntensity = FLT2FIX(0.2);
    9655         135 :         p->diffuseColor.red = FLT2FIX(0.8);
    9656         135 :         p->diffuseColor.green = FLT2FIX(0.8);
    9657         135 :         p->diffuseColor.blue = FLT2FIX(0.8);
    9658         135 :         p->emissiveColor.red = FLT2FIX(0);
    9659         135 :         p->emissiveColor.green = FLT2FIX(0);
    9660         135 :         p->emissiveColor.blue = FLT2FIX(0);
    9661         135 :         p->shininess = FLT2FIX(0.2);
    9662         135 :         p->specularColor.red = FLT2FIX(0);
    9663         135 :         p->specularColor.green = FLT2FIX(0);
    9664         135 :         p->specularColor.blue = FLT2FIX(0);
    9665         135 :         p->transparency = FLT2FIX(0);
    9666         135 :         return (GF_Node *)p;
    9667             : }
    9668             : 
    9669             : 
    9670             : /*
    9671             :         Material2D Node deletion
    9672             : */
    9673             : 
    9674             : static void Material2D_Del(GF_Node *node)
    9675             : {
    9676             :         M_Material2D *p = (M_Material2D *) node;
    9677        5460 :         gf_node_unregister((GF_Node *) p->lineProps, (GF_Node *) p);
    9678        5460 :         gf_node_free((GF_Node *) p);
    9679             : }
    9680             : 
    9681             : static const u16 Material2D_Def2All[] = { 0, 1, 2, 3};
    9682             : static const u16 Material2D_In2All[] = { 0, 1, 2, 3};
    9683             : static const u16 Material2D_Out2All[] = { 0, 1, 2, 3};
    9684             : static const u16 Material2D_Dyn2All[] = { 0, 3};
    9685             : 
    9686             : static u32 Material2D_get_field_count(GF_Node *node, u8 IndexMode)
    9687             : {
    9688        9991 :         switch(IndexMode) {
    9689             :         case GF_SG_FIELD_CODING_IN:
    9690             :                 return 4;
    9691             :         case GF_SG_FIELD_CODING_DEF:
    9692             :                 return 4;
    9693             :         case GF_SG_FIELD_CODING_OUT:
    9694             :                 return 4;
    9695           1 :         case GF_SG_FIELD_CODING_DYN:
    9696             :                 return 2;
    9697             :         default:
    9698             :                 return 4;
    9699             :         }
    9700             : }
    9701             : 
    9702             : static GF_Err Material2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9703             : {
    9704        6011 :         switch(IndexMode) {
    9705          89 :         case GF_SG_FIELD_CODING_IN:
    9706          89 :                 *allField = Material2D_In2All[inField];
    9707             :                 return GF_OK;
    9708        5918 :         case GF_SG_FIELD_CODING_DEF:
    9709        5918 :                 *allField = Material2D_Def2All[inField];
    9710             :                 return GF_OK;
    9711           0 :         case GF_SG_FIELD_CODING_OUT:
    9712           0 :                 *allField = Material2D_Out2All[inField];
    9713             :                 return GF_OK;
    9714           0 :         case GF_SG_FIELD_CODING_DYN:
    9715           0 :                 *allField = Material2D_Dyn2All[inField];
    9716             :                 return GF_OK;
    9717             :         default:
    9718             :                 return GF_BAD_PARAM;
    9719             :         }
    9720             : }
    9721       48726 : static GF_Err Material2D_get_field(GF_Node *node, GF_FieldInfo *info)
    9722             : {
    9723       48726 :         switch (info->fieldIndex) {
    9724       13546 :         case 0:
    9725       13546 :                 info->name = "emissiveColor";
    9726       13546 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9727       13546 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
    9728       13546 :                 info->far_ptr = & ((M_Material2D *) node)->emissiveColor;
    9729       13546 :                 return GF_OK;
    9730       13398 :         case 1:
    9731       13398 :                 info->name = "filled";
    9732       13398 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9733       13398 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9734       13398 :                 info->far_ptr = & ((M_Material2D *) node)->filled;
    9735       13398 :                 return GF_OK;
    9736       10243 :         case 2:
    9737       10243 :                 info->name = "lineProps";
    9738       10243 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9739       10243 :                 info->fieldType = GF_SG_VRML_SFNODE;
    9740       10243 :                 info->NDTtype = NDT_SFLinePropertiesNode;
    9741       10243 :                 info->far_ptr = & ((M_Material2D *)node)->lineProps;
    9742       10243 :                 return GF_OK;
    9743       11539 :         case 3:
    9744       11539 :                 info->name = "transparency";
    9745       11539 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9746       11539 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9747       11539 :                 info->far_ptr = & ((M_Material2D *) node)->transparency;
    9748       11539 :                 return GF_OK;
    9749             :         default:
    9750             :                 return GF_BAD_PARAM;
    9751             :         }
    9752             : }
    9753             : 
    9754             : 
    9755        2727 : static s32 Material2D_get_field_index_by_name(char *name)
    9756             : {
    9757        2727 :         if (!strcmp("emissiveColor", name)) return 0;
    9758        1691 :         if (!strcmp("filled", name)) return 1;
    9759         692 :         if (!strcmp("lineProps", name)) return 2;
    9760         289 :         if (!strcmp("transparency", name)) return 3;
    9761           0 :         return -1;
    9762             : }
    9763             : static Bool Material2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9764             : {
    9765         223 :         switch (FieldIndex) {
    9766         145 :         case 0:
    9767         145 :                 *AType = 4;
    9768         145 :                 *QType = 4;
    9769         145 :                 *b_min = FLT2FIX(0);
    9770         145 :                 *b_max = FLT2FIX(1);
    9771             :                 return 1;
    9772          76 :         case 3:
    9773          76 :                 *AType = 8;
    9774          76 :                 *QType = 4;
    9775          76 :                 *b_min = FLT2FIX(0);
    9776          76 :                 *b_max = FLT2FIX(1);
    9777             :                 return 1;
    9778             :         default:
    9779             :                 return 0;
    9780             :         }
    9781             : }
    9782             : 
    9783             : 
    9784             : 
    9785        5460 : GF_Node *Material2D_Create()
    9786             : {
    9787             :         M_Material2D *p;
    9788        5460 :         GF_SAFEALLOC(p, M_Material2D);
    9789        5460 :         if(!p) return NULL;
    9790        5460 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Material2D);
    9791             : 
    9792             :         /*default field values*/
    9793        5460 :         p->emissiveColor.red = FLT2FIX(0.8);
    9794        5460 :         p->emissiveColor.green = FLT2FIX(0.8);
    9795        5460 :         p->emissiveColor.blue = FLT2FIX(0.8);
    9796        5460 :         p->transparency = FLT2FIX(0);
    9797        5460 :         return (GF_Node *)p;
    9798             : }
    9799             : 
    9800             : 
    9801             : /*
    9802             :         MovieTexture Node deletion
    9803             : */
    9804             : 
    9805             : static void MovieTexture_Del(GF_Node *node)
    9806             : {
    9807             :         M_MovieTexture *p = (M_MovieTexture *) node;
    9808         321 :         gf_sg_mfurl_del(p->url);
    9809         321 :         gf_node_free((GF_Node *) p);
    9810             : }
    9811             : 
    9812             : static const u16 MovieTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
    9813             : static const u16 MovieTexture_In2All[] = { 0, 1, 2, 3, 4};
    9814             : static const u16 MovieTexture_Out2All[] = { 0, 1, 2, 3, 4, 7, 8};
    9815             : static const u16 MovieTexture_Dyn2All[] = { 1};
    9816             : 
    9817             : static u32 MovieTexture_get_field_count(GF_Node *node, u8 IndexMode)
    9818             : {
    9819             :         switch(IndexMode) {
    9820             :         case GF_SG_FIELD_CODING_IN:
    9821             :                 return 5;
    9822             :         case GF_SG_FIELD_CODING_DEF:
    9823             :                 return 7;
    9824             :         case GF_SG_FIELD_CODING_OUT:
    9825             :                 return 7;
    9826             :         case GF_SG_FIELD_CODING_DYN:
    9827             :                 return 1;
    9828             :         default:
    9829             :                 return 9;
    9830             :         }
    9831             : }
    9832             : 
    9833             : static GF_Err MovieTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9834             : {
    9835         194 :         switch(IndexMode) {
    9836           0 :         case GF_SG_FIELD_CODING_IN:
    9837           0 :                 *allField = MovieTexture_In2All[inField];
    9838             :                 return GF_OK;
    9839         185 :         case GF_SG_FIELD_CODING_DEF:
    9840         185 :                 *allField = MovieTexture_Def2All[inField];
    9841             :                 return GF_OK;
    9842           0 :         case GF_SG_FIELD_CODING_OUT:
    9843           0 :                 *allField = MovieTexture_Out2All[inField];
    9844             :                 return GF_OK;
    9845           0 :         case GF_SG_FIELD_CODING_DYN:
    9846           0 :                 *allField = MovieTexture_Dyn2All[inField];
    9847             :                 return GF_OK;
    9848             :         default:
    9849             :                 return GF_BAD_PARAM;
    9850             :         }
    9851             : }
    9852         786 : static GF_Err MovieTexture_get_field(GF_Node *node, GF_FieldInfo *info)
    9853             : {
    9854         786 :         switch (info->fieldIndex) {
    9855         112 :         case 0:
    9856         112 :                 info->name = "loop";
    9857         112 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9858         112 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9859         112 :                 info->far_ptr = & ((M_MovieTexture *) node)->loop;
    9860         112 :                 return GF_OK;
    9861          82 :         case 1:
    9862          82 :                 info->name = "speed";
    9863          82 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9864          82 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
    9865          82 :                 info->far_ptr = & ((M_MovieTexture *) node)->speed;
    9866          82 :                 return GF_OK;
    9867         144 :         case 2:
    9868         144 :                 info->name = "startTime";
    9869         144 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9870         144 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9871         144 :                 info->far_ptr = & ((M_MovieTexture *) node)->startTime;
    9872         144 :                 return GF_OK;
    9873          93 :         case 3:
    9874          93 :                 info->name = "stopTime";
    9875          93 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9876          93 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9877          93 :                 info->far_ptr = & ((M_MovieTexture *) node)->stopTime;
    9878          93 :                 return GF_OK;
    9879         133 :         case 4:
    9880         133 :                 info->name = "url";
    9881         133 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
    9882         133 :                 info->fieldType = GF_SG_VRML_MFURL;
    9883         133 :                 info->far_ptr = & ((M_MovieTexture *) node)->url;
    9884         133 :                 return GF_OK;
    9885          92 :         case 5:
    9886          92 :                 info->name = "repeatS";
    9887          92 :                 info->eventType = GF_SG_EVENT_FIELD;
    9888          92 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9889          92 :                 info->far_ptr = & ((M_MovieTexture *) node)->repeatS;
    9890          92 :                 return GF_OK;
    9891          92 :         case 6:
    9892          92 :                 info->name = "repeatT";
    9893          92 :                 info->eventType = GF_SG_EVENT_FIELD;
    9894          92 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9895          92 :                 info->far_ptr = & ((M_MovieTexture *) node)->repeatT;
    9896          92 :                 return GF_OK;
    9897          19 :         case 7:
    9898          19 :                 info->name = "duration_changed";
    9899          19 :                 info->eventType = GF_SG_EVENT_OUT;
    9900          19 :                 info->fieldType = GF_SG_VRML_SFTIME;
    9901          19 :                 info->far_ptr = & ((M_MovieTexture *) node)->duration_changed;
    9902          19 :                 return GF_OK;
    9903          19 :         case 8:
    9904          19 :                 info->name = "isActive";
    9905          19 :                 info->eventType = GF_SG_EVENT_OUT;
    9906          19 :                 info->fieldType = GF_SG_VRML_SFBOOL;
    9907          19 :                 info->far_ptr = & ((M_MovieTexture *) node)->isActive;
    9908          19 :                 return GF_OK;
    9909             :         default:
    9910             :                 return GF_BAD_PARAM;
    9911             :         }
    9912             : }
    9913             : 
    9914             : 
    9915         119 : static s32 MovieTexture_get_field_index_by_name(char *name)
    9916             : {
    9917         119 :         if (!strcmp("loop", name)) return 0;
    9918          90 :         if (!strcmp("speed", name)) return 1;
    9919          89 :         if (!strcmp("startTime", name)) return 2;
    9920          71 :         if (!strcmp("stopTime", name)) return 3;
    9921          62 :         if (!strcmp("url", name)) return 4;
    9922          20 :         if (!strcmp("repeatS", name)) return 5;
    9923          11 :         if (!strcmp("repeatT", name)) return 6;
    9924           2 :         if (!strcmp("duration_changed", name)) return 7;
    9925           1 :         if (!strcmp("isActive", name)) return 8;
    9926           0 :         return -1;
    9927             : }
    9928             : static Bool MovieTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
    9929             : {
    9930           9 :         switch (FieldIndex) {
    9931           1 :         case 1:
    9932           1 :                 *AType = 7;
    9933           1 :                 *QType = 0;
    9934           1 :                 *b_min = FIX_MIN;
    9935           1 :                 *b_max = FIX_MAX;
    9936             :                 return 1;
    9937             :         default:
    9938             :                 return 0;
    9939             :         }
    9940             : }
    9941             : 
    9942             : 
    9943             : 
    9944         321 : GF_Node *MovieTexture_Create()
    9945             : {
    9946             :         M_MovieTexture *p;
    9947         321 :         GF_SAFEALLOC(p, M_MovieTexture);
    9948         321 :         if(!p) return NULL;
    9949         321 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MovieTexture);
    9950             : 
    9951             :         /*default field values*/
    9952         321 :         p->speed = FLT2FIX(1.0);
    9953         321 :         p->startTime = 0;
    9954         321 :         p->stopTime = 0;
    9955         321 :         p->repeatS = 1;
    9956         321 :         p->repeatT = 1;
    9957         321 :         return (GF_Node *)p;
    9958             : }
    9959             : 
    9960             : 
    9961             : /*
    9962             :         NavigationInfo Node deletion
    9963             : */
    9964             : 
    9965          93 : static void NavigationInfo_Del(GF_Node *node)
    9966             : {
    9967             :         M_NavigationInfo *p = (M_NavigationInfo *) node;
    9968          93 :         gf_sg_mffloat_del(p->avatarSize);
    9969          93 :         gf_sg_mfstring_del(p->type);
    9970          93 :         gf_node_free((GF_Node *) p);
    9971          93 : }
    9972             : 
    9973             : static const u16 NavigationInfo_Def2All[] = { 1, 2, 3, 4, 5};
    9974             : static const u16 NavigationInfo_In2All[] = { 0, 1, 2, 3, 4, 5};
    9975             : static const u16 NavigationInfo_Out2All[] = { 1, 2, 3, 4, 5, 6};
    9976             : static const u16 NavigationInfo_Dyn2All[] = { 5};
    9977             : 
    9978             : static u32 NavigationInfo_get_field_count(GF_Node *node, u8 IndexMode)
    9979             : {
    9980             :         switch(IndexMode) {
    9981             :         case GF_SG_FIELD_CODING_IN:
    9982             :                 return 6;
    9983             :         case GF_SG_FIELD_CODING_DEF:
    9984             :                 return 5;
    9985             :         case GF_SG_FIELD_CODING_OUT:
    9986             :                 return 6;
    9987             :         case GF_SG_FIELD_CODING_DYN:
    9988             :                 return 1;
    9989             :         default:
    9990             :                 return 7;
    9991             :         }
    9992             : }
    9993             : 
    9994             : static GF_Err NavigationInfo_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
    9995             : {
    9996         137 :         switch(IndexMode) {
    9997           0 :         case GF_SG_FIELD_CODING_IN:
    9998           0 :                 *allField = NavigationInfo_In2All[inField];
    9999             :                 return GF_OK;
   10000         130 :         case GF_SG_FIELD_CODING_DEF:
   10001         130 :                 *allField = NavigationInfo_Def2All[inField];
   10002             :                 return GF_OK;
   10003           0 :         case GF_SG_FIELD_CODING_OUT:
   10004           0 :                 *allField = NavigationInfo_Out2All[inField];
   10005             :                 return GF_OK;
   10006           0 :         case GF_SG_FIELD_CODING_DYN:
   10007           0 :                 *allField = NavigationInfo_Dyn2All[inField];
   10008             :                 return GF_OK;
   10009             :         default:
   10010             :                 return GF_BAD_PARAM;
   10011             :         }
   10012             : }
   10013         509 : static GF_Err NavigationInfo_get_field(GF_Node *node, GF_FieldInfo *info)
   10014             : {
   10015         509 :         switch (info->fieldIndex) {
   10016          17 :         case 0:
   10017          17 :                 info->name = "set_bind";
   10018          17 :                 info->eventType = GF_SG_EVENT_IN;
   10019          17 :                 info->on_event_in = ((M_NavigationInfo *)node)->on_set_bind;
   10020          17 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10021          17 :                 info->far_ptr = & ((M_NavigationInfo *) node)->set_bind;
   10022          17 :                 return GF_OK;
   10023         138 :         case 1:
   10024         138 :                 info->name = "avatarSize";
   10025         138 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10026         138 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10027         138 :                 info->far_ptr = & ((M_NavigationInfo *) node)->avatarSize;
   10028         138 :                 return GF_OK;
   10029          83 :         case 2:
   10030          83 :                 info->name = "headlight";
   10031          83 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10032          83 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10033          83 :                 info->far_ptr = & ((M_NavigationInfo *) node)->headlight;
   10034          83 :                 return GF_OK;
   10035          78 :         case 3:
   10036          78 :                 info->name = "speed";
   10037          78 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10038          78 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10039          78 :                 info->far_ptr = & ((M_NavigationInfo *) node)->speed;
   10040          78 :                 return GF_OK;
   10041          98 :         case 4:
   10042          98 :                 info->name = "type";
   10043          98 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10044          98 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   10045          98 :                 info->far_ptr = & ((M_NavigationInfo *) node)->type;
   10046          98 :                 return GF_OK;
   10047          78 :         case 5:
   10048          78 :                 info->name = "visibilityLimit";
   10049          78 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10050          78 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10051          78 :                 info->far_ptr = & ((M_NavigationInfo *) node)->visibilityLimit;
   10052          78 :                 return GF_OK;
   10053          17 :         case 6:
   10054          17 :                 info->name = "isBound";
   10055          17 :                 info->eventType = GF_SG_EVENT_OUT;
   10056          17 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10057          17 :                 info->far_ptr = & ((M_NavigationInfo *) node)->isBound;
   10058          17 :                 return GF_OK;
   10059             :         default:
   10060             :                 return GF_BAD_PARAM;
   10061             :         }
   10062             : }
   10063             : 
   10064             : 
   10065          45 : static s32 NavigationInfo_get_field_index_by_name(char *name)
   10066             : {
   10067          45 :         if (!strcmp("set_bind", name)) return 0;
   10068          44 :         if (!strcmp("avatarSize", name)) return 1;
   10069          27 :         if (!strcmp("headlight", name)) return 2;
   10070          21 :         if (!strcmp("speed", name)) return 3;
   10071          20 :         if (!strcmp("type", name)) return 4;
   10072           2 :         if (!strcmp("visibilityLimit", name)) return 5;
   10073           1 :         if (!strcmp("isBound", name)) return 6;
   10074           0 :         return -1;
   10075             : }
   10076             : static Bool NavigationInfo_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10077             : {
   10078          31 :         switch (FieldIndex) {
   10079          25 :         case 1:
   10080          25 :                 *AType = 0;
   10081          25 :                 *QType = 11;
   10082          25 :                 *b_min = FLT2FIX(0);
   10083          25 :                 *b_max = FIX_MAX;
   10084             :                 return 1;
   10085           1 :         case 3:
   10086           1 :                 *AType = 0;
   10087           1 :                 *QType = 0;
   10088           1 :                 *b_min = FLT2FIX(0);
   10089           1 :                 *b_max = FIX_MAX;
   10090             :                 return 1;
   10091           1 :         case 5:
   10092           1 :                 *AType = 7;
   10093           1 :                 *QType = 11;
   10094           1 :                 *b_min = FLT2FIX(0);
   10095           1 :                 *b_max = FIX_MAX;
   10096             :                 return 1;
   10097             :         default:
   10098             :                 return 0;
   10099             :         }
   10100             : }
   10101             : 
   10102             : 
   10103             : 
   10104          93 : GF_Node *NavigationInfo_Create()
   10105             : {
   10106             :         M_NavigationInfo *p;
   10107          93 :         GF_SAFEALLOC(p, M_NavigationInfo);
   10108          93 :         if(!p) return NULL;
   10109          93 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NavigationInfo);
   10110             : 
   10111             :         /*default field values*/
   10112          93 :         p->avatarSize.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*3);
   10113          93 :         p->avatarSize.count = 3;
   10114          93 :         p->avatarSize.vals[0] = FLT2FIX(0.25);
   10115          93 :         p->avatarSize.vals[1] = FLT2FIX(1.6);
   10116          93 :         p->avatarSize.vals[2] = FLT2FIX(0.75);
   10117          93 :         p->headlight = 1;
   10118          93 :         p->speed = FLT2FIX(1.0);
   10119          93 :         p->type.vals = (char**)gf_malloc(sizeof(SFString)*2);
   10120          93 :         p->type.count = 2;
   10121          93 :         p->type.vals[0] = (char*)gf_malloc(sizeof(char) * 5);
   10122          93 :         strcpy(p->type.vals[0], "WALK");
   10123          93 :         p->type.vals[1] = (char*)gf_malloc(sizeof(char) * 4);
   10124          93 :         strcpy(p->type.vals[1], "ANY");
   10125          93 :         p->visibilityLimit = FLT2FIX(0.0);
   10126          93 :         return (GF_Node *)p;
   10127             : }
   10128             : 
   10129             : 
   10130             : /*
   10131             :         Normal Node deletion
   10132             : */
   10133             : 
   10134             : static void Normal_Del(GF_Node *node)
   10135             : {
   10136             :         M_Normal *p = (M_Normal *) node;
   10137          66 :         gf_sg_mfvec3f_del(p->vector);
   10138          66 :         gf_node_free((GF_Node *) p);
   10139             : }
   10140             : 
   10141             : static const u16 Normal_Def2All[] = { 0};
   10142             : static const u16 Normal_In2All[] = { 0};
   10143             : static const u16 Normal_Out2All[] = { 0};
   10144             : static const u16 Normal_Dyn2All[] = { 0};
   10145             : 
   10146             : static u32 Normal_get_field_count(GF_Node *node, u8 IndexMode)
   10147             : {
   10148             :         switch(IndexMode) {
   10149             :         case GF_SG_FIELD_CODING_IN:
   10150             :                 return 1;
   10151             :         case GF_SG_FIELD_CODING_DEF:
   10152             :                 return 1;
   10153             :         case GF_SG_FIELD_CODING_OUT:
   10154             :                 return 1;
   10155             :         case GF_SG_FIELD_CODING_DYN:
   10156             :                 return 1;
   10157             :         default:
   10158             :                 return 1;
   10159             :         }
   10160             : }
   10161             : 
   10162             : static GF_Err Normal_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10163             : {
   10164          36 :         switch(IndexMode) {
   10165           0 :         case GF_SG_FIELD_CODING_IN:
   10166           0 :                 *allField = Normal_In2All[inField];
   10167             :                 return GF_OK;
   10168          35 :         case GF_SG_FIELD_CODING_DEF:
   10169          35 :                 *allField = Normal_Def2All[inField];
   10170             :                 return GF_OK;
   10171           0 :         case GF_SG_FIELD_CODING_OUT:
   10172           0 :                 *allField = Normal_Out2All[inField];
   10173             :                 return GF_OK;
   10174           0 :         case GF_SG_FIELD_CODING_DYN:
   10175           0 :                 *allField = Normal_Dyn2All[inField];
   10176             :                 return GF_OK;
   10177             :         default:
   10178             :                 return GF_BAD_PARAM;
   10179             :         }
   10180             : }
   10181             : static GF_Err Normal_get_field(GF_Node *node, GF_FieldInfo *info)
   10182             : {
   10183         131 :         switch (info->fieldIndex) {
   10184         131 :         case 0:
   10185         131 :                 info->name = "vector";
   10186         131 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10187         131 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   10188         131 :                 info->far_ptr = & ((M_Normal *) node)->vector;
   10189             :                 return GF_OK;
   10190             :         default:
   10191             :                 return GF_BAD_PARAM;
   10192             :         }
   10193             : }
   10194             : 
   10195             : 
   10196             : static s32 Normal_get_field_index_by_name(char *name)
   10197             : {
   10198          16 :         if (!strcmp("vector", name)) return 0;
   10199             :         return -1;
   10200             : }
   10201             : static Bool Normal_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10202             : {
   10203         106 :         switch (FieldIndex) {
   10204         106 :         case 0:
   10205         106 :                 *AType = 9;
   10206         106 :                 *QType = 9;
   10207             :                 return 1;
   10208             :         default:
   10209             :                 return 0;
   10210             :         }
   10211             : }
   10212             : 
   10213             : 
   10214             : 
   10215          66 : GF_Node *Normal_Create()
   10216             : {
   10217             :         M_Normal *p;
   10218          66 :         GF_SAFEALLOC(p, M_Normal);
   10219          66 :         if(!p) return NULL;
   10220          66 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Normal);
   10221             : 
   10222             :         /*default field values*/
   10223          66 :         return (GF_Node *)p;
   10224             : }
   10225             : 
   10226             : 
   10227             : /*
   10228             :         NormalInterpolator Node deletion
   10229             : */
   10230             : 
   10231           2 : static void NormalInterpolator_Del(GF_Node *node)
   10232             : {
   10233             :         M_NormalInterpolator *p = (M_NormalInterpolator *) node;
   10234           2 :         gf_sg_mffloat_del(p->key);
   10235           2 :         gf_sg_mfvec3f_del(p->keyValue);
   10236           2 :         gf_sg_mfvec3f_del(p->value_changed);
   10237           2 :         gf_node_free((GF_Node *) p);
   10238           2 : }
   10239             : 
   10240             : static const u16 NormalInterpolator_Def2All[] = { 1, 2};
   10241             : static const u16 NormalInterpolator_In2All[] = { 0, 1, 2};
   10242             : static const u16 NormalInterpolator_Out2All[] = { 1, 2, 3};
   10243             : 
   10244             : static u32 NormalInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   10245             : {
   10246             :         switch(IndexMode) {
   10247             :         case GF_SG_FIELD_CODING_IN:
   10248             :                 return 3;
   10249             :         case GF_SG_FIELD_CODING_DEF:
   10250             :                 return 2;
   10251             :         case GF_SG_FIELD_CODING_OUT:
   10252             :                 return 3;
   10253             :         case GF_SG_FIELD_CODING_DYN:
   10254             :                 return 0;
   10255             :         default:
   10256             :                 return 4;
   10257             :         }
   10258             : }
   10259             : 
   10260             : static GF_Err NormalInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10261             : {
   10262           4 :         switch(IndexMode) {
   10263           0 :         case GF_SG_FIELD_CODING_IN:
   10264           0 :                 *allField = NormalInterpolator_In2All[inField];
   10265             :                 return GF_OK;
   10266           0 :         case GF_SG_FIELD_CODING_DEF:
   10267           0 :                 *allField = NormalInterpolator_Def2All[inField];
   10268             :                 return GF_OK;
   10269           0 :         case GF_SG_FIELD_CODING_OUT:
   10270           0 :                 *allField = NormalInterpolator_Out2All[inField];
   10271             :                 return GF_OK;
   10272             :         default:
   10273             :                 return GF_BAD_PARAM;
   10274             :         }
   10275             : }
   10276          12 : static GF_Err NormalInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   10277             : {
   10278          12 :         switch (info->fieldIndex) {
   10279           4 :         case 0:
   10280           4 :                 info->name = "set_fraction";
   10281           4 :                 info->eventType = GF_SG_EVENT_IN;
   10282           4 :                 info->on_event_in = ((M_NormalInterpolator *)node)->on_set_fraction;
   10283           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10284           4 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->set_fraction;
   10285           4 :                 return GF_OK;
   10286           3 :         case 1:
   10287           3 :                 info->name = "key";
   10288           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10289           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10290           3 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->key;
   10291           3 :                 return GF_OK;
   10292           3 :         case 2:
   10293           3 :                 info->name = "keyValue";
   10294           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10295           3 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   10296           3 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->keyValue;
   10297           3 :                 return GF_OK;
   10298           2 :         case 3:
   10299           2 :                 info->name = "value_changed";
   10300           2 :                 info->eventType = GF_SG_EVENT_OUT;
   10301           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   10302           2 :                 info->far_ptr = & ((M_NormalInterpolator *) node)->value_changed;
   10303           2 :                 return GF_OK;
   10304             :         default:
   10305             :                 return GF_BAD_PARAM;
   10306             :         }
   10307             : }
   10308             : 
   10309             : 
   10310           7 : static s32 NormalInterpolator_get_field_index_by_name(char *name)
   10311             : {
   10312           7 :         if (!strcmp("set_fraction", name)) return 0;
   10313           5 :         if (!strcmp("key", name)) return 1;
   10314           3 :         if (!strcmp("keyValue", name)) return 2;
   10315           1 :         if (!strcmp("value_changed", name)) return 3;
   10316           0 :         return -1;
   10317             : }
   10318             : static Bool NormalInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10319             : {
   10320           4 :         switch (FieldIndex) {
   10321           1 :         case 1:
   10322           1 :                 *AType = 0;
   10323           1 :                 *QType = 8;
   10324           1 :                 *b_min = FLT2FIX(0);
   10325           1 :                 *b_max = FLT2FIX(1);
   10326             :                 return 1;
   10327           1 :         case 2:
   10328           1 :                 *AType = 0;
   10329           1 :                 *QType = 9;
   10330           1 :                 *b_min = FIX_MIN;
   10331           1 :                 *b_max = FIX_MAX;
   10332             :                 return 1;
   10333             :         default:
   10334             :                 return 0;
   10335             :         }
   10336             : }
   10337             : 
   10338             : 
   10339             : 
   10340           2 : GF_Node *NormalInterpolator_Create()
   10341             : {
   10342             :         M_NormalInterpolator *p;
   10343           2 :         GF_SAFEALLOC(p, M_NormalInterpolator);
   10344           2 :         if(!p) return NULL;
   10345           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NormalInterpolator);
   10346             : 
   10347             :         /*default field values*/
   10348           2 :         return (GF_Node *)p;
   10349             : }
   10350             : 
   10351             : 
   10352             : /*
   10353             :         OrderedGroup Node deletion
   10354             : */
   10355             : 
   10356        1525 : static void OrderedGroup_Del(GF_Node *node)
   10357             : {
   10358             :         M_OrderedGroup *p = (M_OrderedGroup *) node;
   10359        1525 :         gf_sg_mffloat_del(p->order);
   10360        1525 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   10361        1525 :         gf_node_free((GF_Node *) p);
   10362        1525 : }
   10363             : 
   10364             : static const u16 OrderedGroup_Def2All[] = { 2, 3};
   10365             : static const u16 OrderedGroup_In2All[] = { 0, 1, 2, 3};
   10366             : static const u16 OrderedGroup_Out2All[] = { 2, 3};
   10367             : 
   10368             : static u32 OrderedGroup_get_field_count(GF_Node *node, u8 IndexMode)
   10369             : {
   10370             :         switch(IndexMode) {
   10371             :         case GF_SG_FIELD_CODING_IN:
   10372             :                 return 4;
   10373             :         case GF_SG_FIELD_CODING_DEF:
   10374             :                 return 2;
   10375             :         case GF_SG_FIELD_CODING_OUT:
   10376             :                 return 2;
   10377             :         case GF_SG_FIELD_CODING_DYN:
   10378             :                 return 0;
   10379             :         default:
   10380             :                 return 4;
   10381             :         }
   10382             : }
   10383             : 
   10384             : static GF_Err OrderedGroup_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10385             : {
   10386         948 :         switch(IndexMode) {
   10387           5 :         case GF_SG_FIELD_CODING_IN:
   10388           5 :                 *allField = OrderedGroup_In2All[inField];
   10389             :                 return GF_OK;
   10390         939 :         case GF_SG_FIELD_CODING_DEF:
   10391         939 :                 *allField = OrderedGroup_Def2All[inField];
   10392             :                 return GF_OK;
   10393           0 :         case GF_SG_FIELD_CODING_OUT:
   10394           0 :                 *allField = OrderedGroup_Out2All[inField];
   10395             :                 return GF_OK;
   10396             :         default:
   10397             :                 return GF_BAD_PARAM;
   10398             :         }
   10399             : }
   10400        2685 : static GF_Err OrderedGroup_get_field(GF_Node *node, GF_FieldInfo *info)
   10401             : {
   10402        2685 :         switch (info->fieldIndex) {
   10403         139 :         case 0:
   10404         139 :                 info->name = "addChildren";
   10405         139 :                 info->eventType = GF_SG_EVENT_IN;
   10406         139 :                 info->on_event_in = ((M_OrderedGroup *)node)->on_addChildren;
   10407         139 :                 info->fieldType = GF_SG_VRML_MFNODE;
   10408         139 :                 info->NDTtype = NDT_SF3DNode;
   10409         139 :                 info->far_ptr = & ((M_OrderedGroup *)node)->addChildren;
   10410         139 :                 return GF_OK;
   10411         130 :         case 1:
   10412         130 :                 info->name = "removeChildren";
   10413         130 :                 info->eventType = GF_SG_EVENT_IN;
   10414         130 :                 info->on_event_in = ((M_OrderedGroup *)node)->on_removeChildren;
   10415         130 :                 info->fieldType = GF_SG_VRML_MFNODE;
   10416         130 :                 info->NDTtype = NDT_SF3DNode;
   10417         130 :                 info->far_ptr = & ((M_OrderedGroup *)node)->removeChildren;
   10418         130 :                 return GF_OK;
   10419        1542 :         case 2:
   10420        1542 :                 info->name = "children";
   10421        1542 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10422        1542 :                 info->fieldType = GF_SG_VRML_MFNODE;
   10423        1542 :                 info->NDTtype = NDT_SF3DNode;
   10424        1542 :                 info->far_ptr = & ((M_OrderedGroup *)node)->children;
   10425        1542 :                 return GF_OK;
   10426         874 :         case 3:
   10427         874 :                 info->name = "order";
   10428         874 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10429         874 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10430         874 :                 info->far_ptr = & ((M_OrderedGroup *) node)->order;
   10431         874 :                 return GF_OK;
   10432             :         default:
   10433             :                 return GF_BAD_PARAM;
   10434             :         }
   10435             : }
   10436             : 
   10437             : 
   10438         449 : static s32 OrderedGroup_get_field_index_by_name(char *name)
   10439             : {
   10440         449 :         if (!strcmp("addChildren", name)) return 0;
   10441         448 :         if (!strcmp("removeChildren", name)) return 1;
   10442         447 :         if (!strcmp("children", name)) return 2;
   10443           4 :         if (!strcmp("order", name)) return 3;
   10444           0 :         return -1;
   10445             : }
   10446             : static Bool OrderedGroup_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10447             : {
   10448           4 :         switch (FieldIndex) {
   10449           1 :         case 3:
   10450           1 :                 *AType = 0;
   10451           1 :                 *QType = 3;
   10452           1 :                 *b_min = FLT2FIX(0);
   10453           1 :                 *b_max = FIX_MAX;
   10454             :                 return 1;
   10455             :         default:
   10456             :                 return 0;
   10457             :         }
   10458             : }
   10459             : 
   10460             : 
   10461             : 
   10462        1525 : GF_Node *OrderedGroup_Create()
   10463             : {
   10464             :         M_OrderedGroup *p;
   10465        1525 :         GF_SAFEALLOC(p, M_OrderedGroup);
   10466        1525 :         if(!p) return NULL;
   10467        1525 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_OrderedGroup);
   10468        1525 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   10469             : 
   10470             :         /*default field values*/
   10471        1525 :         return (GF_Node *)p;
   10472             : }
   10473             : 
   10474             : 
   10475             : /*
   10476             :         OrientationInterpolator Node deletion
   10477             : */
   10478             : 
   10479          19 : static void OrientationInterpolator_Del(GF_Node *node)
   10480             : {
   10481             :         M_OrientationInterpolator *p = (M_OrientationInterpolator *) node;
   10482          19 :         gf_sg_mffloat_del(p->key);
   10483          19 :         gf_sg_mfrotation_del(p->keyValue);
   10484          19 :         gf_node_free((GF_Node *) p);
   10485          19 : }
   10486             : 
   10487             : static const u16 OrientationInterpolator_Def2All[] = { 1, 2};
   10488             : static const u16 OrientationInterpolator_In2All[] = { 0, 1, 2};
   10489             : static const u16 OrientationInterpolator_Out2All[] = { 1, 2, 3};
   10490             : 
   10491             : static u32 OrientationInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   10492             : {
   10493             :         switch(IndexMode) {
   10494             :         case GF_SG_FIELD_CODING_IN:
   10495             :                 return 3;
   10496             :         case GF_SG_FIELD_CODING_DEF:
   10497             :                 return 2;
   10498             :         case GF_SG_FIELD_CODING_OUT:
   10499             :                 return 3;
   10500             :         case GF_SG_FIELD_CODING_DYN:
   10501             :                 return 0;
   10502             :         default:
   10503             :                 return 4;
   10504             :         }
   10505             : }
   10506             : 
   10507             : static GF_Err OrientationInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10508             : {
   10509           4 :         switch(IndexMode) {
   10510           0 :         case GF_SG_FIELD_CODING_IN:
   10511           0 :                 *allField = OrientationInterpolator_In2All[inField];
   10512             :                 return GF_OK;
   10513           0 :         case GF_SG_FIELD_CODING_DEF:
   10514           0 :                 *allField = OrientationInterpolator_Def2All[inField];
   10515             :                 return GF_OK;
   10516           0 :         case GF_SG_FIELD_CODING_OUT:
   10517           0 :                 *allField = OrientationInterpolator_Out2All[inField];
   10518             :                 return GF_OK;
   10519             :         default:
   10520             :                 return GF_BAD_PARAM;
   10521             :         }
   10522             : }
   10523         116 : static GF_Err OrientationInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   10524             : {
   10525         116 :         switch (info->fieldIndex) {
   10526          37 :         case 0:
   10527          37 :                 info->name = "set_fraction";
   10528          37 :                 info->eventType = GF_SG_EVENT_IN;
   10529          37 :                 info->on_event_in = ((M_OrientationInterpolator *)node)->on_set_fraction;
   10530          37 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   10531          37 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->set_fraction;
   10532          37 :                 return GF_OK;
   10533          20 :         case 1:
   10534          20 :                 info->name = "key";
   10535          20 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10536          20 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   10537          20 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->key;
   10538          20 :                 return GF_OK;
   10539          20 :         case 2:
   10540          20 :                 info->name = "keyValue";
   10541          20 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10542          20 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   10543          20 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->keyValue;
   10544          20 :                 return GF_OK;
   10545          39 :         case 3:
   10546          39 :                 info->name = "value_changed";
   10547          39 :                 info->eventType = GF_SG_EVENT_OUT;
   10548          39 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   10549          39 :                 info->far_ptr = & ((M_OrientationInterpolator *) node)->value_changed;
   10550          39 :                 return GF_OK;
   10551             :         default:
   10552             :                 return GF_BAD_PARAM;
   10553             :         }
   10554             : }
   10555             : 
   10556             : 
   10557          77 : static s32 OrientationInterpolator_get_field_index_by_name(char *name)
   10558             : {
   10559          77 :         if (!strcmp("set_fraction", name)) return 0;
   10560          58 :         if (!strcmp("key", name)) return 1;
   10561          39 :         if (!strcmp("keyValue", name)) return 2;
   10562          20 :         if (!strcmp("value_changed", name)) return 3;
   10563           0 :         return -1;
   10564             : }
   10565             : static Bool OrientationInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10566             : {
   10567           4 :         switch (FieldIndex) {
   10568           1 :         case 1:
   10569           1 :                 *AType = 0;
   10570           1 :                 *QType = 8;
   10571           1 :                 *b_min = FLT2FIX(0);
   10572           1 :                 *b_max = FLT2FIX(1);
   10573             :                 return 1;
   10574           1 :         case 2:
   10575           1 :                 *AType = 0;
   10576           1 :                 *QType = 10;
   10577           1 :                 *b_min = FIX_MIN;
   10578           1 :                 *b_max = FIX_MAX;
   10579             :                 return 1;
   10580             :         default:
   10581             :                 return 0;
   10582             :         }
   10583             : }
   10584             : 
   10585             : 
   10586             : 
   10587          19 : GF_Node *OrientationInterpolator_Create()
   10588             : {
   10589             :         M_OrientationInterpolator *p;
   10590          19 :         GF_SAFEALLOC(p, M_OrientationInterpolator);
   10591          19 :         if(!p) return NULL;
   10592          19 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_OrientationInterpolator);
   10593             : 
   10594             :         /*default field values*/
   10595          19 :         return (GF_Node *)p;
   10596             : }
   10597             : 
   10598             : 
   10599             : /*
   10600             :         PixelTexture Node deletion
   10601             : */
   10602             : 
   10603             : static void PixelTexture_Del(GF_Node *node)
   10604             : {
   10605             :         M_PixelTexture *p = (M_PixelTexture *) node;
   10606          70 :         gf_sg_sfimage_del(p->image);
   10607          70 :         gf_node_free((GF_Node *) p);
   10608             : }
   10609             : 
   10610             : static const u16 PixelTexture_Def2All[] = { 0, 1, 2};
   10611             : static const u16 PixelTexture_In2All[] = { 0};
   10612             : static const u16 PixelTexture_Out2All[] = { 0};
   10613             : 
   10614             : static u32 PixelTexture_get_field_count(GF_Node *node, u8 IndexMode)
   10615             : {
   10616             :         switch(IndexMode) {
   10617             :         case GF_SG_FIELD_CODING_IN:
   10618             :                 return 1;
   10619             :         case GF_SG_FIELD_CODING_DEF:
   10620             :                 return 3;
   10621             :         case GF_SG_FIELD_CODING_OUT:
   10622             :                 return 1;
   10623             :         case GF_SG_FIELD_CODING_DYN:
   10624             :                 return 0;
   10625             :         default:
   10626             :                 return 3;
   10627             :         }
   10628             : }
   10629             : 
   10630             : static GF_Err PixelTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10631             : {
   10632          78 :         switch(IndexMode) {
   10633           0 :         case GF_SG_FIELD_CODING_IN:
   10634           0 :                 *allField = PixelTexture_In2All[inField];
   10635             :                 return GF_OK;
   10636          75 :         case GF_SG_FIELD_CODING_DEF:
   10637          75 :                 *allField = PixelTexture_Def2All[inField];
   10638             :                 return GF_OK;
   10639           0 :         case GF_SG_FIELD_CODING_OUT:
   10640           0 :                 *allField = PixelTexture_Out2All[inField];
   10641             :                 return GF_OK;
   10642             :         default:
   10643             :                 return GF_BAD_PARAM;
   10644             :         }
   10645             : }
   10646             : static GF_Err PixelTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   10647             : {
   10648         279 :         switch (info->fieldIndex) {
   10649         135 :         case 0:
   10650         135 :                 info->name = "image";
   10651         135 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10652         135 :                 info->fieldType = GF_SG_VRML_SFIMAGE;
   10653         135 :                 info->far_ptr = & ((M_PixelTexture *) node)->image;
   10654             :                 return GF_OK;
   10655          72 :         case 1:
   10656          72 :                 info->name = "repeatS";
   10657          72 :                 info->eventType = GF_SG_EVENT_FIELD;
   10658          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10659          72 :                 info->far_ptr = & ((M_PixelTexture *) node)->repeatS;
   10660             :                 return GF_OK;
   10661          72 :         case 2:
   10662          72 :                 info->name = "repeatT";
   10663          72 :                 info->eventType = GF_SG_EVENT_FIELD;
   10664          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10665          72 :                 info->far_ptr = & ((M_PixelTexture *) node)->repeatT;
   10666             :                 return GF_OK;
   10667             :         default:
   10668             :                 return GF_BAD_PARAM;
   10669             :         }
   10670             : }
   10671             : 
   10672             : 
   10673          22 : static s32 PixelTexture_get_field_index_by_name(char *name)
   10674             : {
   10675          22 :         if (!strcmp("image", name)) return 0;
   10676           2 :         if (!strcmp("repeatS", name)) return 1;
   10677           1 :         if (!strcmp("repeatT", name)) return 2;
   10678           0 :         return -1;
   10679             : }
   10680             : static Bool PixelTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10681             : {
   10682           3 :         switch (FieldIndex) {
   10683           1 :         case 0:
   10684           1 :                 *AType = 0;
   10685           1 :                 *QType = 0;
   10686             :                 return 1;
   10687             :         default:
   10688             :                 return 0;
   10689             :         }
   10690             : }
   10691             : 
   10692             : 
   10693             : 
   10694          70 : GF_Node *PixelTexture_Create()
   10695             : {
   10696             :         M_PixelTexture *p;
   10697          70 :         GF_SAFEALLOC(p, M_PixelTexture);
   10698          70 :         if(!p) return NULL;
   10699          70 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PixelTexture);
   10700             : 
   10701             :         /*default field values*/
   10702          70 :         p->repeatS = 1;
   10703          70 :         p->repeatT = 1;
   10704          70 :         return (GF_Node *)p;
   10705             : }
   10706             : 
   10707             : 
   10708             : /*
   10709             :         PlaneSensor Node deletion
   10710             : */
   10711             : 
   10712             : static void PlaneSensor_Del(GF_Node *node)
   10713             : {
   10714             :         M_PlaneSensor *p = (M_PlaneSensor *) node;
   10715          67 :         gf_node_free((GF_Node *) p);
   10716             : }
   10717             : 
   10718             : static const u16 PlaneSensor_Def2All[] = { 0, 1, 2, 3, 4};
   10719             : static const u16 PlaneSensor_In2All[] = { 0, 1, 2, 3, 4};
   10720             : static const u16 PlaneSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   10721             : 
   10722             : static u32 PlaneSensor_get_field_count(GF_Node *node, u8 IndexMode)
   10723             : {
   10724             :         switch(IndexMode) {
   10725             :         case GF_SG_FIELD_CODING_IN:
   10726             :                 return 5;
   10727             :         case GF_SG_FIELD_CODING_DEF:
   10728             :                 return 5;
   10729             :         case GF_SG_FIELD_CODING_OUT:
   10730             :                 return 8;
   10731             :         case GF_SG_FIELD_CODING_DYN:
   10732             :                 return 0;
   10733             :         default:
   10734             :                 return 8;
   10735             :         }
   10736             : }
   10737             : 
   10738             : static GF_Err PlaneSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10739             : {
   10740         108 :         switch(IndexMode) {
   10741           0 :         case GF_SG_FIELD_CODING_IN:
   10742           0 :                 *allField = PlaneSensor_In2All[inField];
   10743             :                 return GF_OK;
   10744         100 :         case GF_SG_FIELD_CODING_DEF:
   10745         100 :                 *allField = PlaneSensor_Def2All[inField];
   10746             :                 return GF_OK;
   10747           0 :         case GF_SG_FIELD_CODING_OUT:
   10748           0 :                 *allField = PlaneSensor_Out2All[inField];
   10749             :                 return GF_OK;
   10750             :         default:
   10751             :                 return GF_BAD_PARAM;
   10752             :         }
   10753             : }
   10754         422 : static GF_Err PlaneSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   10755             : {
   10756         422 :         switch (info->fieldIndex) {
   10757          72 :         case 0:
   10758          72 :                 info->name = "autoOffset";
   10759          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10760          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10761          72 :                 info->far_ptr = & ((M_PlaneSensor *) node)->autoOffset;
   10762          72 :                 return GF_OK;
   10763          72 :         case 1:
   10764          72 :                 info->name = "enabled";
   10765          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10766          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10767          72 :                 info->far_ptr = & ((M_PlaneSensor *) node)->enabled;
   10768          72 :                 return GF_OK;
   10769          73 :         case 2:
   10770          73 :                 info->name = "maxPosition";
   10771          73 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10772          73 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10773          73 :                 info->far_ptr = & ((M_PlaneSensor *) node)->maxPosition;
   10774          73 :                 return GF_OK;
   10775          73 :         case 3:
   10776          73 :                 info->name = "minPosition";
   10777          73 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10778          73 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10779          73 :                 info->far_ptr = & ((M_PlaneSensor *) node)->minPosition;
   10780          73 :                 return GF_OK;
   10781          73 :         case 4:
   10782          73 :                 info->name = "offset";
   10783          73 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10784          73 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   10785          73 :                 info->far_ptr = & ((M_PlaneSensor *) node)->offset;
   10786          73 :                 return GF_OK;
   10787          21 :         case 5:
   10788          21 :                 info->name = "isActive";
   10789          21 :                 info->eventType = GF_SG_EVENT_OUT;
   10790          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10791          21 :                 info->far_ptr = & ((M_PlaneSensor *) node)->isActive;
   10792          21 :                 return GF_OK;
   10793          19 :         case 6:
   10794          19 :                 info->name = "trackPoint_changed";
   10795          19 :                 info->eventType = GF_SG_EVENT_OUT;
   10796          19 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   10797          19 :                 info->far_ptr = & ((M_PlaneSensor *) node)->trackPoint_changed;
   10798          19 :                 return GF_OK;
   10799          19 :         case 7:
   10800          19 :                 info->name = "translation_changed";
   10801          19 :                 info->eventType = GF_SG_EVENT_OUT;
   10802          19 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   10803          19 :                 info->far_ptr = & ((M_PlaneSensor *) node)->translation_changed;
   10804          19 :                 return GF_OK;
   10805             :         default:
   10806             :                 return GF_BAD_PARAM;
   10807             :         }
   10808             : }
   10809             : 
   10810             : 
   10811          15 : static s32 PlaneSensor_get_field_index_by_name(char *name)
   10812             : {
   10813          15 :         if (!strcmp("autoOffset", name)) return 0;
   10814          14 :         if (!strcmp("enabled", name)) return 1;
   10815          13 :         if (!strcmp("maxPosition", name)) return 2;
   10816          11 :         if (!strcmp("minPosition", name)) return 3;
   10817           9 :         if (!strcmp("offset", name)) return 4;
   10818           7 :         if (!strcmp("isActive", name)) return 5;
   10819           4 :         if (!strcmp("trackPoint_changed", name)) return 6;
   10820           2 :         if (!strcmp("translation_changed", name)) return 7;
   10821           0 :         return -1;
   10822             : }
   10823             : static Bool PlaneSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10824             : {
   10825           8 :         switch (FieldIndex) {
   10826           1 :         case 2:
   10827           1 :                 *AType = 0;
   10828           1 :                 *QType = 2;
   10829           1 :                 *b_min = FIX_MIN;
   10830           1 :                 *b_max = FIX_MAX;
   10831             :                 return 1;
   10832           1 :         case 3:
   10833           1 :                 *AType = 0;
   10834           1 :                 *QType = 2;
   10835           1 :                 *b_min = FIX_MIN;
   10836           1 :                 *b_max = FIX_MAX;
   10837             :                 return 1;
   10838           1 :         case 4:
   10839           1 :                 *AType = 0;
   10840           1 :                 *QType = 1;
   10841           1 :                 *b_min = FIX_MIN;
   10842           1 :                 *b_max = FIX_MAX;
   10843             :                 return 1;
   10844             :         default:
   10845             :                 return 0;
   10846             :         }
   10847             : }
   10848             : 
   10849             : 
   10850             : 
   10851          67 : GF_Node *PlaneSensor_Create()
   10852             : {
   10853             :         M_PlaneSensor *p;
   10854          67 :         GF_SAFEALLOC(p, M_PlaneSensor);
   10855          67 :         if(!p) return NULL;
   10856          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PlaneSensor);
   10857             : 
   10858             :         /*default field values*/
   10859          67 :         p->autoOffset = 1;
   10860          67 :         p->enabled = 1;
   10861          67 :         p->maxPosition.x = FLT2FIX(-1);
   10862          67 :         p->maxPosition.y = FLT2FIX(-1);
   10863          67 :         p->minPosition.x = FLT2FIX(0);
   10864          67 :         p->minPosition.y = FLT2FIX(0);
   10865          67 :         p->offset.x = FLT2FIX(0);
   10866          67 :         p->offset.y = FLT2FIX(0);
   10867          67 :         p->offset.z = FLT2FIX(0);
   10868          67 :         return (GF_Node *)p;
   10869             : }
   10870             : 
   10871             : 
   10872             : /*
   10873             :         PlaneSensor2D Node deletion
   10874             : */
   10875             : 
   10876             : static void PlaneSensor2D_Del(GF_Node *node)
   10877             : {
   10878             :         M_PlaneSensor2D *p = (M_PlaneSensor2D *) node;
   10879         103 :         gf_node_free((GF_Node *) p);
   10880             : }
   10881             : 
   10882             : static const u16 PlaneSensor2D_Def2All[] = { 0, 1, 2, 3, 4};
   10883             : static const u16 PlaneSensor2D_In2All[] = { 0, 1, 2, 3, 4};
   10884             : static const u16 PlaneSensor2D_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   10885             : 
   10886             : static u32 PlaneSensor2D_get_field_count(GF_Node *node, u8 IndexMode)
   10887             : {
   10888             :         switch(IndexMode) {
   10889             :         case GF_SG_FIELD_CODING_IN:
   10890             :                 return 5;
   10891             :         case GF_SG_FIELD_CODING_DEF:
   10892             :                 return 5;
   10893             :         case GF_SG_FIELD_CODING_OUT:
   10894             :                 return 8;
   10895             :         case GF_SG_FIELD_CODING_DYN:
   10896             :                 return 0;
   10897             :         default:
   10898             :                 return 8;
   10899             :         }
   10900             : }
   10901             : 
   10902             : static GF_Err PlaneSensor2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   10903             : {
   10904         137 :         switch(IndexMode) {
   10905           0 :         case GF_SG_FIELD_CODING_IN:
   10906           0 :                 *allField = PlaneSensor2D_In2All[inField];
   10907             :                 return GF_OK;
   10908         112 :         case GF_SG_FIELD_CODING_DEF:
   10909         112 :                 *allField = PlaneSensor2D_Def2All[inField];
   10910             :                 return GF_OK;
   10911          17 :         case GF_SG_FIELD_CODING_OUT:
   10912          17 :                 *allField = PlaneSensor2D_Out2All[inField];
   10913             :                 return GF_OK;
   10914             :         default:
   10915             :                 return GF_BAD_PARAM;
   10916             :         }
   10917             : }
   10918         591 : static GF_Err PlaneSensor2D_get_field(GF_Node *node, GF_FieldInfo *info)
   10919             : {
   10920         591 :         switch (info->fieldIndex) {
   10921          80 :         case 0:
   10922          80 :                 info->name = "autoOffset";
   10923          80 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10924          80 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10925          80 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->autoOffset;
   10926          80 :                 return GF_OK;
   10927          76 :         case 1:
   10928          76 :                 info->name = "enabled";
   10929          76 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10930          76 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10931          76 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->enabled;
   10932          76 :                 return GF_OK;
   10933         129 :         case 2:
   10934         129 :                 info->name = "maxPosition";
   10935         129 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10936         129 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10937         129 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->maxPosition;
   10938         129 :                 return GF_OK;
   10939         103 :         case 3:
   10940         103 :                 info->name = "minPosition";
   10941         103 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10942         103 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10943         103 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->minPosition;
   10944         103 :                 return GF_OK;
   10945          83 :         case 4:
   10946          83 :                 info->name = "offset";
   10947          83 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   10948          83 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10949          83 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->offset;
   10950          83 :                 return GF_OK;
   10951          33 :         case 5:
   10952          33 :                 info->name = "isActive";
   10953          33 :                 info->eventType = GF_SG_EVENT_OUT;
   10954          33 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   10955          33 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->isActive;
   10956          33 :                 return GF_OK;
   10957          31 :         case 6:
   10958          31 :                 info->name = "trackPoint_changed";
   10959          31 :                 info->eventType = GF_SG_EVENT_OUT;
   10960          31 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10961          31 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->trackPoint_changed;
   10962          31 :                 return GF_OK;
   10963          56 :         case 7:
   10964          56 :                 info->name = "translation_changed";
   10965          56 :                 info->eventType = GF_SG_EVENT_OUT;
   10966          56 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   10967          56 :                 info->far_ptr = & ((M_PlaneSensor2D *) node)->translation_changed;
   10968          56 :                 return GF_OK;
   10969             :         default:
   10970             :                 return GF_BAD_PARAM;
   10971             :         }
   10972             : }
   10973             : 
   10974             : 
   10975         126 : static s32 PlaneSensor2D_get_field_index_by_name(char *name)
   10976             : {
   10977         126 :         if (!strcmp("autoOffset", name)) return 0;
   10978         121 :         if (!strcmp("enabled", name)) return 1;
   10979         120 :         if (!strcmp("maxPosition", name)) return 2;
   10980          77 :         if (!strcmp("minPosition", name)) return 3;
   10981          52 :         if (!strcmp("offset", name)) return 4;
   10982          45 :         if (!strcmp("isActive", name)) return 5;
   10983          36 :         if (!strcmp("trackPoint_changed", name)) return 6;
   10984          28 :         if (!strcmp("translation_changed", name)) return 7;
   10985           0 :         return -1;
   10986             : }
   10987             : static Bool PlaneSensor2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   10988             : {
   10989           8 :         switch (FieldIndex) {
   10990           1 :         case 2:
   10991           1 :                 *AType = 0;
   10992           1 :                 *QType = 2;
   10993           1 :                 *b_min = FIX_MIN;
   10994           1 :                 *b_max = FIX_MAX;
   10995             :                 return 1;
   10996           1 :         case 3:
   10997           1 :                 *AType = 0;
   10998           1 :                 *QType = 2;
   10999           1 :                 *b_min = FIX_MIN;
   11000           1 :                 *b_max = FIX_MAX;
   11001             :                 return 1;
   11002           1 :         case 4:
   11003           1 :                 *AType = 0;
   11004           1 :                 *QType = 12;
   11005           1 :                 *b_min = FIX_MIN;
   11006           1 :                 *b_max = FIX_MAX;
   11007             :                 return 1;
   11008             :         default:
   11009             :                 return 0;
   11010             :         }
   11011             : }
   11012             : 
   11013             : 
   11014             : 
   11015         103 : GF_Node *PlaneSensor2D_Create()
   11016             : {
   11017             :         M_PlaneSensor2D *p;
   11018         103 :         GF_SAFEALLOC(p, M_PlaneSensor2D);
   11019         103 :         if(!p) return NULL;
   11020         103 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PlaneSensor2D);
   11021             : 
   11022             :         /*default field values*/
   11023         103 :         p->autoOffset = 1;
   11024         103 :         p->enabled = 1;
   11025         103 :         p->maxPosition.x = FLT2FIX(0);
   11026         103 :         p->maxPosition.y = FLT2FIX(0);
   11027         103 :         p->minPosition.x = FLT2FIX(0);
   11028         103 :         p->minPosition.y = FLT2FIX(0);
   11029         103 :         p->offset.x = FLT2FIX(0);
   11030         103 :         p->offset.y = FLT2FIX(0);
   11031         103 :         return (GF_Node *)p;
   11032             : }
   11033             : 
   11034             : 
   11035             : /*
   11036             :         PointLight Node deletion
   11037             : */
   11038             : 
   11039             : static void PointLight_Del(GF_Node *node)
   11040             : {
   11041             :         M_PointLight *p = (M_PointLight *) node;
   11042           2 :         gf_node_free((GF_Node *) p);
   11043             : }
   11044             : 
   11045             : static const u16 PointLight_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   11046             : static const u16 PointLight_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   11047             : static const u16 PointLight_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   11048             : static const u16 PointLight_Dyn2All[] = { 0, 1, 2, 3, 4, 6};
   11049             : 
   11050             : static u32 PointLight_get_field_count(GF_Node *node, u8 IndexMode)
   11051             : {
   11052           6 :         switch(IndexMode) {
   11053             :         case GF_SG_FIELD_CODING_IN:
   11054             :                 return 7;
   11055             :         case GF_SG_FIELD_CODING_DEF:
   11056             :                 return 7;
   11057             :         case GF_SG_FIELD_CODING_OUT:
   11058             :                 return 7;
   11059           1 :         case GF_SG_FIELD_CODING_DYN:
   11060             :                 return 6;
   11061             :         default:
   11062             :                 return 7;
   11063             :         }
   11064             : }
   11065             : 
   11066             : static GF_Err PointLight_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11067             : {
   11068           7 :         switch(IndexMode) {
   11069           0 :         case GF_SG_FIELD_CODING_IN:
   11070           0 :                 *allField = PointLight_In2All[inField];
   11071             :                 return GF_OK;
   11072           0 :         case GF_SG_FIELD_CODING_DEF:
   11073           0 :                 *allField = PointLight_Def2All[inField];
   11074             :                 return GF_OK;
   11075           0 :         case GF_SG_FIELD_CODING_OUT:
   11076           0 :                 *allField = PointLight_Out2All[inField];
   11077             :                 return GF_OK;
   11078           0 :         case GF_SG_FIELD_CODING_DYN:
   11079           0 :                 *allField = PointLight_Dyn2All[inField];
   11080             :                 return GF_OK;
   11081             :         default:
   11082             :                 return GF_BAD_PARAM;
   11083             :         }
   11084             : }
   11085          19 : static GF_Err PointLight_get_field(GF_Node *node, GF_FieldInfo *info)
   11086             : {
   11087          19 :         switch (info->fieldIndex) {
   11088           2 :         case 0:
   11089           2 :                 info->name = "ambientIntensity";
   11090           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11091           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11092           2 :                 info->far_ptr = & ((M_PointLight *) node)->ambientIntensity;
   11093           2 :                 return GF_OK;
   11094           5 :         case 1:
   11095           5 :                 info->name = "attenuation";
   11096           5 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11097           5 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11098           5 :                 info->far_ptr = & ((M_PointLight *) node)->attenuation;
   11099           5 :                 return GF_OK;
   11100           3 :         case 2:
   11101           3 :                 info->name = "color";
   11102           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11103           3 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   11104           3 :                 info->far_ptr = & ((M_PointLight *) node)->color;
   11105           3 :                 return GF_OK;
   11106           2 :         case 3:
   11107           2 :                 info->name = "intensity";
   11108           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11109           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11110           2 :                 info->far_ptr = & ((M_PointLight *) node)->intensity;
   11111           2 :                 return GF_OK;
   11112           3 :         case 4:
   11113           3 :                 info->name = "location";
   11114           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11115           3 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11116           3 :                 info->far_ptr = & ((M_PointLight *) node)->location;
   11117           3 :                 return GF_OK;
   11118           2 :         case 5:
   11119           2 :                 info->name = "on";
   11120           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11121           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11122           2 :                 info->far_ptr = & ((M_PointLight *) node)->on;
   11123           2 :                 return GF_OK;
   11124           2 :         case 6:
   11125           2 :                 info->name = "radius";
   11126           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11127           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11128           2 :                 info->far_ptr = & ((M_PointLight *) node)->radius;
   11129           2 :                 return GF_OK;
   11130             :         default:
   11131             :                 return GF_BAD_PARAM;
   11132             :         }
   11133             : }
   11134             : 
   11135             : 
   11136          11 : static s32 PointLight_get_field_index_by_name(char *name)
   11137             : {
   11138          11 :         if (!strcmp("ambientIntensity", name)) return 0;
   11139          10 :         if (!strcmp("attenuation", name)) return 1;
   11140           7 :         if (!strcmp("color", name)) return 2;
   11141           5 :         if (!strcmp("intensity", name)) return 3;
   11142           4 :         if (!strcmp("location", name)) return 4;
   11143           2 :         if (!strcmp("on", name)) return 5;
   11144           1 :         if (!strcmp("radius", name)) return 6;
   11145           0 :         return -1;
   11146             : }
   11147           7 : static Bool PointLight_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11148             : {
   11149           7 :         switch (FieldIndex) {
   11150           1 :         case 0:
   11151           1 :                 *AType = 8;
   11152           1 :                 *QType = 4;
   11153           1 :                 *b_min = FLT2FIX(0);
   11154           1 :                 *b_max = FLT2FIX(1);
   11155             :                 return 1;
   11156           1 :         case 1:
   11157           1 :                 *AType = 1;
   11158           1 :                 *QType = 11;
   11159           1 :                 *b_min = FLT2FIX(0);
   11160           1 :                 *b_max = FIX_MAX;
   11161             :                 return 1;
   11162           1 :         case 2:
   11163           1 :                 *AType = 4;
   11164           1 :                 *QType = 4;
   11165           1 :                 *b_min = FLT2FIX(0);
   11166           1 :                 *b_max = FLT2FIX(1);
   11167             :                 return 1;
   11168           1 :         case 3:
   11169           1 :                 *AType = 8;
   11170           1 :                 *QType = 4;
   11171           1 :                 *b_min = FLT2FIX(0);
   11172           1 :                 *b_max = FLT2FIX(1);
   11173             :                 return 1;
   11174           1 :         case 4:
   11175           1 :                 *AType = 1;
   11176           1 :                 *QType = 1;
   11177           1 :                 *b_min = FIX_MIN;
   11178           1 :                 *b_max = FIX_MAX;
   11179             :                 return 1;
   11180           1 :         case 6:
   11181           1 :                 *AType = 7;
   11182           1 :                 *QType = 11;
   11183           1 :                 *b_min = FLT2FIX(0);
   11184           1 :                 *b_max = FIX_MAX;
   11185             :                 return 1;
   11186             :         default:
   11187             :                 return 0;
   11188             :         }
   11189             : }
   11190             : 
   11191             : 
   11192             : 
   11193           2 : GF_Node *PointLight_Create()
   11194             : {
   11195             :         M_PointLight *p;
   11196           2 :         GF_SAFEALLOC(p, M_PointLight);
   11197           2 :         if(!p) return NULL;
   11198           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointLight);
   11199             : 
   11200             :         /*default field values*/
   11201           2 :         p->ambientIntensity = FLT2FIX(0);
   11202           2 :         p->attenuation.x = FLT2FIX(1);
   11203           2 :         p->attenuation.y = FLT2FIX(0);
   11204           2 :         p->attenuation.z = FLT2FIX(0);
   11205           2 :         p->color.red = FLT2FIX(1);
   11206           2 :         p->color.green = FLT2FIX(1);
   11207           2 :         p->color.blue = FLT2FIX(1);
   11208           2 :         p->intensity = FLT2FIX(1);
   11209           2 :         p->location.x = FLT2FIX(0);
   11210           2 :         p->location.y = FLT2FIX(0);
   11211           2 :         p->location.z = FLT2FIX(0);
   11212           2 :         p->on = 1;
   11213           2 :         p->radius = FLT2FIX(100);
   11214           2 :         return (GF_Node *)p;
   11215             : }
   11216             : 
   11217             : 
   11218             : /*
   11219             :         PointSet Node deletion
   11220             : */
   11221             : 
   11222          67 : static void PointSet_Del(GF_Node *node)
   11223             : {
   11224             :         M_PointSet *p = (M_PointSet *) node;
   11225          67 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   11226          67 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   11227          67 :         gf_node_free((GF_Node *) p);
   11228          67 : }
   11229             : 
   11230             : static const u16 PointSet_Def2All[] = { 0, 1};
   11231             : static const u16 PointSet_In2All[] = { 0, 1};
   11232             : static const u16 PointSet_Out2All[] = { 0, 1};
   11233             : 
   11234             : static u32 PointSet_get_field_count(GF_Node *node, u8 IndexMode)
   11235             : {
   11236          76 :         switch(IndexMode) {
   11237             :         case GF_SG_FIELD_CODING_IN:
   11238             :                 return 2;
   11239             :         case GF_SG_FIELD_CODING_DEF:
   11240             :                 return 2;
   11241             :         case GF_SG_FIELD_CODING_OUT:
   11242             :                 return 2;
   11243           1 :         case GF_SG_FIELD_CODING_DYN:
   11244             :                 return 0;
   11245             :         default:
   11246             :                 return 2;
   11247             :         }
   11248             : }
   11249             : 
   11250             : static GF_Err PointSet_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11251             : {
   11252          57 :         switch(IndexMode) {
   11253           0 :         case GF_SG_FIELD_CODING_IN:
   11254           0 :                 *allField = PointSet_In2All[inField];
   11255             :                 return GF_OK;
   11256          55 :         case GF_SG_FIELD_CODING_DEF:
   11257          55 :                 *allField = PointSet_Def2All[inField];
   11258             :                 return GF_OK;
   11259           0 :         case GF_SG_FIELD_CODING_OUT:
   11260           0 :                 *allField = PointSet_Out2All[inField];
   11261             :                 return GF_OK;
   11262             :         default:
   11263             :                 return GF_BAD_PARAM;
   11264             :         }
   11265             : }
   11266             : static GF_Err PointSet_get_field(GF_Node *node, GF_FieldInfo *info)
   11267             : {
   11268         134 :         switch (info->fieldIndex) {
   11269          37 :         case 0:
   11270          37 :                 info->name = "color";
   11271          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11272          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11273          37 :                 info->NDTtype = NDT_SFColorNode;
   11274          37 :                 info->far_ptr = & ((M_PointSet *)node)->color;
   11275             :                 return GF_OK;
   11276          97 :         case 1:
   11277          97 :                 info->name = "coord";
   11278          97 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11279          97 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11280          97 :                 info->NDTtype = NDT_SFCoordinateNode;
   11281          97 :                 info->far_ptr = & ((M_PointSet *)node)->coord;
   11282             :                 return GF_OK;
   11283             :         default:
   11284             :                 return GF_BAD_PARAM;
   11285             :         }
   11286             : }
   11287             : 
   11288             : 
   11289          18 : static s32 PointSet_get_field_index_by_name(char *name)
   11290             : {
   11291          18 :         if (!strcmp("color", name)) return 0;
   11292          17 :         if (!strcmp("coord", name)) return 1;
   11293           0 :         return -1;
   11294             : }
   11295             : static Bool PointSet_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11296             : {
   11297             :         switch (FieldIndex) {
   11298             :         default:
   11299             :                 return 0;
   11300             :         }
   11301             : }
   11302             : 
   11303             : 
   11304             : 
   11305          67 : GF_Node *PointSet_Create()
   11306             : {
   11307             :         M_PointSet *p;
   11308          67 :         GF_SAFEALLOC(p, M_PointSet);
   11309          67 :         if(!p) return NULL;
   11310          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointSet);
   11311             : 
   11312             :         /*default field values*/
   11313          67 :         return (GF_Node *)p;
   11314             : }
   11315             : 
   11316             : 
   11317             : /*
   11318             :         PointSet2D Node deletion
   11319             : */
   11320             : 
   11321          78 : static void PointSet2D_Del(GF_Node *node)
   11322             : {
   11323             :         M_PointSet2D *p = (M_PointSet2D *) node;
   11324          78 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   11325          78 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   11326          78 :         gf_node_free((GF_Node *) p);
   11327          78 : }
   11328             : 
   11329             : static const u16 PointSet2D_Def2All[] = { 0, 1};
   11330             : static const u16 PointSet2D_In2All[] = { 0, 1};
   11331             : static const u16 PointSet2D_Out2All[] = { 0, 1};
   11332             : 
   11333             : static u32 PointSet2D_get_field_count(GF_Node *node, u8 IndexMode)
   11334             : {
   11335          76 :         switch(IndexMode) {
   11336             :         case GF_SG_FIELD_CODING_IN:
   11337             :                 return 2;
   11338             :         case GF_SG_FIELD_CODING_DEF:
   11339             :                 return 2;
   11340             :         case GF_SG_FIELD_CODING_OUT:
   11341             :                 return 2;
   11342           1 :         case GF_SG_FIELD_CODING_DYN:
   11343             :                 return 0;
   11344             :         default:
   11345             :                 return 2;
   11346             :         }
   11347             : }
   11348             : 
   11349             : static GF_Err PointSet2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11350             : {
   11351          57 :         switch(IndexMode) {
   11352           0 :         case GF_SG_FIELD_CODING_IN:
   11353           0 :                 *allField = PointSet2D_In2All[inField];
   11354             :                 return GF_OK;
   11355          55 :         case GF_SG_FIELD_CODING_DEF:
   11356          55 :                 *allField = PointSet2D_Def2All[inField];
   11357             :                 return GF_OK;
   11358           0 :         case GF_SG_FIELD_CODING_OUT:
   11359           0 :                 *allField = PointSet2D_Out2All[inField];
   11360             :                 return GF_OK;
   11361             :         default:
   11362             :                 return GF_BAD_PARAM;
   11363             :         }
   11364             : }
   11365             : static GF_Err PointSet2D_get_field(GF_Node *node, GF_FieldInfo *info)
   11366             : {
   11367         145 :         switch (info->fieldIndex) {
   11368          37 :         case 0:
   11369          37 :                 info->name = "color";
   11370          37 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11371          37 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11372          37 :                 info->NDTtype = NDT_SFColorNode;
   11373          37 :                 info->far_ptr = & ((M_PointSet2D *)node)->color;
   11374             :                 return GF_OK;
   11375         108 :         case 1:
   11376         108 :                 info->name = "coord";
   11377         108 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11378         108 :                 info->fieldType = GF_SG_VRML_SFNODE;
   11379         108 :                 info->NDTtype = NDT_SFCoordinate2DNode;
   11380         108 :                 info->far_ptr = & ((M_PointSet2D *)node)->coord;
   11381             :                 return GF_OK;
   11382             :         default:
   11383             :                 return GF_BAD_PARAM;
   11384             :         }
   11385             : }
   11386             : 
   11387             : 
   11388          29 : static s32 PointSet2D_get_field_index_by_name(char *name)
   11389             : {
   11390          29 :         if (!strcmp("color", name)) return 0;
   11391          28 :         if (!strcmp("coord", name)) return 1;
   11392           0 :         return -1;
   11393             : }
   11394             : static Bool PointSet2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11395             : {
   11396             :         switch (FieldIndex) {
   11397             :         default:
   11398             :                 return 0;
   11399             :         }
   11400             : }
   11401             : 
   11402             : 
   11403             : 
   11404          78 : GF_Node *PointSet2D_Create()
   11405             : {
   11406             :         M_PointSet2D *p;
   11407          78 :         GF_SAFEALLOC(p, M_PointSet2D);
   11408          78 :         if(!p) return NULL;
   11409          78 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointSet2D);
   11410             : 
   11411             :         /*default field values*/
   11412          78 :         return (GF_Node *)p;
   11413             : }
   11414             : 
   11415             : 
   11416             : /*
   11417             :         PositionInterpolator Node deletion
   11418             : */
   11419             : 
   11420          12 : static void PositionInterpolator_Del(GF_Node *node)
   11421             : {
   11422             :         M_PositionInterpolator *p = (M_PositionInterpolator *) node;
   11423          12 :         gf_sg_mffloat_del(p->key);
   11424          12 :         gf_sg_mfvec3f_del(p->keyValue);
   11425          12 :         gf_node_free((GF_Node *) p);
   11426          12 : }
   11427             : 
   11428             : static const u16 PositionInterpolator_Def2All[] = { 1, 2};
   11429             : static const u16 PositionInterpolator_In2All[] = { 0, 1, 2};
   11430             : static const u16 PositionInterpolator_Out2All[] = { 1, 2, 3};
   11431             : 
   11432             : static u32 PositionInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   11433             : {
   11434             :         switch(IndexMode) {
   11435             :         case GF_SG_FIELD_CODING_IN:
   11436             :                 return 3;
   11437             :         case GF_SG_FIELD_CODING_DEF:
   11438             :                 return 2;
   11439             :         case GF_SG_FIELD_CODING_OUT:
   11440             :                 return 3;
   11441             :         case GF_SG_FIELD_CODING_DYN:
   11442             :                 return 0;
   11443             :         default:
   11444             :                 return 4;
   11445             :         }
   11446             : }
   11447             : 
   11448             : static GF_Err PositionInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11449             : {
   11450           4 :         switch(IndexMode) {
   11451           0 :         case GF_SG_FIELD_CODING_IN:
   11452           0 :                 *allField = PositionInterpolator_In2All[inField];
   11453             :                 return GF_OK;
   11454           0 :         case GF_SG_FIELD_CODING_DEF:
   11455           0 :                 *allField = PositionInterpolator_Def2All[inField];
   11456             :                 return GF_OK;
   11457           0 :         case GF_SG_FIELD_CODING_OUT:
   11458           0 :                 *allField = PositionInterpolator_Out2All[inField];
   11459             :                 return GF_OK;
   11460             :         default:
   11461             :                 return GF_BAD_PARAM;
   11462             :         }
   11463             : }
   11464          74 : static GF_Err PositionInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   11465             : {
   11466          74 :         switch (info->fieldIndex) {
   11467          24 :         case 0:
   11468          24 :                 info->name = "set_fraction";
   11469          24 :                 info->eventType = GF_SG_EVENT_IN;
   11470          24 :                 info->on_event_in = ((M_PositionInterpolator *)node)->on_set_fraction;
   11471          24 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11472          24 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->set_fraction;
   11473          24 :                 return GF_OK;
   11474          13 :         case 1:
   11475          13 :                 info->name = "key";
   11476          13 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11477          13 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   11478          13 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->key;
   11479          13 :                 return GF_OK;
   11480          13 :         case 2:
   11481          13 :                 info->name = "keyValue";
   11482          13 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11483          13 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   11484          13 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->keyValue;
   11485          13 :                 return GF_OK;
   11486          24 :         case 3:
   11487          24 :                 info->name = "value_changed";
   11488          24 :                 info->eventType = GF_SG_EVENT_OUT;
   11489          24 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11490          24 :                 info->far_ptr = & ((M_PositionInterpolator *) node)->value_changed;
   11491          24 :                 return GF_OK;
   11492             :         default:
   11493             :                 return GF_BAD_PARAM;
   11494             :         }
   11495             : }
   11496             : 
   11497             : 
   11498          48 : static s32 PositionInterpolator_get_field_index_by_name(char *name)
   11499             : {
   11500          48 :         if (!strcmp("set_fraction", name)) return 0;
   11501          36 :         if (!strcmp("key", name)) return 1;
   11502          24 :         if (!strcmp("keyValue", name)) return 2;
   11503          12 :         if (!strcmp("value_changed", name)) return 3;
   11504           0 :         return -1;
   11505             : }
   11506             : static Bool PositionInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11507             : {
   11508           4 :         switch (FieldIndex) {
   11509           1 :         case 1:
   11510           1 :                 *AType = 0;
   11511           1 :                 *QType = 8;
   11512           1 :                 *b_min = FLT2FIX(0);
   11513           1 :                 *b_max = FLT2FIX(1);
   11514             :                 return 1;
   11515           1 :         case 2:
   11516           1 :                 *AType = 0;
   11517           1 :                 *QType = 1;
   11518           1 :                 *b_min = FIX_MIN;
   11519           1 :                 *b_max = FIX_MAX;
   11520             :                 return 1;
   11521             :         default:
   11522             :                 return 0;
   11523             :         }
   11524             : }
   11525             : 
   11526             : 
   11527             : 
   11528          12 : GF_Node *PositionInterpolator_Create()
   11529             : {
   11530             :         M_PositionInterpolator *p;
   11531          12 :         GF_SAFEALLOC(p, M_PositionInterpolator);
   11532          12 :         if(!p) return NULL;
   11533          12 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionInterpolator);
   11534             : 
   11535             :         /*default field values*/
   11536          12 :         return (GF_Node *)p;
   11537             : }
   11538             : 
   11539             : 
   11540             : /*
   11541             :         PositionInterpolator2D Node deletion
   11542             : */
   11543             : 
   11544         410 : static void PositionInterpolator2D_Del(GF_Node *node)
   11545             : {
   11546             :         M_PositionInterpolator2D *p = (M_PositionInterpolator2D *) node;
   11547         410 :         gf_sg_mffloat_del(p->key);
   11548         410 :         gf_sg_mfvec2f_del(p->keyValue);
   11549         410 :         gf_node_free((GF_Node *) p);
   11550         410 : }
   11551             : 
   11552             : static const u16 PositionInterpolator2D_Def2All[] = { 1, 2};
   11553             : static const u16 PositionInterpolator2D_In2All[] = { 0, 1, 2};
   11554             : static const u16 PositionInterpolator2D_Out2All[] = { 1, 2, 3};
   11555             : 
   11556             : static u32 PositionInterpolator2D_get_field_count(GF_Node *node, u8 IndexMode)
   11557             : {
   11558             :         switch(IndexMode) {
   11559             :         case GF_SG_FIELD_CODING_IN:
   11560             :                 return 3;
   11561             :         case GF_SG_FIELD_CODING_DEF:
   11562             :                 return 2;
   11563             :         case GF_SG_FIELD_CODING_OUT:
   11564             :                 return 3;
   11565             :         case GF_SG_FIELD_CODING_DYN:
   11566             :                 return 0;
   11567             :         default:
   11568             :                 return 4;
   11569             :         }
   11570             : }
   11571             : 
   11572             : static GF_Err PositionInterpolator2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11573             : {
   11574           4 :         switch(IndexMode) {
   11575           0 :         case GF_SG_FIELD_CODING_IN:
   11576           0 :                 *allField = PositionInterpolator2D_In2All[inField];
   11577             :                 return GF_OK;
   11578           0 :         case GF_SG_FIELD_CODING_DEF:
   11579           0 :                 *allField = PositionInterpolator2D_Def2All[inField];
   11580             :                 return GF_OK;
   11581           0 :         case GF_SG_FIELD_CODING_OUT:
   11582           0 :                 *allField = PositionInterpolator2D_Out2All[inField];
   11583             :                 return GF_OK;
   11584             :         default:
   11585             :                 return GF_BAD_PARAM;
   11586             :         }
   11587             : }
   11588        3236 : static GF_Err PositionInterpolator2D_get_field(GF_Node *node, GF_FieldInfo *info)
   11589             : {
   11590        3236 :         switch (info->fieldIndex) {
   11591         845 :         case 0:
   11592         845 :                 info->name = "set_fraction";
   11593         845 :                 info->eventType = GF_SG_EVENT_IN;
   11594         845 :                 info->on_event_in = ((M_PositionInterpolator2D *)node)->on_set_fraction;
   11595         845 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11596         845 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->set_fraction;
   11597         845 :                 return GF_OK;
   11598         772 :         case 1:
   11599         772 :                 info->name = "key";
   11600         772 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11601         772 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   11602         772 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->key;
   11603         772 :                 return GF_OK;
   11604         772 :         case 2:
   11605         772 :                 info->name = "keyValue";
   11606         772 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11607         772 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   11608         772 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->keyValue;
   11609         772 :                 return GF_OK;
   11610         847 :         case 3:
   11611         847 :                 info->name = "value_changed";
   11612         847 :                 info->eventType = GF_SG_EVENT_OUT;
   11613         847 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11614         847 :                 info->far_ptr = & ((M_PositionInterpolator2D *) node)->value_changed;
   11615         847 :                 return GF_OK;
   11616             :         default:
   11617             :                 return GF_BAD_PARAM;
   11618             :         }
   11619             : }
   11620             : 
   11621             : 
   11622         193 : static s32 PositionInterpolator2D_get_field_index_by_name(char *name)
   11623             : {
   11624         193 :         if (!strcmp("set_fraction", name)) return 0;
   11625         146 :         if (!strcmp("key", name)) return 1;
   11626          97 :         if (!strcmp("keyValue", name)) return 2;
   11627          48 :         if (!strcmp("value_changed", name)) return 3;
   11628           0 :         return -1;
   11629             : }
   11630             : static Bool PositionInterpolator2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11631             : {
   11632           4 :         switch (FieldIndex) {
   11633           1 :         case 1:
   11634           1 :                 *AType = 0;
   11635           1 :                 *QType = 8;
   11636           1 :                 *b_min = FLT2FIX(0);
   11637           1 :                 *b_max = FLT2FIX(1);
   11638             :                 return 1;
   11639           1 :         case 2:
   11640           1 :                 *AType = 0;
   11641           1 :                 *QType = 2;
   11642           1 :                 *b_min = FIX_MIN;
   11643           1 :                 *b_max = FIX_MAX;
   11644             :                 return 1;
   11645             :         default:
   11646             :                 return 0;
   11647             :         }
   11648             : }
   11649             : 
   11650             : 
   11651             : 
   11652         410 : GF_Node *PositionInterpolator2D_Create()
   11653             : {
   11654             :         M_PositionInterpolator2D *p;
   11655         410 :         GF_SAFEALLOC(p, M_PositionInterpolator2D);
   11656         410 :         if(!p) return NULL;
   11657         410 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionInterpolator2D);
   11658             : 
   11659             :         /*default field values*/
   11660         410 :         return (GF_Node *)p;
   11661             : }
   11662             : 
   11663             : 
   11664             : /*
   11665             :         ProximitySensor2D Node deletion
   11666             : */
   11667             : 
   11668             : static void ProximitySensor2D_Del(GF_Node *node)
   11669             : {
   11670             :         M_ProximitySensor2D *p = (M_ProximitySensor2D *) node;
   11671          68 :         gf_node_free((GF_Node *) p);
   11672             : }
   11673             : 
   11674             : static const u16 ProximitySensor2D_Def2All[] = { 0, 1, 2};
   11675             : static const u16 ProximitySensor2D_In2All[] = { 0, 1, 2};
   11676             : static const u16 ProximitySensor2D_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   11677             : 
   11678             : static u32 ProximitySensor2D_get_field_count(GF_Node *node, u8 IndexMode)
   11679             : {
   11680             :         switch(IndexMode) {
   11681             :         case GF_SG_FIELD_CODING_IN:
   11682             :                 return 3;
   11683             :         case GF_SG_FIELD_CODING_DEF:
   11684             :                 return 3;
   11685             :         case GF_SG_FIELD_CODING_OUT:
   11686             :                 return 8;
   11687             :         case GF_SG_FIELD_CODING_DYN:
   11688             :                 return 0;
   11689             :         default:
   11690             :                 return 8;
   11691             :         }
   11692             : }
   11693             : 
   11694             : static GF_Err ProximitySensor2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11695             : {
   11696          68 :         switch(IndexMode) {
   11697           0 :         case GF_SG_FIELD_CODING_IN:
   11698           0 :                 *allField = ProximitySensor2D_In2All[inField];
   11699             :                 return GF_OK;
   11700          60 :         case GF_SG_FIELD_CODING_DEF:
   11701          60 :                 *allField = ProximitySensor2D_Def2All[inField];
   11702             :                 return GF_OK;
   11703           0 :         case GF_SG_FIELD_CODING_OUT:
   11704           0 :                 *allField = ProximitySensor2D_Out2All[inField];
   11705             :                 return GF_OK;
   11706             :         default:
   11707             :                 return GF_BAD_PARAM;
   11708             :         }
   11709             : }
   11710         311 : static GF_Err ProximitySensor2D_get_field(GF_Node *node, GF_FieldInfo *info)
   11711             : {
   11712         311 :         switch (info->fieldIndex) {
   11713          72 :         case 0:
   11714          72 :                 info->name = "center";
   11715          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11716          72 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11717          72 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->center;
   11718          72 :                 return GF_OK;
   11719          74 :         case 1:
   11720          74 :                 info->name = "size";
   11721          74 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11722          74 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11723          74 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->size;
   11724          74 :                 return GF_OK;
   11725          72 :         case 2:
   11726          72 :                 info->name = "enabled";
   11727          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11728          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11729          72 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->enabled;
   11730          72 :                 return GF_OK;
   11731          25 :         case 3:
   11732          25 :                 info->name = "isActive";
   11733          25 :                 info->eventType = GF_SG_EVENT_OUT;
   11734          25 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11735          25 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->isActive;
   11736          25 :                 return GF_OK;
   11737          17 :         case 4:
   11738          17 :                 info->name = "position_changed";
   11739          17 :                 info->eventType = GF_SG_EVENT_OUT;
   11740          17 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   11741          17 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->position_changed;
   11742          17 :                 return GF_OK;
   11743          17 :         case 5:
   11744          17 :                 info->name = "orientation_changed";
   11745          17 :                 info->eventType = GF_SG_EVENT_OUT;
   11746          17 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   11747          17 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->orientation_changed;
   11748          17 :                 return GF_OK;
   11749          17 :         case 6:
   11750          17 :                 info->name = "enterTime";
   11751          17 :                 info->eventType = GF_SG_EVENT_OUT;
   11752          17 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11753          17 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->enterTime;
   11754          17 :                 return GF_OK;
   11755          17 :         case 7:
   11756          17 :                 info->name = "exitTime";
   11757          17 :                 info->eventType = GF_SG_EVENT_OUT;
   11758          17 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11759          17 :                 info->far_ptr = & ((M_ProximitySensor2D *) node)->exitTime;
   11760          17 :                 return GF_OK;
   11761             :         default:
   11762             :                 return GF_BAD_PARAM;
   11763             :         }
   11764             : }
   11765             : 
   11766             : 
   11767          14 : static s32 ProximitySensor2D_get_field_index_by_name(char *name)
   11768             : {
   11769          14 :         if (!strcmp("center", name)) return 0;
   11770          13 :         if (!strcmp("size", name)) return 1;
   11771          10 :         if (!strcmp("enabled", name)) return 2;
   11772           9 :         if (!strcmp("isActive", name)) return 3;
   11773           4 :         if (!strcmp("position_changed", name)) return 4;
   11774           3 :         if (!strcmp("orientation_changed", name)) return 5;
   11775           2 :         if (!strcmp("enterTime", name)) return 6;
   11776           1 :         if (!strcmp("exitTime", name)) return 7;
   11777           0 :         return -1;
   11778             : }
   11779             : static Bool ProximitySensor2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11780             : {
   11781           8 :         switch (FieldIndex) {
   11782           1 :         case 0:
   11783           1 :                 *AType = 0;
   11784           1 :                 *QType = 2;
   11785           1 :                 *b_min = FLT2FIX(-1);
   11786           1 :                 *b_max = FIX_MAX;
   11787             :                 return 1;
   11788           1 :         case 1:
   11789           1 :                 *AType = 0;
   11790           1 :                 *QType = 12;
   11791           1 :                 *b_min = FLT2FIX(0);
   11792           1 :                 *b_max = FIX_MAX;
   11793             :                 return 1;
   11794             :         default:
   11795             :                 return 0;
   11796             :         }
   11797             : }
   11798             : 
   11799             : 
   11800             : 
   11801          68 : GF_Node *ProximitySensor2D_Create()
   11802             : {
   11803             :         M_ProximitySensor2D *p;
   11804          68 :         GF_SAFEALLOC(p, M_ProximitySensor2D);
   11805          68 :         if(!p) return NULL;
   11806          68 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ProximitySensor2D);
   11807             : 
   11808             :         /*default field values*/
   11809          68 :         p->center.x = FLT2FIX(0);
   11810          68 :         p->center.y = FLT2FIX(0);
   11811          68 :         p->size.x = FLT2FIX(0);
   11812          68 :         p->size.y = FLT2FIX(0);
   11813          68 :         p->enabled = 1;
   11814          68 :         return (GF_Node *)p;
   11815             : }
   11816             : 
   11817             : 
   11818             : /*
   11819             :         ProximitySensor Node deletion
   11820             : */
   11821             : 
   11822             : static void ProximitySensor_Del(GF_Node *node)
   11823             : {
   11824             :         M_ProximitySensor *p = (M_ProximitySensor *) node;
   11825           2 :         gf_node_free((GF_Node *) p);
   11826             : }
   11827             : 
   11828             : static const u16 ProximitySensor_Def2All[] = { 0, 1, 2};
   11829             : static const u16 ProximitySensor_In2All[] = { 0, 1, 2};
   11830             : static const u16 ProximitySensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   11831             : 
   11832             : static u32 ProximitySensor_get_field_count(GF_Node *node, u8 IndexMode)
   11833             : {
   11834             :         switch(IndexMode) {
   11835             :         case GF_SG_FIELD_CODING_IN:
   11836             :                 return 3;
   11837             :         case GF_SG_FIELD_CODING_DEF:
   11838             :                 return 3;
   11839             :         case GF_SG_FIELD_CODING_OUT:
   11840             :                 return 8;
   11841             :         case GF_SG_FIELD_CODING_DYN:
   11842             :                 return 0;
   11843             :         default:
   11844             :                 return 8;
   11845             :         }
   11846             : }
   11847             : 
   11848             : static GF_Err ProximitySensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   11849             : {
   11850           8 :         switch(IndexMode) {
   11851           0 :         case GF_SG_FIELD_CODING_IN:
   11852           0 :                 *allField = ProximitySensor_In2All[inField];
   11853             :                 return GF_OK;
   11854           0 :         case GF_SG_FIELD_CODING_DEF:
   11855           0 :                 *allField = ProximitySensor_Def2All[inField];
   11856             :                 return GF_OK;
   11857           0 :         case GF_SG_FIELD_CODING_OUT:
   11858           0 :                 *allField = ProximitySensor_Out2All[inField];
   11859             :                 return GF_OK;
   11860             :         default:
   11861             :                 return GF_BAD_PARAM;
   11862             :         }
   11863             : }
   11864          20 : static GF_Err ProximitySensor_get_field(GF_Node *node, GF_FieldInfo *info)
   11865             : {
   11866          20 :         switch (info->fieldIndex) {
   11867           3 :         case 0:
   11868           3 :                 info->name = "center";
   11869           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11870           3 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11871           3 :                 info->far_ptr = & ((M_ProximitySensor *) node)->center;
   11872           3 :                 return GF_OK;
   11873           3 :         case 1:
   11874           3 :                 info->name = "size";
   11875           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11876           3 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11877           3 :                 info->far_ptr = & ((M_ProximitySensor *) node)->size;
   11878           3 :                 return GF_OK;
   11879           2 :         case 2:
   11880           2 :                 info->name = "enabled";
   11881           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   11882           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11883           2 :                 info->far_ptr = & ((M_ProximitySensor *) node)->enabled;
   11884           2 :                 return GF_OK;
   11885           2 :         case 3:
   11886           2 :                 info->name = "isActive";
   11887           2 :                 info->eventType = GF_SG_EVENT_OUT;
   11888           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   11889           2 :                 info->far_ptr = & ((M_ProximitySensor *) node)->isActive;
   11890           2 :                 return GF_OK;
   11891           2 :         case 4:
   11892           2 :                 info->name = "position_changed";
   11893           2 :                 info->eventType = GF_SG_EVENT_OUT;
   11894           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   11895           2 :                 info->far_ptr = & ((M_ProximitySensor *) node)->position_changed;
   11896           2 :                 return GF_OK;
   11897           2 :         case 5:
   11898           2 :                 info->name = "orientation_changed";
   11899           2 :                 info->eventType = GF_SG_EVENT_OUT;
   11900           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   11901           2 :                 info->far_ptr = & ((M_ProximitySensor *) node)->orientation_changed;
   11902           2 :                 return GF_OK;
   11903           3 :         case 6:
   11904           3 :                 info->name = "enterTime";
   11905           3 :                 info->eventType = GF_SG_EVENT_OUT;
   11906           3 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11907           3 :                 info->far_ptr = & ((M_ProximitySensor *) node)->enterTime;
   11908           3 :                 return GF_OK;
   11909           3 :         case 7:
   11910           3 :                 info->name = "exitTime";
   11911           3 :                 info->eventType = GF_SG_EVENT_OUT;
   11912           3 :                 info->fieldType = GF_SG_VRML_SFTIME;
   11913           3 :                 info->far_ptr = & ((M_ProximitySensor *) node)->exitTime;
   11914           3 :                 return GF_OK;
   11915             :         default:
   11916             :                 return GF_BAD_PARAM;
   11917             :         }
   11918             : }
   11919             : 
   11920             : 
   11921          12 : static s32 ProximitySensor_get_field_index_by_name(char *name)
   11922             : {
   11923          12 :         if (!strcmp("center", name)) return 0;
   11924          10 :         if (!strcmp("size", name)) return 1;
   11925           8 :         if (!strcmp("enabled", name)) return 2;
   11926           7 :         if (!strcmp("isActive", name)) return 3;
   11927           6 :         if (!strcmp("position_changed", name)) return 4;
   11928           5 :         if (!strcmp("orientation_changed", name)) return 5;
   11929           4 :         if (!strcmp("enterTime", name)) return 6;
   11930           2 :         if (!strcmp("exitTime", name)) return 7;
   11931           0 :         return -1;
   11932             : }
   11933             : static Bool ProximitySensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   11934             : {
   11935           8 :         switch (FieldIndex) {
   11936           1 :         case 0:
   11937           1 :                 *AType = 0;
   11938           1 :                 *QType = 1;
   11939           1 :                 *b_min = FIX_MIN;
   11940           1 :                 *b_max = FIX_MAX;
   11941             :                 return 1;
   11942           1 :         case 1:
   11943           1 :                 *AType = 0;
   11944           1 :                 *QType = 11;
   11945           1 :                 *b_min = FLT2FIX(0);
   11946           1 :                 *b_max = FIX_MAX;
   11947             :                 return 1;
   11948             :         default:
   11949             :                 return 0;
   11950             :         }
   11951             : }
   11952             : 
   11953             : 
   11954             : 
   11955           2 : GF_Node *ProximitySensor_Create()
   11956             : {
   11957             :         M_ProximitySensor *p;
   11958           2 :         GF_SAFEALLOC(p, M_ProximitySensor);
   11959           2 :         if(!p) return NULL;
   11960           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ProximitySensor);
   11961             : 
   11962             :         /*default field values*/
   11963           2 :         p->center.x = FLT2FIX(0);
   11964           2 :         p->center.y = FLT2FIX(0);
   11965           2 :         p->center.z = FLT2FIX(0);
   11966           2 :         p->size.x = FLT2FIX(0);
   11967           2 :         p->size.y = FLT2FIX(0);
   11968           2 :         p->size.z = FLT2FIX(0);
   11969           2 :         p->enabled = 1;
   11970           2 :         return (GF_Node *)p;
   11971             : }
   11972             : 
   11973             : 
   11974             : /*
   11975             :         QuantizationParameter Node deletion
   11976             : */
   11977             : 
   11978             : static void QuantizationParameter_Del(GF_Node *node)
   11979             : {
   11980             :         M_QuantizationParameter *p = (M_QuantizationParameter *) node;
   11981         233 :         gf_node_free((GF_Node *) p);
   11982             : }
   11983             : 
   11984             : static const u16 QuantizationParameter_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39};
   11985             : 
   11986             : static u32 QuantizationParameter_get_field_count(GF_Node *node, u8 IndexMode)
   11987             : {
   11988         236 :         switch(IndexMode) {
   11989             :         case GF_SG_FIELD_CODING_IN:
   11990             :                 return 0;
   11991         177 :         case GF_SG_FIELD_CODING_DEF:
   11992             :                 return 40;
   11993             :         case GF_SG_FIELD_CODING_OUT:
   11994             :                 return 0;
   11995             :         case GF_SG_FIELD_CODING_DYN:
   11996             :                 return 0;
   11997          56 :         default:
   11998             :                 return 40;
   11999             :         }
   12000             : }
   12001             : 
   12002             : static GF_Err QuantizationParameter_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12003             : {
   12004        2645 :         switch(IndexMode) {
   12005        2605 :         case GF_SG_FIELD_CODING_DEF:
   12006        2605 :                 *allField = QuantizationParameter_Def2All[inField];
   12007             :                 return GF_OK;
   12008             :         default:
   12009             :                 return GF_BAD_PARAM;
   12010             :         }
   12011             : }
   12012       10092 : static GF_Err QuantizationParameter_get_field(GF_Node *node, GF_FieldInfo *info)
   12013             : {
   12014       10092 :         switch (info->fieldIndex) {
   12015         285 :         case 0:
   12016         285 :                 info->name = "isLocal";
   12017         285 :                 info->eventType = GF_SG_EVENT_FIELD;
   12018         285 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12019         285 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->isLocal;
   12020         285 :                 return GF_OK;
   12021         295 :         case 1:
   12022         295 :                 info->name = "position3DQuant";
   12023         295 :                 info->eventType = GF_SG_EVENT_FIELD;
   12024         295 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12025         295 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DQuant;
   12026         295 :                 return GF_OK;
   12027         285 :         case 2:
   12028         285 :                 info->name = "position3DMin";
   12029         285 :                 info->eventType = GF_SG_EVENT_FIELD;
   12030         285 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   12031         285 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DMin;
   12032         285 :                 return GF_OK;
   12033         285 :         case 3:
   12034         285 :                 info->name = "position3DMax";
   12035         285 :                 info->eventType = GF_SG_EVENT_FIELD;
   12036         285 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   12037         285 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DMax;
   12038         285 :                 return GF_OK;
   12039         285 :         case 4:
   12040         285 :                 info->name = "position3DNbBits";
   12041         285 :                 info->eventType = GF_SG_EVENT_FIELD;
   12042         285 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12043         285 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position3DNbBits;
   12044         285 :                 return GF_OK;
   12045         381 :         case 5:
   12046         381 :                 info->name = "position2DQuant";
   12047         381 :                 info->eventType = GF_SG_EVENT_FIELD;
   12048         381 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12049         381 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DQuant;
   12050         381 :                 return GF_OK;
   12051         381 :         case 6:
   12052         381 :                 info->name = "position2DMin";
   12053         381 :                 info->eventType = GF_SG_EVENT_FIELD;
   12054         381 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   12055         381 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DMin;
   12056         381 :                 return GF_OK;
   12057         381 :         case 7:
   12058         381 :                 info->name = "position2DMax";
   12059         381 :                 info->eventType = GF_SG_EVENT_FIELD;
   12060         381 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   12061         381 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DMax;
   12062         381 :                 return GF_OK;
   12063         381 :         case 8:
   12064         381 :                 info->name = "position2DNbBits";
   12065         381 :                 info->eventType = GF_SG_EVENT_FIELD;
   12066         381 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12067         381 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->position2DNbBits;
   12068         381 :                 return GF_OK;
   12069         226 :         case 9:
   12070         226 :                 info->name = "drawOrderQuant";
   12071         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12072         226 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12073         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderQuant;
   12074         226 :                 return GF_OK;
   12075         226 :         case 10:
   12076         226 :                 info->name = "drawOrderMin";
   12077         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12078         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12079         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderMin;
   12080         226 :                 return GF_OK;
   12081         226 :         case 11:
   12082         226 :                 info->name = "drawOrderMax";
   12083         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12084         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12085         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderMax;
   12086         226 :                 return GF_OK;
   12087         226 :         case 12:
   12088         226 :                 info->name = "drawOrderNbBits";
   12089         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12090         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12091         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->drawOrderNbBits;
   12092         226 :                 return GF_OK;
   12093         284 :         case 13:
   12094         284 :                 info->name = "colorQuant";
   12095         284 :                 info->eventType = GF_SG_EVENT_FIELD;
   12096         284 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12097         284 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorQuant;
   12098         284 :                 return GF_OK;
   12099         226 :         case 14:
   12100         226 :                 info->name = "colorMin";
   12101         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12102         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12103         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorMin;
   12104         226 :                 return GF_OK;
   12105         226 :         case 15:
   12106         226 :                 info->name = "colorMax";
   12107         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12108         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12109         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorMax;
   12110         226 :                 return GF_OK;
   12111         226 :         case 16:
   12112         226 :                 info->name = "colorNbBits";
   12113         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12114         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12115         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->colorNbBits;
   12116         226 :                 return GF_OK;
   12117         226 :         case 17:
   12118         226 :                 info->name = "textureCoordinateQuant";
   12119         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12120         226 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12121         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateQuant;
   12122         226 :                 return GF_OK;
   12123         226 :         case 18:
   12124         226 :                 info->name = "textureCoordinateMin";
   12125         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12126         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12127         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateMin;
   12128         226 :                 return GF_OK;
   12129         226 :         case 19:
   12130         226 :                 info->name = "textureCoordinateMax";
   12131         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12132         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12133         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateMax;
   12134         226 :                 return GF_OK;
   12135         226 :         case 20:
   12136         226 :                 info->name = "textureCoordinateNbBits";
   12137         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12138         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12139         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->textureCoordinateNbBits;
   12140         226 :                 return GF_OK;
   12141         236 :         case 21:
   12142         236 :                 info->name = "angleQuant";
   12143         236 :                 info->eventType = GF_SG_EVENT_FIELD;
   12144         236 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12145         236 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleQuant;
   12146         236 :                 return GF_OK;
   12147         226 :         case 22:
   12148         226 :                 info->name = "angleMin";
   12149         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12150         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12151         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleMin;
   12152         226 :                 return GF_OK;
   12153         226 :         case 23:
   12154         226 :                 info->name = "angleMax";
   12155         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12156         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12157         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleMax;
   12158         226 :                 return GF_OK;
   12159         226 :         case 24:
   12160         226 :                 info->name = "angleNbBits";
   12161         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12162         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12163         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->angleNbBits;
   12164         226 :                 return GF_OK;
   12165         226 :         case 25:
   12166         226 :                 info->name = "scaleQuant";
   12167         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12168         226 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12169         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleQuant;
   12170         226 :                 return GF_OK;
   12171         226 :         case 26:
   12172         226 :                 info->name = "scaleMin";
   12173         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12174         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12175         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleMin;
   12176         226 :                 return GF_OK;
   12177         226 :         case 27:
   12178         226 :                 info->name = "scaleMax";
   12179         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12180         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12181         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleMax;
   12182         226 :                 return GF_OK;
   12183         226 :         case 28:
   12184         226 :                 info->name = "scaleNbBits";
   12185         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12186         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12187         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->scaleNbBits;
   12188         226 :                 return GF_OK;
   12189         226 :         case 29:
   12190         226 :                 info->name = "keyQuant";
   12191         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12192         226 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12193         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyQuant;
   12194         226 :                 return GF_OK;
   12195         226 :         case 30:
   12196         226 :                 info->name = "keyMin";
   12197         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12198         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12199         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyMin;
   12200         226 :                 return GF_OK;
   12201         226 :         case 31:
   12202         226 :                 info->name = "keyMax";
   12203         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12204         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12205         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyMax;
   12206         226 :                 return GF_OK;
   12207         226 :         case 32:
   12208         226 :                 info->name = "keyNbBits";
   12209         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12210         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12211         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->keyNbBits;
   12212         226 :                 return GF_OK;
   12213         226 :         case 33:
   12214         226 :                 info->name = "normalQuant";
   12215         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12216         226 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12217         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->normalQuant;
   12218         226 :                 return GF_OK;
   12219         226 :         case 34:
   12220         226 :                 info->name = "normalNbBits";
   12221         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12222         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12223         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->normalNbBits;
   12224         226 :                 return GF_OK;
   12225         226 :         case 35:
   12226         226 :                 info->name = "sizeQuant";
   12227         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12228         226 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12229         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeQuant;
   12230         226 :                 return GF_OK;
   12231         226 :         case 36:
   12232         226 :                 info->name = "sizeMin";
   12233         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12234         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12235         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeMin;
   12236         226 :                 return GF_OK;
   12237         226 :         case 37:
   12238         226 :                 info->name = "sizeMax";
   12239         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12240         226 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12241         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeMax;
   12242         226 :                 return GF_OK;
   12243         226 :         case 38:
   12244         226 :                 info->name = "sizeNbBits";
   12245         226 :                 info->eventType = GF_SG_EVENT_FIELD;
   12246         226 :                 info->fieldType = GF_SG_VRML_SFINT32;
   12247         226 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->sizeNbBits;
   12248         226 :                 return GF_OK;
   12249         285 :         case 39:
   12250         285 :                 info->name = "useEfficientCoding";
   12251         285 :                 info->eventType = GF_SG_EVENT_FIELD;
   12252         285 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12253         285 :                 info->far_ptr = & ((M_QuantizationParameter *) node)->useEfficientCoding;
   12254         285 :                 return GF_OK;
   12255             :         default:
   12256             :                 return GF_BAD_PARAM;
   12257             :         }
   12258             : }
   12259             : 
   12260             : 
   12261         355 : static s32 QuantizationParameter_get_field_index_by_name(char *name)
   12262             : {
   12263         355 :         if (!strcmp("isLocal", name)) return 0;
   12264         339 :         if (!strcmp("position3DQuant", name)) return 1;
   12265         313 :         if (!strcmp("position3DMin", name)) return 2;
   12266         297 :         if (!strcmp("position3DMax", name)) return 3;
   12267         281 :         if (!strcmp("position3DNbBits", name)) return 4;
   12268         265 :         if (!strcmp("position2DQuant", name)) return 5;
   12269         219 :         if (!strcmp("position2DMin", name)) return 6;
   12270         173 :         if (!strcmp("position2DMax", name)) return 7;
   12271         127 :         if (!strcmp("position2DNbBits", name)) return 8;
   12272          81 :         if (!strcmp("drawOrderQuant", name)) return 9;
   12273          80 :         if (!strcmp("drawOrderMin", name)) return 10;
   12274          79 :         if (!strcmp("drawOrderMax", name)) return 11;
   12275          78 :         if (!strcmp("drawOrderNbBits", name)) return 12;
   12276          77 :         if (!strcmp("colorQuant", name)) return 13;
   12277          51 :         if (!strcmp("colorMin", name)) return 14;
   12278          50 :         if (!strcmp("colorMax", name)) return 15;
   12279          49 :         if (!strcmp("colorNbBits", name)) return 16;
   12280          48 :         if (!strcmp("textureCoordinateQuant", name)) return 17;
   12281          47 :         if (!strcmp("textureCoordinateMin", name)) return 18;
   12282          46 :         if (!strcmp("textureCoordinateMax", name)) return 19;
   12283          45 :         if (!strcmp("textureCoordinateNbBits", name)) return 20;
   12284          44 :         if (!strcmp("angleQuant", name)) return 21;
   12285          33 :         if (!strcmp("angleMin", name)) return 22;
   12286          32 :         if (!strcmp("angleMax", name)) return 23;
   12287          31 :         if (!strcmp("angleNbBits", name)) return 24;
   12288          30 :         if (!strcmp("scaleQuant", name)) return 25;
   12289          29 :         if (!strcmp("scaleMin", name)) return 26;
   12290          28 :         if (!strcmp("scaleMax", name)) return 27;
   12291          27 :         if (!strcmp("scaleNbBits", name)) return 28;
   12292          26 :         if (!strcmp("keyQuant", name)) return 29;
   12293          25 :         if (!strcmp("keyMin", name)) return 30;
   12294          24 :         if (!strcmp("keyMax", name)) return 31;
   12295          23 :         if (!strcmp("keyNbBits", name)) return 32;
   12296          22 :         if (!strcmp("normalQuant", name)) return 33;
   12297          21 :         if (!strcmp("normalNbBits", name)) return 34;
   12298          20 :         if (!strcmp("sizeQuant", name)) return 35;
   12299          19 :         if (!strcmp("sizeMin", name)) return 36;
   12300          18 :         if (!strcmp("sizeMax", name)) return 37;
   12301          17 :         if (!strcmp("sizeNbBits", name)) return 38;
   12302          16 :         if (!strcmp("useEfficientCoding", name)) return 39;
   12303           0 :         return -1;
   12304             : }
   12305         169 : static Bool QuantizationParameter_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12306             : {
   12307         169 :         switch (FieldIndex) {
   12308          36 :         case 2:
   12309          36 :                 *AType = 0;
   12310          36 :                 *QType = 0;
   12311          36 :                 *b_min = FIX_MIN;
   12312          36 :                 *b_max = FIX_MAX;
   12313             :                 return 1;
   12314          36 :         case 3:
   12315          36 :                 *AType = 0;
   12316          36 :                 *QType = 0;
   12317          36 :                 *b_min = FIX_MIN;
   12318          36 :                 *b_max = FIX_MAX;
   12319             :                 return 1;
   12320          36 :         case 4:
   12321          36 :                 *AType = 0;
   12322          36 :                 *QType = 13;
   12323          36 :                 *QT13_bits = 5;
   12324          36 :                 *b_min = FLT2FIX(0);
   12325          36 :                 *b_max = FLT2FIX(31);
   12326             :                 return 1;
   12327           9 :         case 6:
   12328           9 :                 *AType = 0;
   12329           9 :                 *QType = 0;
   12330           9 :                 *b_min = FIX_MIN;
   12331           9 :                 *b_max = FIX_MAX;
   12332             :                 return 1;
   12333           9 :         case 7:
   12334           9 :                 *AType = 0;
   12335           9 :                 *QType = 0;
   12336           9 :                 *b_min = FIX_MIN;
   12337           9 :                 *b_max = FIX_MAX;
   12338             :                 return 1;
   12339           9 :         case 8:
   12340           9 :                 *AType = 0;
   12341           9 :                 *QType = 13;
   12342           9 :                 *QT13_bits = 5;
   12343           9 :                 *b_min = FLT2FIX(0);
   12344           9 :                 *b_max = FLT2FIX(31);
   12345             :                 return 1;
   12346           1 :         case 10:
   12347           1 :                 *AType = 0;
   12348           1 :                 *QType = 0;
   12349           1 :                 *b_min = FIX_MIN;
   12350           1 :                 *b_max = FIX_MAX;
   12351             :                 return 1;
   12352           1 :         case 11:
   12353           1 :                 *AType = 0;
   12354           1 :                 *QType = 0;
   12355           1 :                 *b_min = FIX_MIN;
   12356           1 :                 *b_max = FIX_MAX;
   12357             :                 return 1;
   12358           1 :         case 12:
   12359           1 :                 *AType = 0;
   12360           1 :                 *QType = 13;
   12361           1 :                 *QT13_bits = 5;
   12362           1 :                 *b_min = FLT2FIX(0);
   12363           1 :                 *b_max = FLT2FIX(31);
   12364             :                 return 1;
   12365           1 :         case 14:
   12366           1 :                 *AType = 0;
   12367           1 :                 *QType = 0;
   12368           1 :                 *b_min = FLT2FIX(0);
   12369           1 :                 *b_max = FLT2FIX(1);
   12370             :                 return 1;
   12371           1 :         case 15:
   12372           1 :                 *AType = 0;
   12373           1 :                 *QType = 0;
   12374           1 :                 *b_min = FLT2FIX(0);
   12375           1 :                 *b_max = FLT2FIX(1);
   12376             :                 return 1;
   12377           1 :         case 16:
   12378           1 :                 *AType = 0;
   12379           1 :                 *QType = 13;
   12380           1 :                 *QT13_bits = 5;
   12381           1 :                 *b_min = FLT2FIX(0);
   12382           1 :                 *b_max = FLT2FIX(31);
   12383             :                 return 1;
   12384           1 :         case 18:
   12385           1 :                 *AType = 0;
   12386           1 :                 *QType = 0;
   12387           1 :                 *b_min = FLT2FIX(0);
   12388           1 :                 *b_max = FLT2FIX(1);
   12389             :                 return 1;
   12390           1 :         case 19:
   12391           1 :                 *AType = 0;
   12392           1 :                 *QType = 0;
   12393           1 :                 *b_min = FLT2FIX(0);
   12394           1 :                 *b_max = FLT2FIX(1);
   12395             :                 return 1;
   12396           1 :         case 20:
   12397           1 :                 *AType = 0;
   12398           1 :                 *QType = 13;
   12399           1 :                 *QT13_bits = 5;
   12400           1 :                 *b_min = FLT2FIX(0);
   12401           1 :                 *b_max = FLT2FIX(31);
   12402             :                 return 1;
   12403           1 :         case 22:
   12404           1 :                 *AType = 0;
   12405           1 :                 *QType = 0;
   12406           1 :                 *b_min = FLT2FIX(0);
   12407           1 :                 *b_max = FLT2FIX(6.2831853);
   12408             :                 return 1;
   12409           1 :         case 23:
   12410           1 :                 *AType = 0;
   12411           1 :                 *QType = 0;
   12412           1 :                 *b_min = FLT2FIX(0);
   12413           1 :                 *b_max = FLT2FIX(6.2831853);
   12414             :                 return 1;
   12415           1 :         case 24:
   12416           1 :                 *AType = 0;
   12417           1 :                 *QType = 13;
   12418           1 :                 *QT13_bits = 5;
   12419           1 :                 *b_min = FLT2FIX(0);
   12420           1 :                 *b_max = FLT2FIX(31);
   12421             :                 return 1;
   12422           1 :         case 26:
   12423           1 :                 *AType = 0;
   12424           1 :                 *QType = 0;
   12425           1 :                 *b_min = FIX_MIN;
   12426           1 :                 *b_max = FIX_MAX;
   12427             :                 return 1;
   12428           1 :         case 27:
   12429           1 :                 *AType = 0;
   12430           1 :                 *QType = 0;
   12431           1 :                 *b_min = FIX_MIN;
   12432           1 :                 *b_max = FIX_MAX;
   12433             :                 return 1;
   12434           1 :         case 28:
   12435           1 :                 *AType = 0;
   12436           1 :                 *QType = 13;
   12437           1 :                 *QT13_bits = 5;
   12438           1 :                 *b_min = FLT2FIX(0);
   12439           1 :                 *b_max = FLT2FIX(31);
   12440             :                 return 1;
   12441           1 :         case 30:
   12442           1 :                 *AType = 0;
   12443           1 :                 *QType = 0;
   12444           1 :                 *b_min = FIX_MIN;
   12445           1 :                 *b_max = FIX_MAX;
   12446             :                 return 1;
   12447           1 :         case 31:
   12448           1 :                 *AType = 0;
   12449           1 :                 *QType = 0;
   12450           1 :                 *b_min = FIX_MIN;
   12451           1 :                 *b_max = FIX_MAX;
   12452             :                 return 1;
   12453           1 :         case 32:
   12454           1 :                 *AType = 0;
   12455           1 :                 *QType = 13;
   12456           1 :                 *QT13_bits = 5;
   12457           1 :                 *b_min = FLT2FIX(0);
   12458           1 :                 *b_max = FLT2FIX(31);
   12459             :                 return 1;
   12460           1 :         case 34:
   12461           1 :                 *AType = 0;
   12462           1 :                 *QType = 13;
   12463           1 :                 *QT13_bits = 5;
   12464           1 :                 *b_min = FLT2FIX(0);
   12465           1 :                 *b_max = FLT2FIX(31);
   12466             :                 return 1;
   12467           1 :         case 36:
   12468           1 :                 *AType = 0;
   12469           1 :                 *QType = 0;
   12470           1 :                 *b_min = FIX_MIN;
   12471           1 :                 *b_max = FIX_MAX;
   12472             :                 return 1;
   12473           1 :         case 37:
   12474           1 :                 *AType = 0;
   12475           1 :                 *QType = 0;
   12476           1 :                 *b_min = FIX_MIN;
   12477           1 :                 *b_max = FIX_MAX;
   12478             :                 return 1;
   12479           1 :         case 38:
   12480           1 :                 *AType = 0;
   12481           1 :                 *QType = 13;
   12482           1 :                 *QT13_bits = 5;
   12483           1 :                 *b_min = FLT2FIX(0);
   12484           1 :                 *b_max = FLT2FIX(31);
   12485             :                 return 1;
   12486             :         default:
   12487             :                 return 0;
   12488             :         }
   12489             : }
   12490             : 
   12491             : 
   12492             : 
   12493         233 : GF_Node *QuantizationParameter_Create()
   12494             : {
   12495             :         M_QuantizationParameter *p;
   12496         233 :         GF_SAFEALLOC(p, M_QuantizationParameter);
   12497         233 :         if(!p) return NULL;
   12498         233 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_QuantizationParameter);
   12499             : 
   12500             :         /*default field values*/
   12501         233 :         p->position3DMin.x = FIX_MIN;
   12502         233 :         p->position3DMin.y = FIX_MIN;
   12503         233 :         p->position3DMin.z = FIX_MIN;
   12504         233 :         p->position3DMax.x = FIX_MAX;
   12505         233 :         p->position3DMax.y = FIX_MAX;
   12506         233 :         p->position3DMax.z = FIX_MAX;
   12507         233 :         p->position3DNbBits = 16;
   12508         233 :         p->position2DMin.x = FIX_MIN;
   12509         233 :         p->position2DMin.y = FIX_MIN;
   12510         233 :         p->position2DMax.x = FIX_MAX;
   12511         233 :         p->position2DMax.y = FIX_MAX;
   12512         233 :         p->position2DNbBits = 16;
   12513         233 :         p->drawOrderMin = FIX_MIN;
   12514         233 :         p->drawOrderMax = FIX_MAX;
   12515         233 :         p->drawOrderNbBits = 8;
   12516         233 :         p->colorQuant = 1;
   12517         233 :         p->colorMin = FLT2FIX(0.0);
   12518         233 :         p->colorMax = FLT2FIX(1.0);
   12519         233 :         p->colorNbBits = 8;
   12520         233 :         p->textureCoordinateQuant = 1;
   12521         233 :         p->textureCoordinateMin = FLT2FIX(0);
   12522         233 :         p->textureCoordinateMax = FLT2FIX(1);
   12523         233 :         p->textureCoordinateNbBits = 16;
   12524         233 :         p->angleQuant = 1;
   12525         233 :         p->angleMin = FLT2FIX(0.0);
   12526         233 :         p->angleMax = FLT2FIX(6.2831853);
   12527         233 :         p->angleNbBits = 16;
   12528         233 :         p->scaleMin = FLT2FIX(0.0);
   12529         233 :         p->scaleMax = FIX_MAX;
   12530         233 :         p->scaleNbBits = 8;
   12531         233 :         p->keyQuant = 1;
   12532         233 :         p->keyMin = FLT2FIX(0.0);
   12533         233 :         p->keyMax = FLT2FIX(1.0);
   12534         233 :         p->keyNbBits = 8;
   12535         233 :         p->normalQuant = 1;
   12536         233 :         p->normalNbBits = 8;
   12537         233 :         p->sizeMin = FLT2FIX(0);
   12538         233 :         p->sizeMax = FIX_MAX;
   12539         233 :         p->sizeNbBits = 8;
   12540         233 :         return (GF_Node *)p;
   12541             : }
   12542             : 
   12543             : 
   12544             : /*
   12545             :         Rectangle Node deletion
   12546             : */
   12547             : 
   12548             : static void Rectangle_Del(GF_Node *node)
   12549             : {
   12550             :         M_Rectangle *p = (M_Rectangle *) node;
   12551         601 :         gf_node_free((GF_Node *) p);
   12552             : }
   12553             : 
   12554             : static const u16 Rectangle_Def2All[] = { 0};
   12555             : static const u16 Rectangle_In2All[] = { 0};
   12556             : static const u16 Rectangle_Out2All[] = { 0};
   12557             : static const u16 Rectangle_Dyn2All[] = { 0};
   12558             : 
   12559             : static u32 Rectangle_get_field_count(GF_Node *node, u8 IndexMode)
   12560             : {
   12561             :         switch(IndexMode) {
   12562             :         case GF_SG_FIELD_CODING_IN:
   12563             :                 return 1;
   12564             :         case GF_SG_FIELD_CODING_DEF:
   12565             :                 return 1;
   12566             :         case GF_SG_FIELD_CODING_OUT:
   12567             :                 return 1;
   12568             :         case GF_SG_FIELD_CODING_DYN:
   12569             :                 return 1;
   12570             :         default:
   12571             :                 return 1;
   12572             :         }
   12573             : }
   12574             : 
   12575             : static GF_Err Rectangle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12576             : {
   12577         106 :         switch(IndexMode) {
   12578           0 :         case GF_SG_FIELD_CODING_IN:
   12579           0 :                 *allField = Rectangle_In2All[inField];
   12580             :                 return GF_OK;
   12581         105 :         case GF_SG_FIELD_CODING_DEF:
   12582         105 :                 *allField = Rectangle_Def2All[inField];
   12583             :                 return GF_OK;
   12584           0 :         case GF_SG_FIELD_CODING_OUT:
   12585           0 :                 *allField = Rectangle_Out2All[inField];
   12586             :                 return GF_OK;
   12587           0 :         case GF_SG_FIELD_CODING_DYN:
   12588           0 :                 *allField = Rectangle_Dyn2All[inField];
   12589             :                 return GF_OK;
   12590             :         default:
   12591             :                 return GF_BAD_PARAM;
   12592             :         }
   12593             : }
   12594             : static GF_Err Rectangle_get_field(GF_Node *node, GF_FieldInfo *info)
   12595             : {
   12596        1213 :         switch (info->fieldIndex) {
   12597        1213 :         case 0:
   12598        1213 :                 info->name = "size";
   12599        1213 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12600        1213 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   12601        1213 :                 info->far_ptr = & ((M_Rectangle *) node)->size;
   12602             :                 return GF_OK;
   12603             :         default:
   12604             :                 return GF_BAD_PARAM;
   12605             :         }
   12606             : }
   12607             : 
   12608             : 
   12609             : static s32 Rectangle_get_field_index_by_name(char *name)
   12610             : {
   12611         822 :         if (!strcmp("size", name)) return 0;
   12612             :         return -1;
   12613             : }
   12614             : static Bool Rectangle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12615             : {
   12616          16 :         switch (FieldIndex) {
   12617          16 :         case 0:
   12618          16 :                 *AType = 2;
   12619          16 :                 *QType = 12;
   12620          16 :                 *b_min = FLT2FIX(0);
   12621          16 :                 *b_max = FIX_MAX;
   12622             :                 return 1;
   12623             :         default:
   12624             :                 return 0;
   12625             :         }
   12626             : }
   12627             : 
   12628             : 
   12629             : 
   12630         601 : GF_Node *Rectangle_Create()
   12631             : {
   12632             :         M_Rectangle *p;
   12633         601 :         GF_SAFEALLOC(p, M_Rectangle);
   12634         601 :         if(!p) return NULL;
   12635         601 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Rectangle);
   12636             : 
   12637             :         /*default field values*/
   12638         601 :         p->size.x = FLT2FIX(2);
   12639         601 :         p->size.y = FLT2FIX(2);
   12640         601 :         return (GF_Node *)p;
   12641             : }
   12642             : 
   12643             : 
   12644             : /*
   12645             :         ScalarInterpolator Node deletion
   12646             : */
   12647             : 
   12648          71 : static void ScalarInterpolator_Del(GF_Node *node)
   12649             : {
   12650             :         M_ScalarInterpolator *p = (M_ScalarInterpolator *) node;
   12651          71 :         gf_sg_mffloat_del(p->key);
   12652          71 :         gf_sg_mffloat_del(p->keyValue);
   12653          71 :         gf_node_free((GF_Node *) p);
   12654          71 : }
   12655             : 
   12656             : static const u16 ScalarInterpolator_Def2All[] = { 1, 2};
   12657             : static const u16 ScalarInterpolator_In2All[] = { 0, 1, 2};
   12658             : static const u16 ScalarInterpolator_Out2All[] = { 1, 2, 3};
   12659             : 
   12660             : static u32 ScalarInterpolator_get_field_count(GF_Node *node, u8 IndexMode)
   12661             : {
   12662             :         switch(IndexMode) {
   12663             :         case GF_SG_FIELD_CODING_IN:
   12664             :                 return 3;
   12665             :         case GF_SG_FIELD_CODING_DEF:
   12666             :                 return 2;
   12667             :         case GF_SG_FIELD_CODING_OUT:
   12668             :                 return 3;
   12669             :         case GF_SG_FIELD_CODING_DYN:
   12670             :                 return 0;
   12671             :         default:
   12672             :                 return 4;
   12673             :         }
   12674             : }
   12675             : 
   12676             : static GF_Err ScalarInterpolator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12677             : {
   12678           4 :         switch(IndexMode) {
   12679           0 :         case GF_SG_FIELD_CODING_IN:
   12680           0 :                 *allField = ScalarInterpolator_In2All[inField];
   12681             :                 return GF_OK;
   12682           0 :         case GF_SG_FIELD_CODING_DEF:
   12683           0 :                 *allField = ScalarInterpolator_Def2All[inField];
   12684             :                 return GF_OK;
   12685           0 :         case GF_SG_FIELD_CODING_OUT:
   12686           0 :                 *allField = ScalarInterpolator_Out2All[inField];
   12687             :                 return GF_OK;
   12688             :         default:
   12689             :                 return GF_BAD_PARAM;
   12690             :         }
   12691             : }
   12692         372 : static GF_Err ScalarInterpolator_get_field(GF_Node *node, GF_FieldInfo *info)
   12693             : {
   12694         372 :         switch (info->fieldIndex) {
   12695         123 :         case 0:
   12696         123 :                 info->name = "set_fraction";
   12697         123 :                 info->eventType = GF_SG_EVENT_IN;
   12698         123 :                 info->on_event_in = ((M_ScalarInterpolator *)node)->on_set_fraction;
   12699         123 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12700         123 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->set_fraction;
   12701         123 :                 return GF_OK;
   12702          60 :         case 1:
   12703          60 :                 info->name = "key";
   12704          60 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12705          60 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   12706          60 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->key;
   12707          60 :                 return GF_OK;
   12708          60 :         case 2:
   12709          60 :                 info->name = "keyValue";
   12710          60 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12711          60 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   12712          60 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->keyValue;
   12713          60 :                 return GF_OK;
   12714         129 :         case 3:
   12715         129 :                 info->name = "value_changed";
   12716         129 :                 info->eventType = GF_SG_EVENT_OUT;
   12717         129 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   12718         129 :                 info->far_ptr = & ((M_ScalarInterpolator *) node)->value_changed;
   12719         129 :                 return GF_OK;
   12720             :         default:
   12721             :                 return GF_BAD_PARAM;
   12722             :         }
   12723             : }
   12724             : 
   12725             : 
   12726         215 : static s32 ScalarInterpolator_get_field_index_by_name(char *name)
   12727             : {
   12728         215 :         if (!strcmp("set_fraction", name)) return 0;
   12729         164 :         if (!strcmp("key", name)) return 1;
   12730         113 :         if (!strcmp("keyValue", name)) return 2;
   12731          62 :         if (!strcmp("value_changed", name)) return 3;
   12732           0 :         return -1;
   12733             : }
   12734             : static Bool ScalarInterpolator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12735             : {
   12736           4 :         switch (FieldIndex) {
   12737           1 :         case 1:
   12738           1 :                 *AType = 0;
   12739           1 :                 *QType = 8;
   12740           1 :                 *b_min = FLT2FIX(0);
   12741           1 :                 *b_max = FLT2FIX(1);
   12742             :                 return 1;
   12743           1 :         case 2:
   12744           1 :                 *AType = 0;
   12745           1 :                 *QType = 0;
   12746           1 :                 *b_min = FIX_MIN;
   12747           1 :                 *b_max = FIX_MAX;
   12748             :                 return 1;
   12749             :         default:
   12750             :                 return 0;
   12751             :         }
   12752             : }
   12753             : 
   12754             : 
   12755             : 
   12756          71 : GF_Node *ScalarInterpolator_Create()
   12757             : {
   12758             :         M_ScalarInterpolator *p;
   12759          71 :         GF_SAFEALLOC(p, M_ScalarInterpolator);
   12760          71 :         if(!p) return NULL;
   12761          71 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ScalarInterpolator);
   12762             : 
   12763             :         /*default field values*/
   12764          71 :         return (GF_Node *)p;
   12765             : }
   12766             : 
   12767             : 
   12768             : /*
   12769             :         Script Node deletion
   12770             : */
   12771             : 
   12772             : static void Script_Del(GF_Node *node)
   12773             : {
   12774             :         M_Script *p = (M_Script *) node;
   12775         456 :         gf_sg_mfscript_del(p->url);
   12776         456 :         gf_node_free((GF_Node *) p);
   12777             : }
   12778             : 
   12779             : static const u16 Script_Def2All[] = { 0, 1, 2};
   12780             : static const u16 Script_In2All[] = { 0};
   12781             : static const u16 Script_Out2All[] = { 0};
   12782             : 
   12783             : static u32 Script_get_field_count(GF_Node *node, u8 IndexMode)
   12784             : {
   12785             :         switch(IndexMode) {
   12786             :         case GF_SG_FIELD_CODING_IN:
   12787             :                 return 1;
   12788             :         case GF_SG_FIELD_CODING_DEF:
   12789             :                 return 3;
   12790             :         case GF_SG_FIELD_CODING_OUT:
   12791             :                 return 1;
   12792             :         case GF_SG_FIELD_CODING_DYN:
   12793             :                 return 0;
   12794             :         default:
   12795             :                 return 3;
   12796             :         }
   12797             : }
   12798             : 
   12799             : static GF_Err Script_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12800             : {
   12801          78 :         switch(IndexMode) {
   12802           0 :         case GF_SG_FIELD_CODING_IN:
   12803           0 :                 *allField = Script_In2All[inField];
   12804             :                 return GF_OK;
   12805          75 :         case GF_SG_FIELD_CODING_DEF:
   12806          75 :                 *allField = Script_Def2All[inField];
   12807             :                 return GF_OK;
   12808           0 :         case GF_SG_FIELD_CODING_OUT:
   12809           0 :                 *allField = Script_Out2All[inField];
   12810             :                 return GF_OK;
   12811             :         default:
   12812             :                 return GF_BAD_PARAM;
   12813             :         }
   12814             : }
   12815             : static GF_Err Script_get_field(GF_Node *node, GF_FieldInfo *info)
   12816             : {
   12817        5450 :         switch (info->fieldIndex) {
   12818        1863 :         case 0:
   12819        1863 :                 info->name = "url";
   12820        1863 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12821        1863 :                 info->fieldType = GF_SG_VRML_MFSCRIPT;
   12822        1863 :                 info->far_ptr = & ((M_Script *) node)->url;
   12823             :                 return GF_OK;
   12824        1794 :         case 1:
   12825        1794 :                 info->name = "directOutput";
   12826        1794 :                 info->eventType = GF_SG_EVENT_FIELD;
   12827        1794 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12828        1794 :                 info->far_ptr = & ((M_Script *) node)->directOutput;
   12829             :                 return GF_OK;
   12830        1793 :         case 2:
   12831        1793 :                 info->name = "mustEvaluate";
   12832        1793 :                 info->eventType = GF_SG_EVENT_FIELD;
   12833        1793 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   12834        1793 :                 info->far_ptr = & ((M_Script *) node)->mustEvaluate;
   12835             :                 return GF_OK;
   12836             :         default:
   12837             :                 return GF_BAD_PARAM;
   12838             :         }
   12839             : }
   12840             : 
   12841             : 
   12842           0 : static s32 Script_get_field_index_by_name(char *name)
   12843             : {
   12844           0 :         if (!strcmp("url", name)) return 0;
   12845           0 :         if (!strcmp("directOutput", name)) return 1;
   12846           0 :         if (!strcmp("mustEvaluate", name)) return 2;
   12847           0 :         return -1;
   12848             : }
   12849             : static Bool Script_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12850             : {
   12851             :         switch (FieldIndex) {
   12852             :         default:
   12853             :                 return 0;
   12854             :         }
   12855             : }
   12856             : 
   12857             : 
   12858             : 
   12859         456 : GF_Node *Script_Create()
   12860             : {
   12861             :         M_Script *p;
   12862         456 :         GF_SAFEALLOC(p, M_Script);
   12863         456 :         if(!p) return NULL;
   12864         456 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Script);
   12865             : 
   12866             :         /*default field values*/
   12867         456 :         return (GF_Node *)p;
   12868             : }
   12869             : 
   12870             : 
   12871             : /*
   12872             :         Shape Node deletion
   12873             : */
   12874             : 
   12875       11668 : static void Shape_Del(GF_Node *node)
   12876             : {
   12877             :         M_Shape *p = (M_Shape *) node;
   12878       11668 :         gf_node_unregister((GF_Node *) p->appearance, (GF_Node *) p);
   12879       11668 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   12880       11668 :         gf_node_free((GF_Node *) p);
   12881       11668 : }
   12882             : 
   12883             : static const u16 Shape_Def2All[] = { 0, 1};
   12884             : static const u16 Shape_In2All[] = { 0, 1};
   12885             : static const u16 Shape_Out2All[] = { 0, 1};
   12886             : 
   12887             : static u32 Shape_get_field_count(GF_Node *node, u8 IndexMode)
   12888             : {
   12889        9897 :         switch(IndexMode) {
   12890             :         case GF_SG_FIELD_CODING_IN:
   12891             :                 return 2;
   12892             :         case GF_SG_FIELD_CODING_DEF:
   12893             :                 return 2;
   12894             :         case GF_SG_FIELD_CODING_OUT:
   12895             :                 return 2;
   12896           1 :         case GF_SG_FIELD_CODING_DYN:
   12897             :                 return 0;
   12898             :         default:
   12899             :                 return 2;
   12900             :         }
   12901             : }
   12902             : 
   12903             : static GF_Err Shape_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   12904             : {
   12905        7923 :         switch(IndexMode) {
   12906           2 :         case GF_SG_FIELD_CODING_IN:
   12907           2 :                 *allField = Shape_In2All[inField];
   12908             :                 return GF_OK;
   12909        7919 :         case GF_SG_FIELD_CODING_DEF:
   12910        7919 :                 *allField = Shape_Def2All[inField];
   12911             :                 return GF_OK;
   12912           0 :         case GF_SG_FIELD_CODING_OUT:
   12913           0 :                 *allField = Shape_Out2All[inField];
   12914             :                 return GF_OK;
   12915             :         default:
   12916             :                 return GF_BAD_PARAM;
   12917             :         }
   12918             : }
   12919             : static GF_Err Shape_get_field(GF_Node *node, GF_FieldInfo *info)
   12920             : {
   12921       35164 :         switch (info->fieldIndex) {
   12922       14385 :         case 0:
   12923       14385 :                 info->name = "appearance";
   12924       14385 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12925       14385 :                 info->fieldType = GF_SG_VRML_SFNODE;
   12926       14385 :                 info->NDTtype = NDT_SFAppearanceNode;
   12927       14385 :                 info->far_ptr = & ((M_Shape *)node)->appearance;
   12928             :                 return GF_OK;
   12929       20779 :         case 1:
   12930       20779 :                 info->name = "geometry";
   12931       20779 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   12932       20779 :                 info->fieldType = GF_SG_VRML_SFNODE;
   12933       20779 :                 info->NDTtype = NDT_SFGeometryNode;
   12934       20779 :                 info->far_ptr = & ((M_Shape *)node)->geometry;
   12935             :                 return GF_OK;
   12936             :         default:
   12937             :                 return GF_BAD_PARAM;
   12938             :         }
   12939             : }
   12940             : 
   12941             : 
   12942       12594 : static s32 Shape_get_field_index_by_name(char *name)
   12943             : {
   12944       12594 :         if (!strcmp("appearance", name)) return 0;
   12945        9251 :         if (!strcmp("geometry", name)) return 1;
   12946           0 :         return -1;
   12947             : }
   12948             : static Bool Shape_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   12949             : {
   12950             :         switch (FieldIndex) {
   12951             :         default:
   12952             :                 return 0;
   12953             :         }
   12954             : }
   12955             : 
   12956             : 
   12957             : 
   12958       11668 : GF_Node *Shape_Create()
   12959             : {
   12960             :         M_Shape *p;
   12961       11668 :         GF_SAFEALLOC(p, M_Shape);
   12962       11668 :         if(!p) return NULL;
   12963       11668 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Shape);
   12964             : 
   12965             :         /*default field values*/
   12966       11668 :         return (GF_Node *)p;
   12967             : }
   12968             : 
   12969             : 
   12970             : /*
   12971             :         Sound Node deletion
   12972             : */
   12973             : 
   12974             : static void Sound_Del(GF_Node *node)
   12975             : {
   12976             :         M_Sound *p = (M_Sound *) node;
   12977           3 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   12978           3 :         gf_node_free((GF_Node *) p);
   12979             : }
   12980             : 
   12981             : static const u16 Sound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   12982             : static const u16 Sound_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   12983             : static const u16 Sound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   12984             : static const u16 Sound_Dyn2All[] = { 1, 2, 3, 4, 5, 6};
   12985             : 
   12986             : static u32 Sound_get_field_count(GF_Node *node, u8 IndexMode)
   12987             : {
   12988             :         switch(IndexMode) {
   12989             :         case GF_SG_FIELD_CODING_IN:
   12990             :                 return 9;
   12991             :         case GF_SG_FIELD_CODING_DEF:
   12992             :                 return 10;
   12993             :         case GF_SG_FIELD_CODING_OUT:
   12994             :                 return 9;
   12995             :         case GF_SG_FIELD_CODING_DYN:
   12996             :                 return 6;
   12997             :         default:
   12998             :                 return 10;
   12999             :         }
   13000             : }
   13001             : 
   13002             : static GF_Err Sound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13003             : {
   13004          10 :         switch(IndexMode) {
   13005           0 :         case GF_SG_FIELD_CODING_IN:
   13006           0 :                 *allField = Sound_In2All[inField];
   13007             :                 return GF_OK;
   13008           0 :         case GF_SG_FIELD_CODING_DEF:
   13009           0 :                 *allField = Sound_Def2All[inField];
   13010             :                 return GF_OK;
   13011           0 :         case GF_SG_FIELD_CODING_OUT:
   13012           0 :                 *allField = Sound_Out2All[inField];
   13013             :                 return GF_OK;
   13014           0 :         case GF_SG_FIELD_CODING_DYN:
   13015           0 :                 *allField = Sound_Dyn2All[inField];
   13016             :                 return GF_OK;
   13017             :         default:
   13018             :                 return GF_BAD_PARAM;
   13019             :         }
   13020             : }
   13021          26 : static GF_Err Sound_get_field(GF_Node *node, GF_FieldInfo *info)
   13022             : {
   13023          26 :         switch (info->fieldIndex) {
   13024           2 :         case 0:
   13025           2 :                 info->name = "direction";
   13026           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13027           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13028           2 :                 info->far_ptr = & ((M_Sound *) node)->direction;
   13029           2 :                 return GF_OK;
   13030           2 :         case 1:
   13031           2 :                 info->name = "intensity";
   13032           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13033           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13034           2 :                 info->far_ptr = & ((M_Sound *) node)->intensity;
   13035           2 :                 return GF_OK;
   13036           4 :         case 2:
   13037           4 :                 info->name = "location";
   13038           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13039           4 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13040           4 :                 info->far_ptr = & ((M_Sound *) node)->location;
   13041           4 :                 return GF_OK;
   13042           2 :         case 3:
   13043           2 :                 info->name = "maxBack";
   13044           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13045           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13046           2 :                 info->far_ptr = & ((M_Sound *) node)->maxBack;
   13047           2 :                 return GF_OK;
   13048           2 :         case 4:
   13049           2 :                 info->name = "maxFront";
   13050           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13051           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13052           2 :                 info->far_ptr = & ((M_Sound *) node)->maxFront;
   13053           2 :                 return GF_OK;
   13054           2 :         case 5:
   13055           2 :                 info->name = "minBack";
   13056           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13057           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13058           2 :                 info->far_ptr = & ((M_Sound *) node)->minBack;
   13059           2 :                 return GF_OK;
   13060           2 :         case 6:
   13061           2 :                 info->name = "minFront";
   13062           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13063           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13064           2 :                 info->far_ptr = & ((M_Sound *) node)->minFront;
   13065           2 :                 return GF_OK;
   13066           2 :         case 7:
   13067           2 :                 info->name = "priority";
   13068           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13069           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13070           2 :                 info->far_ptr = & ((M_Sound *) node)->priority;
   13071           2 :                 return GF_OK;
   13072           4 :         case 8:
   13073           4 :                 info->name = "source";
   13074           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13075           4 :                 info->fieldType = GF_SG_VRML_SFNODE;
   13076           4 :                 info->NDTtype = NDT_SFAudioNode;
   13077           4 :                 info->far_ptr = & ((M_Sound *)node)->source;
   13078           4 :                 return GF_OK;
   13079           4 :         case 9:
   13080           4 :                 info->name = "spatialize";
   13081           4 :                 info->eventType = GF_SG_EVENT_FIELD;
   13082           4 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13083           4 :                 info->far_ptr = & ((M_Sound *) node)->spatialize;
   13084           4 :                 return GF_OK;
   13085             :         default:
   13086             :                 return GF_BAD_PARAM;
   13087             :         }
   13088             : }
   13089             : 
   13090             : 
   13091          16 : static s32 Sound_get_field_index_by_name(char *name)
   13092             : {
   13093          16 :         if (!strcmp("direction", name)) return 0;
   13094          15 :         if (!strcmp("intensity", name)) return 1;
   13095          14 :         if (!strcmp("location", name)) return 2;
   13096          11 :         if (!strcmp("maxBack", name)) return 3;
   13097          10 :         if (!strcmp("maxFront", name)) return 4;
   13098           9 :         if (!strcmp("minBack", name)) return 5;
   13099           8 :         if (!strcmp("minFront", name)) return 6;
   13100           7 :         if (!strcmp("priority", name)) return 7;
   13101           6 :         if (!strcmp("source", name)) return 8;
   13102           3 :         if (!strcmp("spatialize", name)) return 9;
   13103           0 :         return -1;
   13104             : }
   13105          10 : static Bool Sound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13106             : {
   13107          10 :         switch (FieldIndex) {
   13108           1 :         case 0:
   13109           1 :                 *AType = 0;
   13110           1 :                 *QType = 9;
   13111           1 :                 *b_min = FIX_MIN;
   13112           1 :                 *b_max = FIX_MAX;
   13113             :                 return 1;
   13114           1 :         case 1:
   13115           1 :                 *AType = 7;
   13116           1 :                 *QType = 4;
   13117           1 :                 *b_min = FLT2FIX(0);
   13118           1 :                 *b_max = FLT2FIX(1);
   13119             :                 return 1;
   13120           1 :         case 2:
   13121           1 :                 *AType = 1;
   13122           1 :                 *QType = 1;
   13123           1 :                 *b_min = FIX_MIN;
   13124           1 :                 *b_max = FIX_MAX;
   13125             :                 return 1;
   13126           1 :         case 3:
   13127           1 :                 *AType = 7;
   13128           1 :                 *QType = 11;
   13129           1 :                 *b_min = FLT2FIX(0);
   13130           1 :                 *b_max = FIX_MAX;
   13131             :                 return 1;
   13132           1 :         case 4:
   13133           1 :                 *AType = 7;
   13134           1 :                 *QType = 11;
   13135           1 :                 *b_min = FLT2FIX(0);
   13136           1 :                 *b_max = FIX_MAX;
   13137             :                 return 1;
   13138           1 :         case 5:
   13139           1 :                 *AType = 7;
   13140           1 :                 *QType = 11;
   13141           1 :                 *b_min = FLT2FIX(0);
   13142           1 :                 *b_max = FIX_MAX;
   13143             :                 return 1;
   13144           1 :         case 6:
   13145           1 :                 *AType = 7;
   13146           1 :                 *QType = 11;
   13147           1 :                 *b_min = FLT2FIX(0);
   13148           1 :                 *b_max = FIX_MAX;
   13149             :                 return 1;
   13150           1 :         case 7:
   13151           1 :                 *AType = 0;
   13152           1 :                 *QType = 4;
   13153           1 :                 *b_min = FLT2FIX(0);
   13154           1 :                 *b_max = FLT2FIX(1);
   13155             :                 return 1;
   13156             :         default:
   13157             :                 return 0;
   13158             :         }
   13159             : }
   13160             : 
   13161             : 
   13162             : 
   13163           3 : GF_Node *Sound_Create()
   13164             : {
   13165             :         M_Sound *p;
   13166           3 :         GF_SAFEALLOC(p, M_Sound);
   13167           3 :         if(!p) return NULL;
   13168           3 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Sound);
   13169             : 
   13170             :         /*default field values*/
   13171           3 :         p->direction.x = FLT2FIX(0);
   13172           3 :         p->direction.y = FLT2FIX(0);
   13173           3 :         p->direction.z = FLT2FIX(1);
   13174           3 :         p->intensity = FLT2FIX(1);
   13175           3 :         p->location.x = FLT2FIX(0);
   13176           3 :         p->location.y = FLT2FIX(0);
   13177           3 :         p->location.z = FLT2FIX(0);
   13178           3 :         p->maxBack = FLT2FIX(10);
   13179           3 :         p->maxFront = FLT2FIX(10);
   13180           3 :         p->minBack = FLT2FIX(1);
   13181           3 :         p->minFront = FLT2FIX(1);
   13182           3 :         p->priority = FLT2FIX(0);
   13183           3 :         p->spatialize = 1;
   13184           3 :         return (GF_Node *)p;
   13185             : }
   13186             : 
   13187             : 
   13188             : /*
   13189             :         Sound2D Node deletion
   13190             : */
   13191             : 
   13192             : static void Sound2D_Del(GF_Node *node)
   13193             : {
   13194             :         M_Sound2D *p = (M_Sound2D *) node;
   13195         275 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   13196         275 :         gf_node_free((GF_Node *) p);
   13197             : }
   13198             : 
   13199             : static const u16 Sound2D_Def2All[] = { 0, 1, 2, 3};
   13200             : static const u16 Sound2D_In2All[] = { 0, 1, 2};
   13201             : static const u16 Sound2D_Out2All[] = { 0, 1, 2};
   13202             : static const u16 Sound2D_Dyn2All[] = { 0, 1};
   13203             : 
   13204             : static u32 Sound2D_get_field_count(GF_Node *node, u8 IndexMode)
   13205             : {
   13206             :         switch(IndexMode) {
   13207             :         case GF_SG_FIELD_CODING_IN:
   13208             :                 return 3;
   13209             :         case GF_SG_FIELD_CODING_DEF:
   13210             :                 return 4;
   13211             :         case GF_SG_FIELD_CODING_OUT:
   13212             :                 return 3;
   13213             :         case GF_SG_FIELD_CODING_DYN:
   13214             :                 return 2;
   13215             :         default:
   13216             :                 return 4;
   13217             :         }
   13218             : }
   13219             : 
   13220             : static GF_Err Sound2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13221             : {
   13222          80 :         switch(IndexMode) {
   13223           0 :         case GF_SG_FIELD_CODING_IN:
   13224           0 :                 *allField = Sound2D_In2All[inField];
   13225             :                 return GF_OK;
   13226          76 :         case GF_SG_FIELD_CODING_DEF:
   13227          76 :                 *allField = Sound2D_Def2All[inField];
   13228             :                 return GF_OK;
   13229           0 :         case GF_SG_FIELD_CODING_OUT:
   13230           0 :                 *allField = Sound2D_Out2All[inField];
   13231             :                 return GF_OK;
   13232           0 :         case GF_SG_FIELD_CODING_DYN:
   13233           0 :                 *allField = Sound2D_Dyn2All[inField];
   13234             :                 return GF_OK;
   13235             :         default:
   13236             :                 return GF_BAD_PARAM;
   13237             :         }
   13238             : }
   13239         330 : static GF_Err Sound2D_get_field(GF_Node *node, GF_FieldInfo *info)
   13240             : {
   13241         330 :         switch (info->fieldIndex) {
   13242         110 :         case 0:
   13243         110 :                 info->name = "intensity";
   13244         110 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13245         110 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13246         110 :                 info->far_ptr = & ((M_Sound2D *) node)->intensity;
   13247         110 :                 return GF_OK;
   13248          62 :         case 1:
   13249          62 :                 info->name = "location";
   13250          62 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13251          62 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   13252          62 :                 info->far_ptr = & ((M_Sound2D *) node)->location;
   13253          62 :                 return GF_OK;
   13254          96 :         case 2:
   13255          96 :                 info->name = "source";
   13256          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13257          96 :                 info->fieldType = GF_SG_VRML_SFNODE;
   13258          96 :                 info->NDTtype = NDT_SFAudioNode;
   13259          96 :                 info->far_ptr = & ((M_Sound2D *)node)->source;
   13260          96 :                 return GF_OK;
   13261          62 :         case 3:
   13262          62 :                 info->name = "spatialize";
   13263          62 :                 info->eventType = GF_SG_EVENT_FIELD;
   13264          62 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13265          62 :                 info->far_ptr = & ((M_Sound2D *) node)->spatialize;
   13266          62 :                 return GF_OK;
   13267             :         default:
   13268             :                 return GF_BAD_PARAM;
   13269             :         }
   13270             : }
   13271             : 
   13272             : 
   13273          69 : static s32 Sound2D_get_field_index_by_name(char *name)
   13274             : {
   13275          69 :         if (!strcmp("intensity", name)) return 0;
   13276          29 :         if (!strcmp("location", name)) return 1;
   13277          28 :         if (!strcmp("source", name)) return 2;
   13278           1 :         if (!strcmp("spatialize", name)) return 3;
   13279           0 :         return -1;
   13280             : }
   13281             : static Bool Sound2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13282             : {
   13283           4 :         switch (FieldIndex) {
   13284           1 :         case 0:
   13285           1 :                 *AType = 7;
   13286           1 :                 *QType = 4;
   13287           1 :                 *b_min = FLT2FIX(0);
   13288           1 :                 *b_max = FLT2FIX(1);
   13289             :                 return 1;
   13290           1 :         case 1:
   13291           1 :                 *AType = 2;
   13292           1 :                 *QType = 2;
   13293           1 :                 *b_min = FIX_MIN;
   13294           1 :                 *b_max = FIX_MAX;
   13295             :                 return 1;
   13296             :         default:
   13297             :                 return 0;
   13298             :         }
   13299             : }
   13300             : 
   13301             : 
   13302             : 
   13303         275 : GF_Node *Sound2D_Create()
   13304             : {
   13305             :         M_Sound2D *p;
   13306         275 :         GF_SAFEALLOC(p, M_Sound2D);
   13307         275 :         if(!p) return NULL;
   13308         275 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Sound2D);
   13309             : 
   13310             :         /*default field values*/
   13311         275 :         p->intensity = FLT2FIX(1);
   13312         275 :         p->location.x = FLT2FIX(0);
   13313         275 :         p->location.y = FLT2FIX(0);
   13314         275 :         p->spatialize = 1;
   13315         275 :         return (GF_Node *)p;
   13316             : }
   13317             : 
   13318             : 
   13319             : /*
   13320             :         Sphere Node deletion
   13321             : */
   13322             : 
   13323             : static void Sphere_Del(GF_Node *node)
   13324             : {
   13325             :         M_Sphere *p = (M_Sphere *) node;
   13326          79 :         gf_node_free((GF_Node *) p);
   13327             : }
   13328             : 
   13329             : static const u16 Sphere_Def2All[] = { 0};
   13330             : 
   13331             : static u32 Sphere_get_field_count(GF_Node *node, u8 IndexMode)
   13332             : {
   13333          76 :         switch(IndexMode) {
   13334             :         case GF_SG_FIELD_CODING_IN:
   13335             :                 return 0;
   13336          56 :         case GF_SG_FIELD_CODING_DEF:
   13337             :                 return 1;
   13338             :         case GF_SG_FIELD_CODING_OUT:
   13339             :                 return 0;
   13340             :         case GF_SG_FIELD_CODING_DYN:
   13341             :                 return 0;
   13342          17 :         default:
   13343             :                 return 1;
   13344             :         }
   13345             : }
   13346             : 
   13347             : static GF_Err Sphere_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13348             : {
   13349          36 :         switch(IndexMode) {
   13350          35 :         case GF_SG_FIELD_CODING_DEF:
   13351          35 :                 *allField = Sphere_Def2All[inField];
   13352             :                 return GF_OK;
   13353             :         default:
   13354             :                 return GF_BAD_PARAM;
   13355             :         }
   13356             : }
   13357             : static GF_Err Sphere_get_field(GF_Node *node, GF_FieldInfo *info)
   13358             : {
   13359         142 :         switch (info->fieldIndex) {
   13360         142 :         case 0:
   13361         142 :                 info->name = "radius";
   13362         142 :                 info->eventType = GF_SG_EVENT_FIELD;
   13363         142 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13364         142 :                 info->far_ptr = & ((M_Sphere *) node)->radius;
   13365             :                 return GF_OK;
   13366             :         default:
   13367             :                 return GF_BAD_PARAM;
   13368             :         }
   13369             : }
   13370             : 
   13371             : 
   13372             : static s32 Sphere_get_field_index_by_name(char *name)
   13373             : {
   13374          27 :         if (!strcmp("radius", name)) return 0;
   13375             :         return -1;
   13376             : }
   13377             : static Bool Sphere_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13378             : {
   13379           9 :         switch (FieldIndex) {
   13380           9 :         case 0:
   13381           9 :                 *AType = 0;
   13382           9 :                 *QType = 11;
   13383           9 :                 *b_min = FLT2FIX(0);
   13384           9 :                 *b_max = FIX_MAX;
   13385             :                 return 1;
   13386             :         default:
   13387             :                 return 0;
   13388             :         }
   13389             : }
   13390             : 
   13391             : 
   13392             : 
   13393          79 : GF_Node *Sphere_Create()
   13394             : {
   13395             :         M_Sphere *p;
   13396          79 :         GF_SAFEALLOC(p, M_Sphere);
   13397          79 :         if(!p) return NULL;
   13398          79 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Sphere);
   13399             : 
   13400             :         /*default field values*/
   13401          79 :         p->radius = FLT2FIX(1);
   13402          79 :         return (GF_Node *)p;
   13403             : }
   13404             : 
   13405             : 
   13406             : /*
   13407             :         SphereSensor Node deletion
   13408             : */
   13409             : 
   13410             : static void SphereSensor_Del(GF_Node *node)
   13411             : {
   13412             :         M_SphereSensor *p = (M_SphereSensor *) node;
   13413          67 :         gf_node_free((GF_Node *) p);
   13414             : }
   13415             : 
   13416             : static const u16 SphereSensor_Def2All[] = { 0, 1, 2};
   13417             : static const u16 SphereSensor_In2All[] = { 0, 1, 2};
   13418             : static const u16 SphereSensor_Out2All[] = { 0, 1, 2, 3, 4, 5};
   13419             : 
   13420             : static u32 SphereSensor_get_field_count(GF_Node *node, u8 IndexMode)
   13421             : {
   13422             :         switch(IndexMode) {
   13423             :         case GF_SG_FIELD_CODING_IN:
   13424             :                 return 3;
   13425             :         case GF_SG_FIELD_CODING_DEF:
   13426             :                 return 3;
   13427             :         case GF_SG_FIELD_CODING_OUT:
   13428             :                 return 6;
   13429             :         case GF_SG_FIELD_CODING_DYN:
   13430             :                 return 0;
   13431             :         default:
   13432             :                 return 6;
   13433             :         }
   13434             : }
   13435             : 
   13436             : static GF_Err SphereSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13437             : {
   13438          66 :         switch(IndexMode) {
   13439           0 :         case GF_SG_FIELD_CODING_IN:
   13440           0 :                 *allField = SphereSensor_In2All[inField];
   13441             :                 return GF_OK;
   13442          60 :         case GF_SG_FIELD_CODING_DEF:
   13443          60 :                 *allField = SphereSensor_Def2All[inField];
   13444             :                 return GF_OK;
   13445           0 :         case GF_SG_FIELD_CODING_OUT:
   13446           0 :                 *allField = SphereSensor_Out2All[inField];
   13447             :                 return GF_OK;
   13448             :         default:
   13449             :                 return GF_BAD_PARAM;
   13450             :         }
   13451             : }
   13452         275 : static GF_Err SphereSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   13453             : {
   13454         275 :         switch (info->fieldIndex) {
   13455          72 :         case 0:
   13456          72 :                 info->name = "autoOffset";
   13457          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13458          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13459          72 :                 info->far_ptr = & ((M_SphereSensor *) node)->autoOffset;
   13460          72 :                 return GF_OK;
   13461          72 :         case 1:
   13462          72 :                 info->name = "enabled";
   13463          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13464          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13465          72 :                 info->far_ptr = & ((M_SphereSensor *) node)->enabled;
   13466          72 :                 return GF_OK;
   13467          72 :         case 2:
   13468          72 :                 info->name = "offset";
   13469          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13470          72 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   13471          72 :                 info->far_ptr = & ((M_SphereSensor *) node)->offset;
   13472          72 :                 return GF_OK;
   13473          21 :         case 3:
   13474          21 :                 info->name = "isActive";
   13475          21 :                 info->eventType = GF_SG_EVENT_OUT;
   13476          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13477          21 :                 info->far_ptr = & ((M_SphereSensor *) node)->isActive;
   13478          21 :                 return GF_OK;
   13479          19 :         case 4:
   13480          19 :                 info->name = "rotation_changed";
   13481          19 :                 info->eventType = GF_SG_EVENT_OUT;
   13482          19 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   13483          19 :                 info->far_ptr = & ((M_SphereSensor *) node)->rotation_changed;
   13484          19 :                 return GF_OK;
   13485          19 :         case 5:
   13486          19 :                 info->name = "trackPoint_changed";
   13487          19 :                 info->eventType = GF_SG_EVENT_OUT;
   13488          19 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13489          19 :                 info->far_ptr = & ((M_SphereSensor *) node)->trackPoint_changed;
   13490          19 :                 return GF_OK;
   13491             :         default:
   13492             :                 return GF_BAD_PARAM;
   13493             :         }
   13494             : }
   13495             : 
   13496             : 
   13497          10 : static s32 SphereSensor_get_field_index_by_name(char *name)
   13498             : {
   13499          10 :         if (!strcmp("autoOffset", name)) return 0;
   13500           9 :         if (!strcmp("enabled", name)) return 1;
   13501           8 :         if (!strcmp("offset", name)) return 2;
   13502           7 :         if (!strcmp("isActive", name)) return 3;
   13503           4 :         if (!strcmp("rotation_changed", name)) return 4;
   13504           2 :         if (!strcmp("trackPoint_changed", name)) return 5;
   13505           0 :         return -1;
   13506             : }
   13507             : static Bool SphereSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13508             : {
   13509           6 :         switch (FieldIndex) {
   13510           1 :         case 2:
   13511           1 :                 *AType = 0;
   13512           1 :                 *QType = 10;
   13513           1 :                 *b_min = FIX_MIN;
   13514           1 :                 *b_max = FIX_MAX;
   13515             :                 return 1;
   13516             :         default:
   13517             :                 return 0;
   13518             :         }
   13519             : }
   13520             : 
   13521             : 
   13522             : 
   13523          67 : GF_Node *SphereSensor_Create()
   13524             : {
   13525             :         M_SphereSensor *p;
   13526          67 :         GF_SAFEALLOC(p, M_SphereSensor);
   13527          67 :         if(!p) return NULL;
   13528          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SphereSensor);
   13529             : 
   13530             :         /*default field values*/
   13531          67 :         p->autoOffset = 1;
   13532          67 :         p->enabled = 1;
   13533          67 :         p->offset.x = FLT2FIX(0);
   13534          67 :         p->offset.y = FLT2FIX(1);
   13535          67 :         p->offset.z = FLT2FIX(0);
   13536          67 :         p->offset.q = FLT2FIX(0);
   13537          67 :         return (GF_Node *)p;
   13538             : }
   13539             : 
   13540             : 
   13541             : /*
   13542             :         SpotLight Node deletion
   13543             : */
   13544             : 
   13545             : static void SpotLight_Del(GF_Node *node)
   13546             : {
   13547             :         M_SpotLight *p = (M_SpotLight *) node;
   13548           2 :         gf_node_free((GF_Node *) p);
   13549             : }
   13550             : 
   13551             : static const u16 SpotLight_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   13552             : static const u16 SpotLight_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   13553             : static const u16 SpotLight_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   13554             : static const u16 SpotLight_Dyn2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 9};
   13555             : 
   13556             : static u32 SpotLight_get_field_count(GF_Node *node, u8 IndexMode)
   13557             : {
   13558           6 :         switch(IndexMode) {
   13559             :         case GF_SG_FIELD_CODING_IN:
   13560             :                 return 10;
   13561             :         case GF_SG_FIELD_CODING_DEF:
   13562             :                 return 10;
   13563             :         case GF_SG_FIELD_CODING_OUT:
   13564             :                 return 10;
   13565           1 :         case GF_SG_FIELD_CODING_DYN:
   13566             :                 return 9;
   13567             :         default:
   13568             :                 return 10;
   13569             :         }
   13570             : }
   13571             : 
   13572             : static GF_Err SpotLight_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13573             : {
   13574          10 :         switch(IndexMode) {
   13575           0 :         case GF_SG_FIELD_CODING_IN:
   13576           0 :                 *allField = SpotLight_In2All[inField];
   13577             :                 return GF_OK;
   13578           0 :         case GF_SG_FIELD_CODING_DEF:
   13579           0 :                 *allField = SpotLight_Def2All[inField];
   13580             :                 return GF_OK;
   13581           0 :         case GF_SG_FIELD_CODING_OUT:
   13582           0 :                 *allField = SpotLight_Out2All[inField];
   13583             :                 return GF_OK;
   13584           0 :         case GF_SG_FIELD_CODING_DYN:
   13585           0 :                 *allField = SpotLight_Dyn2All[inField];
   13586             :                 return GF_OK;
   13587             :         default:
   13588             :                 return GF_BAD_PARAM;
   13589             :         }
   13590             : }
   13591          25 : static GF_Err SpotLight_get_field(GF_Node *node, GF_FieldInfo *info)
   13592             : {
   13593          25 :         switch (info->fieldIndex) {
   13594           2 :         case 0:
   13595           2 :                 info->name = "ambientIntensity";
   13596           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13597           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13598           2 :                 info->far_ptr = & ((M_SpotLight *) node)->ambientIntensity;
   13599           2 :                 return GF_OK;
   13600           2 :         case 1:
   13601           2 :                 info->name = "attenuation";
   13602           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13603           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13604           2 :                 info->far_ptr = & ((M_SpotLight *) node)->attenuation;
   13605           2 :                 return GF_OK;
   13606           2 :         case 2:
   13607           2 :                 info->name = "beamWidth";
   13608           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13609           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13610           2 :                 info->far_ptr = & ((M_SpotLight *) node)->beamWidth;
   13611           2 :                 return GF_OK;
   13612           3 :         case 3:
   13613           3 :                 info->name = "color";
   13614           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13615           3 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   13616           3 :                 info->far_ptr = & ((M_SpotLight *) node)->color;
   13617           3 :                 return GF_OK;
   13618           2 :         case 4:
   13619           2 :                 info->name = "cutOffAngle";
   13620           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13621           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13622           2 :                 info->far_ptr = & ((M_SpotLight *) node)->cutOffAngle;
   13623           2 :                 return GF_OK;
   13624           5 :         case 5:
   13625           5 :                 info->name = "direction";
   13626           5 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13627           5 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13628           5 :                 info->far_ptr = & ((M_SpotLight *) node)->direction;
   13629           5 :                 return GF_OK;
   13630           2 :         case 6:
   13631           2 :                 info->name = "intensity";
   13632           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13633           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13634           2 :                 info->far_ptr = & ((M_SpotLight *) node)->intensity;
   13635           2 :                 return GF_OK;
   13636           3 :         case 7:
   13637           3 :                 info->name = "location";
   13638           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13639           3 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   13640           3 :                 info->far_ptr = & ((M_SpotLight *) node)->location;
   13641           3 :                 return GF_OK;
   13642           2 :         case 8:
   13643           2 :                 info->name = "on";
   13644           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13645           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   13646           2 :                 info->far_ptr = & ((M_SpotLight *) node)->on;
   13647           2 :                 return GF_OK;
   13648           2 :         case 9:
   13649           2 :                 info->name = "radius";
   13650           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13651           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   13652           2 :                 info->far_ptr = & ((M_SpotLight *) node)->radius;
   13653           2 :                 return GF_OK;
   13654             :         default:
   13655             :                 return GF_BAD_PARAM;
   13656             :         }
   13657             : }
   13658             : 
   13659             : 
   13660          14 : static s32 SpotLight_get_field_index_by_name(char *name)
   13661             : {
   13662          14 :         if (!strcmp("ambientIntensity", name)) return 0;
   13663          13 :         if (!strcmp("attenuation", name)) return 1;
   13664          12 :         if (!strcmp("beamWidth", name)) return 2;
   13665          11 :         if (!strcmp("color", name)) return 3;
   13666           9 :         if (!strcmp("cutOffAngle", name)) return 4;
   13667           8 :         if (!strcmp("direction", name)) return 5;
   13668           5 :         if (!strcmp("intensity", name)) return 6;
   13669           4 :         if (!strcmp("location", name)) return 7;
   13670           2 :         if (!strcmp("on", name)) return 8;
   13671           1 :         if (!strcmp("radius", name)) return 9;
   13672           0 :         return -1;
   13673             : }
   13674          10 : static Bool SpotLight_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13675             : {
   13676          10 :         switch (FieldIndex) {
   13677           1 :         case 0:
   13678           1 :                 *AType = 8;
   13679           1 :                 *QType = 4;
   13680           1 :                 *b_min = FLT2FIX(0);
   13681           1 :                 *b_max = FLT2FIX(1);
   13682             :                 return 1;
   13683           1 :         case 1:
   13684           1 :                 *AType = 1;
   13685           1 :                 *QType = 11;
   13686           1 :                 *b_min = FLT2FIX(0);
   13687           1 :                 *b_max = FIX_MAX;
   13688             :                 return 1;
   13689           1 :         case 2:
   13690           1 :                 *AType = 8;
   13691           1 :                 *QType = 6;
   13692           1 :                 *b_min = FLT2FIX(0);
   13693           1 :                 *b_max = FLT2FIX(1.5707963);
   13694             :                 return 1;
   13695           1 :         case 3:
   13696           1 :                 *AType = 4;
   13697           1 :                 *QType = 4;
   13698           1 :                 *b_min = FLT2FIX(0);
   13699           1 :                 *b_max = FLT2FIX(1);
   13700             :                 return 1;
   13701           1 :         case 4:
   13702           1 :                 *AType = 8;
   13703           1 :                 *QType = 6;
   13704           1 :                 *b_min = FLT2FIX(0);
   13705           1 :                 *b_max = FLT2FIX(1.5707963);
   13706             :                 return 1;
   13707           1 :         case 5:
   13708           1 :                 *AType = 9;
   13709           1 :                 *QType = 9;
   13710           1 :                 *b_min = FIX_MIN;
   13711           1 :                 *b_max = FIX_MAX;
   13712             :                 return 1;
   13713           1 :         case 6:
   13714           1 :                 *AType = 8;
   13715           1 :                 *QType = 4;
   13716           1 :                 *b_min = FLT2FIX(0);
   13717           1 :                 *b_max = FLT2FIX(1);
   13718             :                 return 1;
   13719           1 :         case 7:
   13720           1 :                 *AType = 1;
   13721           1 :                 *QType = 1;
   13722           1 :                 *b_min = FIX_MIN;
   13723           1 :                 *b_max = FIX_MAX;
   13724             :                 return 1;
   13725           1 :         case 9:
   13726           1 :                 *AType = 7;
   13727           1 :                 *QType = 11;
   13728           1 :                 *b_min = FLT2FIX(0);
   13729           1 :                 *b_max = FIX_MAX;
   13730             :                 return 1;
   13731             :         default:
   13732             :                 return 0;
   13733             :         }
   13734             : }
   13735             : 
   13736             : 
   13737             : 
   13738           2 : GF_Node *SpotLight_Create()
   13739             : {
   13740             :         M_SpotLight *p;
   13741           2 :         GF_SAFEALLOC(p, M_SpotLight);
   13742           2 :         if(!p) return NULL;
   13743           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SpotLight);
   13744             : 
   13745             :         /*default field values*/
   13746           2 :         p->ambientIntensity = FLT2FIX(0);
   13747           2 :         p->attenuation.x = FLT2FIX(1);
   13748           2 :         p->attenuation.y = FLT2FIX(0);
   13749           2 :         p->attenuation.z = FLT2FIX(0);
   13750           2 :         p->beamWidth = FLT2FIX(1.570796);
   13751           2 :         p->color.red = FLT2FIX(1);
   13752           2 :         p->color.green = FLT2FIX(1);
   13753           2 :         p->color.blue = FLT2FIX(1);
   13754           2 :         p->cutOffAngle = FLT2FIX(0.785398);
   13755           2 :         p->direction.x = FLT2FIX(0);
   13756           2 :         p->direction.y = FLT2FIX(0);
   13757           2 :         p->direction.z = FLT2FIX(-1);
   13758           2 :         p->intensity = FLT2FIX(1);
   13759           2 :         p->location.x = FLT2FIX(0);
   13760           2 :         p->location.y = FLT2FIX(0);
   13761           2 :         p->location.z = FLT2FIX(0);
   13762           2 :         p->on = 1;
   13763           2 :         p->radius = FLT2FIX(100);
   13764           2 :         return (GF_Node *)p;
   13765             : }
   13766             : 
   13767             : 
   13768             : /*
   13769             :         Switch Node deletion
   13770             : */
   13771             : 
   13772             : static void Switch_Del(GF_Node *node)
   13773             : {
   13774             :         M_Switch *p = (M_Switch *) node;
   13775         540 :         gf_node_unregister_children((GF_Node *) p, p->choice);
   13776         540 :         gf_node_free((GF_Node *) p);
   13777             : }
   13778             : 
   13779             : static const u16 Switch_Def2All[] = { 0, 1};
   13780             : static const u16 Switch_In2All[] = { 0, 1};
   13781             : static const u16 Switch_Out2All[] = { 0, 1};
   13782             : 
   13783             : static u32 Switch_get_field_count(GF_Node *node, u8 IndexMode)
   13784             : {
   13785        1495 :         switch(IndexMode) {
   13786             :         case GF_SG_FIELD_CODING_IN:
   13787             :                 return 2;
   13788             :         case GF_SG_FIELD_CODING_DEF:
   13789             :                 return 2;
   13790             :         case GF_SG_FIELD_CODING_OUT:
   13791             :                 return 2;
   13792           1 :         case GF_SG_FIELD_CODING_DYN:
   13793             :                 return 0;
   13794             :         default:
   13795             :                 return 2;
   13796             :         }
   13797             : }
   13798             : 
   13799             : static GF_Err Switch_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13800             : {
   13801         666 :         switch(IndexMode) {
   13802         531 :         case GF_SG_FIELD_CODING_IN:
   13803         531 :                 *allField = Switch_In2All[inField];
   13804             :                 return GF_OK;
   13805         133 :         case GF_SG_FIELD_CODING_DEF:
   13806         133 :                 *allField = Switch_Def2All[inField];
   13807             :                 return GF_OK;
   13808           0 :         case GF_SG_FIELD_CODING_OUT:
   13809           0 :                 *allField = Switch_Out2All[inField];
   13810             :                 return GF_OK;
   13811             :         default:
   13812             :                 return GF_BAD_PARAM;
   13813             :         }
   13814             : }
   13815             : static GF_Err Switch_get_field(GF_Node *node, GF_FieldInfo *info)
   13816             : {
   13817        3399 :         switch (info->fieldIndex) {
   13818        1370 :         case 0:
   13819        1370 :                 info->name = "choice";
   13820        1370 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13821        1370 :                 info->fieldType = GF_SG_VRML_MFNODE;
   13822        1370 :                 info->NDTtype = NDT_SF3DNode;
   13823        1370 :                 info->far_ptr = & ((M_Switch *)node)->choice;
   13824             :                 return GF_OK;
   13825        2029 :         case 1:
   13826        2029 :                 info->name = "whichChoice";
   13827        2029 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13828        2029 :                 info->fieldType = GF_SG_VRML_SFINT32;
   13829        2029 :                 info->far_ptr = & ((M_Switch *) node)->whichChoice;
   13830             :                 return GF_OK;
   13831             :         default:
   13832             :                 return GF_BAD_PARAM;
   13833             :         }
   13834             : }
   13835             : 
   13836             : 
   13837         260 : static s32 Switch_get_field_index_by_name(char *name)
   13838             : {
   13839         260 :         if (!strcmp("choice", name)) return 0;
   13840         184 :         if (!strcmp("whichChoice", name)) return 1;
   13841           0 :         return -1;
   13842             : }
   13843             : static Bool Switch_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13844             : {
   13845          10 :         switch (FieldIndex) {
   13846           9 :         case 1:
   13847           9 :                 *AType = 0;
   13848           9 :                 *QType = 13;
   13849           9 :                 *QT13_bits = 10;
   13850           9 :                 *b_min = FLT2FIX(-1);
   13851           9 :                 *b_max = FLT2FIX( 1022);
   13852             :                 return 1;
   13853             :         default:
   13854             :                 return 0;
   13855             :         }
   13856             : }
   13857             : 
   13858             : 
   13859             : 
   13860         540 : GF_Node *Switch_Create()
   13861             : {
   13862             :         M_Switch *p;
   13863         540 :         GF_SAFEALLOC(p, M_Switch);
   13864         540 :         if(!p) return NULL;
   13865         540 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Switch);
   13866             : 
   13867             :         /*default field values*/
   13868         540 :         p->whichChoice = -1;
   13869         540 :         return (GF_Node *)p;
   13870             : }
   13871             : 
   13872             : 
   13873             : /*
   13874             :         TermCap Node deletion
   13875             : */
   13876             : 
   13877             : static void TermCap_Del(GF_Node *node)
   13878             : {
   13879             :         M_TermCap *p = (M_TermCap *) node;
   13880           2 :         gf_node_free((GF_Node *) p);
   13881             : }
   13882             : 
   13883             : static const u16 TermCap_Def2All[] = { 1};
   13884             : static const u16 TermCap_In2All[] = { 0, 1};
   13885             : static const u16 TermCap_Out2All[] = { 1, 2};
   13886             : 
   13887             : static u32 TermCap_get_field_count(GF_Node *node, u8 IndexMode)
   13888             : {
   13889             :         switch(IndexMode) {
   13890             :         case GF_SG_FIELD_CODING_IN:
   13891             :                 return 2;
   13892             :         case GF_SG_FIELD_CODING_DEF:
   13893             :                 return 1;
   13894             :         case GF_SG_FIELD_CODING_OUT:
   13895             :                 return 2;
   13896             :         case GF_SG_FIELD_CODING_DYN:
   13897             :                 return 0;
   13898             :         default:
   13899             :                 return 3;
   13900             :         }
   13901             : }
   13902             : 
   13903             : static GF_Err TermCap_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   13904             : {
   13905           3 :         switch(IndexMode) {
   13906           0 :         case GF_SG_FIELD_CODING_IN:
   13907           0 :                 *allField = TermCap_In2All[inField];
   13908             :                 return GF_OK;
   13909           0 :         case GF_SG_FIELD_CODING_DEF:
   13910           0 :                 *allField = TermCap_Def2All[inField];
   13911             :                 return GF_OK;
   13912           0 :         case GF_SG_FIELD_CODING_OUT:
   13913           0 :                 *allField = TermCap_Out2All[inField];
   13914             :                 return GF_OK;
   13915             :         default:
   13916             :                 return GF_BAD_PARAM;
   13917             :         }
   13918             : }
   13919             : static GF_Err TermCap_get_field(GF_Node *node, GF_FieldInfo *info)
   13920             : {
   13921           6 :         switch (info->fieldIndex) {
   13922           2 :         case 0:
   13923           2 :                 info->name = "evaluate";
   13924           2 :                 info->eventType = GF_SG_EVENT_IN;
   13925           2 :                 info->on_event_in = ((M_TermCap *)node)->on_evaluate;
   13926           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   13927           2 :                 info->far_ptr = & ((M_TermCap *) node)->evaluate;
   13928             :                 return GF_OK;
   13929           2 :         case 1:
   13930           2 :                 info->name = "capability";
   13931           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   13932           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   13933           2 :                 info->far_ptr = & ((M_TermCap *) node)->capability;
   13934             :                 return GF_OK;
   13935           2 :         case 2:
   13936           2 :                 info->name = "value";
   13937           2 :                 info->eventType = GF_SG_EVENT_OUT;
   13938           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   13939           2 :                 info->far_ptr = & ((M_TermCap *) node)->value;
   13940             :                 return GF_OK;
   13941             :         default:
   13942             :                 return GF_BAD_PARAM;
   13943             :         }
   13944             : }
   13945             : 
   13946             : 
   13947           3 : static s32 TermCap_get_field_index_by_name(char *name)
   13948             : {
   13949           3 :         if (!strcmp("evaluate", name)) return 0;
   13950           2 :         if (!strcmp("capability", name)) return 1;
   13951           1 :         if (!strcmp("value", name)) return 2;
   13952           0 :         return -1;
   13953             : }
   13954             : static Bool TermCap_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   13955             : {
   13956           3 :         switch (FieldIndex) {
   13957           1 :         case 1:
   13958           1 :                 *AType = 0;
   13959           1 :                 *QType = 13;
   13960           1 :                 *QT13_bits = 7;
   13961           1 :                 *b_min = FLT2FIX(0);
   13962           1 :                 *b_max = FLT2FIX(127);
   13963             :                 return 1;
   13964           1 :         case 2:
   13965           1 :                 *AType = 0;
   13966           1 :                 *QType = 13;
   13967           1 :                 *QT13_bits = 3;
   13968           1 :                 *b_min = FLT2FIX(0);
   13969           1 :                 *b_max = FLT2FIX(7);
   13970             :                 return 1;
   13971             :         default:
   13972             :                 return 0;
   13973             :         }
   13974             : }
   13975             : 
   13976             : 
   13977             : 
   13978           2 : GF_Node *TermCap_Create()
   13979             : {
   13980             :         M_TermCap *p;
   13981           2 :         GF_SAFEALLOC(p, M_TermCap);
   13982           2 :         if(!p) return NULL;
   13983           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TermCap);
   13984             : 
   13985             :         /*default field values*/
   13986           2 :         p->capability = 0;
   13987           2 :         return (GF_Node *)p;
   13988             : }
   13989             : 
   13990             : 
   13991             : /*
   13992             :         Text Node deletion
   13993             : */
   13994             : 
   13995        1103 : static void Text_Del(GF_Node *node)
   13996             : {
   13997             :         M_Text *p = (M_Text *) node;
   13998        1103 :         gf_sg_mfstring_del(p->string);
   13999        1103 :         gf_sg_mffloat_del(p->length);
   14000        1103 :         gf_node_unregister((GF_Node *) p->fontStyle, (GF_Node *) p);
   14001        1103 :         gf_node_free((GF_Node *) p);
   14002        1103 : }
   14003             : 
   14004             : static const u16 Text_Def2All[] = { 0, 1, 2, 3};
   14005             : static const u16 Text_In2All[] = { 0, 1, 2, 3};
   14006             : static const u16 Text_Out2All[] = { 0, 1, 2, 3};
   14007             : static const u16 Text_Dyn2All[] = { 1, 3};
   14008             : 
   14009             : static u32 Text_get_field_count(GF_Node *node, u8 IndexMode)
   14010             : {
   14011         170 :         switch(IndexMode) {
   14012             :         case GF_SG_FIELD_CODING_IN:
   14013             :                 return 4;
   14014             :         case GF_SG_FIELD_CODING_DEF:
   14015             :                 return 4;
   14016             :         case GF_SG_FIELD_CODING_OUT:
   14017             :                 return 4;
   14018           1 :         case GF_SG_FIELD_CODING_DYN:
   14019             :                 return 2;
   14020             :         default:
   14021             :                 return 4;
   14022             :         }
   14023             : }
   14024             : 
   14025             : static GF_Err Text_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14026             : {
   14027         185 :         switch(IndexMode) {
   14028           0 :         case GF_SG_FIELD_CODING_IN:
   14029           0 :                 *allField = Text_In2All[inField];
   14030             :                 return GF_OK;
   14031         181 :         case GF_SG_FIELD_CODING_DEF:
   14032         181 :                 *allField = Text_Def2All[inField];
   14033             :                 return GF_OK;
   14034           0 :         case GF_SG_FIELD_CODING_OUT:
   14035           0 :                 *allField = Text_Out2All[inField];
   14036             :                 return GF_OK;
   14037           0 :         case GF_SG_FIELD_CODING_DYN:
   14038           0 :                 *allField = Text_Dyn2All[inField];
   14039             :                 return GF_OK;
   14040             :         default:
   14041             :                 return GF_BAD_PARAM;
   14042             :         }
   14043             : }
   14044        4698 : static GF_Err Text_get_field(GF_Node *node, GF_FieldInfo *info)
   14045             : {
   14046        4698 :         switch (info->fieldIndex) {
   14047        2244 :         case 0:
   14048        2244 :                 info->name = "string";
   14049        2244 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14050        2244 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   14051        2244 :                 info->far_ptr = & ((M_Text *) node)->string;
   14052        2244 :                 return GF_OK;
   14053         223 :         case 1:
   14054         223 :                 info->name = "length";
   14055         223 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14056         223 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   14057         223 :                 info->far_ptr = & ((M_Text *) node)->length;
   14058         223 :                 return GF_OK;
   14059        1710 :         case 2:
   14060        1710 :                 info->name = "fontStyle";
   14061        1710 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14062        1710 :                 info->fieldType = GF_SG_VRML_SFNODE;
   14063        1710 :                 info->NDTtype = NDT_SFFontStyleNode;
   14064        1710 :                 info->far_ptr = & ((M_Text *)node)->fontStyle;
   14065        1710 :                 return GF_OK;
   14066         521 :         case 3:
   14067         521 :                 info->name = "maxExtent";
   14068         521 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14069         521 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14070         521 :                 info->far_ptr = & ((M_Text *) node)->maxExtent;
   14071         521 :                 return GF_OK;
   14072             :         default:
   14073             :                 return GF_BAD_PARAM;
   14074             :         }
   14075             : }
   14076             : 
   14077             : 
   14078        3601 : static s32 Text_get_field_index_by_name(char *name)
   14079             : {
   14080        3601 :         if (!strcmp("string", name)) return 0;
   14081        1809 :         if (!strcmp("length", name)) return 1;
   14082        1796 :         if (!strcmp("fontStyle", name)) return 2;
   14083         311 :         if (!strcmp("maxExtent", name)) return 3;
   14084           0 :         return -1;
   14085             : }
   14086             : static Bool Text_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14087             : {
   14088           4 :         switch (FieldIndex) {
   14089           1 :         case 1:
   14090           1 :                 *AType = 7;
   14091           1 :                 *QType = 11;
   14092           1 :                 *b_min = FLT2FIX(0);
   14093           1 :                 *b_max = FIX_MAX;
   14094             :                 return 1;
   14095           1 :         case 3:
   14096           1 :                 *AType = 7;
   14097           1 :                 *QType = 11;
   14098           1 :                 *b_min = FLT2FIX(0);
   14099           1 :                 *b_max = FIX_MAX;
   14100             :                 return 1;
   14101             :         default:
   14102             :                 return 0;
   14103             :         }
   14104             : }
   14105             : 
   14106             : 
   14107             : 
   14108        1103 : GF_Node *Text_Create()
   14109             : {
   14110             :         M_Text *p;
   14111        1103 :         GF_SAFEALLOC(p, M_Text);
   14112        1103 :         if(!p) return NULL;
   14113        1103 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Text);
   14114             : 
   14115             :         /*default field values*/
   14116        1103 :         p->maxExtent = FLT2FIX(0.0);
   14117        1103 :         return (GF_Node *)p;
   14118             : }
   14119             : 
   14120             : 
   14121             : /*
   14122             :         TextureCoordinate Node deletion
   14123             : */
   14124             : 
   14125             : static void TextureCoordinate_Del(GF_Node *node)
   14126             : {
   14127             :         M_TextureCoordinate *p = (M_TextureCoordinate *) node;
   14128           1 :         gf_sg_mfvec2f_del(p->point);
   14129           1 :         gf_node_free((GF_Node *) p);
   14130             : }
   14131             : 
   14132             : static const u16 TextureCoordinate_Def2All[] = { 0};
   14133             : static const u16 TextureCoordinate_In2All[] = { 0};
   14134             : static const u16 TextureCoordinate_Out2All[] = { 0};
   14135             : static const u16 TextureCoordinate_Dyn2All[] = { 0};
   14136             : 
   14137             : static u32 TextureCoordinate_get_field_count(GF_Node *node, u8 IndexMode)
   14138             : {
   14139             :         switch(IndexMode) {
   14140             :         case GF_SG_FIELD_CODING_IN:
   14141             :                 return 1;
   14142             :         case GF_SG_FIELD_CODING_DEF:
   14143             :                 return 1;
   14144             :         case GF_SG_FIELD_CODING_OUT:
   14145             :                 return 1;
   14146             :         case GF_SG_FIELD_CODING_DYN:
   14147             :                 return 1;
   14148             :         default:
   14149             :                 return 1;
   14150             :         }
   14151             : }
   14152             : 
   14153             : static GF_Err TextureCoordinate_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14154             : {
   14155           1 :         switch(IndexMode) {
   14156           0 :         case GF_SG_FIELD_CODING_IN:
   14157           0 :                 *allField = TextureCoordinate_In2All[inField];
   14158             :                 return GF_OK;
   14159           0 :         case GF_SG_FIELD_CODING_DEF:
   14160           0 :                 *allField = TextureCoordinate_Def2All[inField];
   14161             :                 return GF_OK;
   14162           0 :         case GF_SG_FIELD_CODING_OUT:
   14163           0 :                 *allField = TextureCoordinate_Out2All[inField];
   14164             :                 return GF_OK;
   14165           0 :         case GF_SG_FIELD_CODING_DYN:
   14166           0 :                 *allField = TextureCoordinate_Dyn2All[inField];
   14167             :                 return GF_OK;
   14168             :         default:
   14169             :                 return GF_BAD_PARAM;
   14170             :         }
   14171             : }
   14172             : static GF_Err TextureCoordinate_get_field(GF_Node *node, GF_FieldInfo *info)
   14173             : {
   14174           2 :         switch (info->fieldIndex) {
   14175           2 :         case 0:
   14176           2 :                 info->name = "point";
   14177           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14178           2 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   14179           2 :                 info->far_ptr = & ((M_TextureCoordinate *) node)->point;
   14180             :                 return GF_OK;
   14181             :         default:
   14182             :                 return GF_BAD_PARAM;
   14183             :         }
   14184             : }
   14185             : 
   14186             : 
   14187             : static s32 TextureCoordinate_get_field_index_by_name(char *name)
   14188             : {
   14189           1 :         if (!strcmp("point", name)) return 0;
   14190             :         return -1;
   14191             : }
   14192             : static Bool TextureCoordinate_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14193             : {
   14194           1 :         switch (FieldIndex) {
   14195           1 :         case 0:
   14196           1 :                 *AType = 2;
   14197           1 :                 *QType = 5;
   14198           1 :                 *b_min = FIX_MIN;
   14199           1 :                 *b_max = FIX_MAX;
   14200             :                 return 1;
   14201             :         default:
   14202             :                 return 0;
   14203             :         }
   14204             : }
   14205             : 
   14206             : 
   14207             : 
   14208           1 : GF_Node *TextureCoordinate_Create()
   14209             : {
   14210             :         M_TextureCoordinate *p;
   14211           1 :         GF_SAFEALLOC(p, M_TextureCoordinate);
   14212           1 :         if(!p) return NULL;
   14213           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TextureCoordinate);
   14214             : 
   14215             :         /*default field values*/
   14216           1 :         return (GF_Node *)p;
   14217             : }
   14218             : 
   14219             : 
   14220             : /*
   14221             :         TextureTransform Node deletion
   14222             : */
   14223             : 
   14224             : static void TextureTransform_Del(GF_Node *node)
   14225             : {
   14226             :         M_TextureTransform *p = (M_TextureTransform *) node;
   14227          85 :         gf_node_free((GF_Node *) p);
   14228             : }
   14229             : 
   14230             : static const u16 TextureTransform_Def2All[] = { 0, 1, 2, 3};
   14231             : static const u16 TextureTransform_In2All[] = { 0, 1, 2, 3};
   14232             : static const u16 TextureTransform_Out2All[] = { 0, 1, 2, 3};
   14233             : static const u16 TextureTransform_Dyn2All[] = { 0, 1, 2, 3};
   14234             : 
   14235             : static u32 TextureTransform_get_field_count(GF_Node *node, u8 IndexMode)
   14236             : {
   14237             :         switch(IndexMode) {
   14238             :         case GF_SG_FIELD_CODING_IN:
   14239             :                 return 4;
   14240             :         case GF_SG_FIELD_CODING_DEF:
   14241             :                 return 4;
   14242             :         case GF_SG_FIELD_CODING_OUT:
   14243             :                 return 4;
   14244             :         case GF_SG_FIELD_CODING_DYN:
   14245             :                 return 4;
   14246             :         default:
   14247             :                 return 4;
   14248             :         }
   14249             : }
   14250             : 
   14251             : static GF_Err TextureTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14252             : {
   14253          99 :         switch(IndexMode) {
   14254           0 :         case GF_SG_FIELD_CODING_IN:
   14255           0 :                 *allField = TextureTransform_In2All[inField];
   14256             :                 return GF_OK;
   14257          95 :         case GF_SG_FIELD_CODING_DEF:
   14258          95 :                 *allField = TextureTransform_Def2All[inField];
   14259             :                 return GF_OK;
   14260           0 :         case GF_SG_FIELD_CODING_OUT:
   14261           0 :                 *allField = TextureTransform_Out2All[inField];
   14262             :                 return GF_OK;
   14263           0 :         case GF_SG_FIELD_CODING_DYN:
   14264           0 :                 *allField = TextureTransform_Dyn2All[inField];
   14265             :                 return GF_OK;
   14266             :         default:
   14267             :                 return GF_BAD_PARAM;
   14268             :         }
   14269             : }
   14270        1553 : static GF_Err TextureTransform_get_field(GF_Node *node, GF_FieldInfo *info)
   14271             : {
   14272        1553 :         switch (info->fieldIndex) {
   14273         371 :         case 0:
   14274         371 :                 info->name = "center";
   14275         371 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14276         371 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14277         371 :                 info->far_ptr = & ((M_TextureTransform *) node)->center;
   14278         371 :                 return GF_OK;
   14279         433 :         case 1:
   14280         433 :                 info->name = "rotation";
   14281         433 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14282         433 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14283         433 :                 info->far_ptr = & ((M_TextureTransform *) node)->rotation;
   14284         433 :                 return GF_OK;
   14285         380 :         case 2:
   14286         380 :                 info->name = "scale";
   14287         380 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14288         380 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14289         380 :                 info->far_ptr = & ((M_TextureTransform *) node)->scale;
   14290         380 :                 return GF_OK;
   14291         369 :         case 3:
   14292         369 :                 info->name = "translation";
   14293         369 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14294         369 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14295         369 :                 info->far_ptr = & ((M_TextureTransform *) node)->translation;
   14296         369 :                 return GF_OK;
   14297             :         default:
   14298             :                 return GF_BAD_PARAM;
   14299             :         }
   14300             : }
   14301             : 
   14302             : 
   14303          45 : static s32 TextureTransform_get_field_index_by_name(char *name)
   14304             : {
   14305          45 :         if (!strcmp("center", name)) return 0;
   14306          40 :         if (!strcmp("rotation", name)) return 1;
   14307          18 :         if (!strcmp("scale", name)) return 2;
   14308           4 :         if (!strcmp("translation", name)) return 3;
   14309           0 :         return -1;
   14310             : }
   14311             : static Bool TextureTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14312             : {
   14313          12 :         switch (FieldIndex) {
   14314           1 :         case 0:
   14315           1 :                 *AType = 2;
   14316           1 :                 *QType = 2;
   14317           1 :                 *b_min = FIX_MIN;
   14318           1 :                 *b_max = FIX_MAX;
   14319             :                 return 1;
   14320           9 :         case 1:
   14321           9 :                 *AType = 6;
   14322           9 :                 *QType = 6;
   14323           9 :                 *b_min = FLT2FIX(0);
   14324           9 :                 *b_max = FLT2FIX(6.2831853);
   14325             :                 return 1;
   14326           1 :         case 2:
   14327           1 :                 *AType = 12;
   14328           1 :                 *QType = 7;
   14329           1 :                 *b_min = FIX_MIN;
   14330           1 :                 *b_max = FIX_MAX;
   14331             :                 return 1;
   14332           1 :         case 3:
   14333           1 :                 *AType = 2;
   14334           1 :                 *QType = 2;
   14335           1 :                 *b_min = FIX_MIN;
   14336           1 :                 *b_max = FIX_MAX;
   14337             :                 return 1;
   14338             :         default:
   14339             :                 return 0;
   14340             :         }
   14341             : }
   14342             : 
   14343             : 
   14344             : 
   14345          85 : GF_Node *TextureTransform_Create()
   14346             : {
   14347             :         M_TextureTransform *p;
   14348          85 :         GF_SAFEALLOC(p, M_TextureTransform);
   14349          85 :         if(!p) return NULL;
   14350          85 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TextureTransform);
   14351             : 
   14352             :         /*default field values*/
   14353          85 :         p->center.x = FLT2FIX(0);
   14354          85 :         p->center.y = FLT2FIX(0);
   14355          85 :         p->rotation = FLT2FIX(0);
   14356          85 :         p->scale.x = FLT2FIX(1);
   14357          85 :         p->scale.y = FLT2FIX(1);
   14358          85 :         p->translation.x = FLT2FIX(0);
   14359          85 :         p->translation.y = FLT2FIX(0);
   14360          85 :         return (GF_Node *)p;
   14361             : }
   14362             : 
   14363             : 
   14364             : /*
   14365             :         TimeSensor Node deletion
   14366             : */
   14367             : 
   14368             : static void TimeSensor_Del(GF_Node *node)
   14369             : {
   14370             :         M_TimeSensor *p = (M_TimeSensor *) node;
   14371         583 :         gf_node_free((GF_Node *) p);
   14372             : }
   14373             : 
   14374             : static const u16 TimeSensor_Def2All[] = { 0, 1, 2, 3, 4};
   14375             : static const u16 TimeSensor_In2All[] = { 0, 1, 2, 3, 4};
   14376             : static const u16 TimeSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   14377             : 
   14378             : static u32 TimeSensor_get_field_count(GF_Node *node, u8 IndexMode)
   14379             : {
   14380             :         switch(IndexMode) {
   14381             :         case GF_SG_FIELD_CODING_IN:
   14382             :                 return 5;
   14383             :         case GF_SG_FIELD_CODING_DEF:
   14384             :                 return 5;
   14385             :         case GF_SG_FIELD_CODING_OUT:
   14386             :                 return 9;
   14387             :         case GF_SG_FIELD_CODING_DYN:
   14388             :                 return 0;
   14389             :         default:
   14390             :                 return 9;
   14391             :         }
   14392             : }
   14393             : 
   14394             : static GF_Err TimeSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14395             : {
   14396          82 :         switch(IndexMode) {
   14397           0 :         case GF_SG_FIELD_CODING_IN:
   14398           0 :                 *allField = TimeSensor_In2All[inField];
   14399             :                 return GF_OK;
   14400          65 :         case GF_SG_FIELD_CODING_DEF:
   14401          65 :                 *allField = TimeSensor_Def2All[inField];
   14402             :                 return GF_OK;
   14403           8 :         case GF_SG_FIELD_CODING_OUT:
   14404           8 :                 *allField = TimeSensor_Out2All[inField];
   14405             :                 return GF_OK;
   14406             :         default:
   14407             :                 return GF_BAD_PARAM;
   14408             :         }
   14409             : }
   14410        8238 : static GF_Err TimeSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   14411             : {
   14412        8238 :         switch (info->fieldIndex) {
   14413         981 :         case 0:
   14414         981 :                 info->name = "cycleInterval";
   14415         981 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14416         981 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14417         981 :                 info->far_ptr = & ((M_TimeSensor *) node)->cycleInterval;
   14418         981 :                 return GF_OK;
   14419         829 :         case 1:
   14420         829 :                 info->name = "enabled";
   14421         829 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14422         829 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14423         829 :                 info->far_ptr = & ((M_TimeSensor *) node)->enabled;
   14424         829 :                 return GF_OK;
   14425         950 :         case 2:
   14426         950 :                 info->name = "loop";
   14427         950 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14428         950 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14429         950 :                 info->far_ptr = & ((M_TimeSensor *) node)->loop;
   14430         950 :                 return GF_OK;
   14431         997 :         case 3:
   14432         997 :                 info->name = "startTime";
   14433         997 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14434         997 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14435         997 :                 info->far_ptr = & ((M_TimeSensor *) node)->startTime;
   14436         997 :                 return GF_OK;
   14437         825 :         case 4:
   14438         825 :                 info->name = "stopTime";
   14439         825 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14440         825 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14441         825 :                 info->far_ptr = & ((M_TimeSensor *) node)->stopTime;
   14442         825 :                 return GF_OK;
   14443         823 :         case 5:
   14444         823 :                 info->name = "cycleTime";
   14445         823 :                 info->eventType = GF_SG_EVENT_OUT;
   14446         823 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14447         823 :                 info->far_ptr = & ((M_TimeSensor *) node)->cycleTime;
   14448         823 :                 return GF_OK;
   14449        1144 :         case 6:
   14450        1144 :                 info->name = "fraction_changed";
   14451        1144 :                 info->eventType = GF_SG_EVENT_OUT;
   14452        1144 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14453        1144 :                 info->far_ptr = & ((M_TimeSensor *) node)->fraction_changed;
   14454        1144 :                 return GF_OK;
   14455         924 :         case 7:
   14456         924 :                 info->name = "isActive";
   14457         924 :                 info->eventType = GF_SG_EVENT_OUT;
   14458         924 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14459         924 :                 info->far_ptr = & ((M_TimeSensor *) node)->isActive;
   14460         924 :                 return GF_OK;
   14461         765 :         case 8:
   14462         765 :                 info->name = "time";
   14463         765 :                 info->eventType = GF_SG_EVENT_OUT;
   14464         765 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14465         765 :                 info->far_ptr = & ((M_TimeSensor *) node)->time;
   14466         765 :                 return GF_OK;
   14467             :         default:
   14468             :                 return GF_BAD_PARAM;
   14469             :         }
   14470             : }
   14471             : 
   14472             : 
   14473        1080 : static s32 TimeSensor_get_field_index_by_name(char *name)
   14474             : {
   14475        1080 :         if (!strcmp("cycleInterval", name)) return 0;
   14476         923 :         if (!strcmp("enabled", name)) return 1;
   14477         899 :         if (!strcmp("loop", name)) return 2;
   14478         766 :         if (!strcmp("startTime", name)) return 3;
   14479         654 :         if (!strcmp("stopTime", name)) return 4;
   14480         630 :         if (!strcmp("cycleTime", name)) return 5;
   14481         599 :         if (!strcmp("fraction_changed", name)) return 6;
   14482         430 :         if (!strcmp("isActive", name)) return 7;
   14483         325 :         if (!strcmp("time", name)) return 8;
   14484         323 :         return -1;
   14485             : }
   14486             : static Bool TimeSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14487             : {
   14488             :         switch (FieldIndex) {
   14489             :         default:
   14490             :                 return 0;
   14491             :         }
   14492             : }
   14493             : 
   14494             : 
   14495             : 
   14496         583 : GF_Node *TimeSensor_Create()
   14497             : {
   14498             :         M_TimeSensor *p;
   14499         583 :         GF_SAFEALLOC(p, M_TimeSensor);
   14500         583 :         if(!p) return NULL;
   14501         583 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TimeSensor);
   14502             : 
   14503             :         /*default field values*/
   14504         583 :         p->cycleInterval = 1;
   14505         583 :         p->enabled = 1;
   14506         583 :         p->startTime = 0;
   14507         583 :         p->stopTime = 0;
   14508         583 :         return (GF_Node *)p;
   14509             : }
   14510             : 
   14511             : 
   14512             : /*
   14513             :         TouchSensor Node deletion
   14514             : */
   14515             : 
   14516             : static void TouchSensor_Del(GF_Node *node)
   14517             : {
   14518             :         M_TouchSensor *p = (M_TouchSensor *) node;
   14519        1513 :         gf_node_free((GF_Node *) p);
   14520             : }
   14521             : 
   14522             : static const u16 TouchSensor_Def2All[] = { 0};
   14523             : static const u16 TouchSensor_In2All[] = { 0};
   14524             : static const u16 TouchSensor_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   14525             : 
   14526             : static u32 TouchSensor_get_field_count(GF_Node *node, u8 IndexMode)
   14527             : {
   14528             :         switch(IndexMode) {
   14529             :         case GF_SG_FIELD_CODING_IN:
   14530             :                 return 1;
   14531             :         case GF_SG_FIELD_CODING_DEF:
   14532             :                 return 1;
   14533             :         case GF_SG_FIELD_CODING_OUT:
   14534             :                 return 7;
   14535             :         case GF_SG_FIELD_CODING_DYN:
   14536             :                 return 0;
   14537             :         default:
   14538             :                 return 7;
   14539             :         }
   14540             : }
   14541             : 
   14542             : static GF_Err TouchSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14543             : {
   14544         771 :         switch(IndexMode) {
   14545           0 :         case GF_SG_FIELD_CODING_IN:
   14546           0 :                 *allField = TouchSensor_In2All[inField];
   14547             :                 return GF_OK;
   14548          41 :         case GF_SG_FIELD_CODING_DEF:
   14549          41 :                 *allField = TouchSensor_Def2All[inField];
   14550             :                 return GF_OK;
   14551         723 :         case GF_SG_FIELD_CODING_OUT:
   14552         723 :                 *allField = TouchSensor_Out2All[inField];
   14553             :                 return GF_OK;
   14554             :         default:
   14555             :                 return GF_BAD_PARAM;
   14556             :         }
   14557             : }
   14558       12483 : static GF_Err TouchSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   14559             : {
   14560       12483 :         switch (info->fieldIndex) {
   14561        1668 :         case 0:
   14562        1668 :                 info->name = "enabled";
   14563        1668 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14564        1668 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14565        1668 :                 info->far_ptr = & ((M_TouchSensor *) node)->enabled;
   14566        1668 :                 return GF_OK;
   14567        1556 :         case 1:
   14568        1556 :                 info->name = "hitNormal_changed";
   14569        1556 :                 info->eventType = GF_SG_EVENT_OUT;
   14570        1556 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14571        1556 :                 info->far_ptr = & ((M_TouchSensor *) node)->hitNormal_changed;
   14572        1556 :                 return GF_OK;
   14573        1573 :         case 2:
   14574        1573 :                 info->name = "hitPoint_changed";
   14575        1573 :                 info->eventType = GF_SG_EVENT_OUT;
   14576        1573 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14577        1573 :                 info->far_ptr = & ((M_TouchSensor *) node)->hitPoint_changed;
   14578        1573 :                 return GF_OK;
   14579        1765 :         case 3:
   14580        1765 :                 info->name = "hitTexCoord_changed";
   14581        1765 :                 info->eventType = GF_SG_EVENT_OUT;
   14582        1765 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14583        1765 :                 info->far_ptr = & ((M_TouchSensor *) node)->hitTexCoord_changed;
   14584        1765 :                 return GF_OK;
   14585        2203 :         case 4:
   14586        2203 :                 info->name = "isActive";
   14587        2203 :                 info->eventType = GF_SG_EVENT_OUT;
   14588        2203 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14589        2203 :                 info->far_ptr = & ((M_TouchSensor *) node)->isActive;
   14590        2203 :                 return GF_OK;
   14591        2152 :         case 5:
   14592        2152 :                 info->name = "isOver";
   14593        2152 :                 info->eventType = GF_SG_EVENT_OUT;
   14594        2152 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   14595        2152 :                 info->far_ptr = & ((M_TouchSensor *) node)->isOver;
   14596        2152 :                 return GF_OK;
   14597        1566 :         case 6:
   14598        1566 :                 info->name = "touchTime";
   14599        1566 :                 info->eventType = GF_SG_EVENT_OUT;
   14600        1566 :                 info->fieldType = GF_SG_VRML_SFTIME;
   14601        1566 :                 info->far_ptr = & ((M_TouchSensor *) node)->touchTime;
   14602        1566 :                 return GF_OK;
   14603             :         default:
   14604             :                 return GF_BAD_PARAM;
   14605             :         }
   14606             : }
   14607             : 
   14608             : 
   14609         828 : static s32 TouchSensor_get_field_index_by_name(char *name)
   14610             : {
   14611         828 :         if (!strcmp("enabled", name)) return 0;
   14612         827 :         if (!strcmp("hitNormal_changed", name)) return 1;
   14613         826 :         if (!strcmp("hitPoint_changed", name)) return 2;
   14614         815 :         if (!strcmp("hitTexCoord_changed", name)) return 3;
   14615         814 :         if (!strcmp("isActive", name)) return 4;
   14616         360 :         if (!strcmp("isOver", name)) return 5;
   14617           7 :         if (!strcmp("touchTime", name)) return 6;
   14618           0 :         return -1;
   14619             : }
   14620             : static Bool TouchSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14621             : {
   14622             :         switch (FieldIndex) {
   14623             :         default:
   14624             :                 return 0;
   14625             :         }
   14626             : }
   14627             : 
   14628             : 
   14629             : 
   14630        1513 : GF_Node *TouchSensor_Create()
   14631             : {
   14632             :         M_TouchSensor *p;
   14633        1513 :         GF_SAFEALLOC(p, M_TouchSensor);
   14634        1513 :         if(!p) return NULL;
   14635        1513 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TouchSensor);
   14636             : 
   14637             :         /*default field values*/
   14638        1513 :         p->enabled = 1;
   14639        1513 :         return (GF_Node *)p;
   14640             : }
   14641             : 
   14642             : 
   14643             : /*
   14644             :         Transform Node deletion
   14645             : */
   14646             : 
   14647             : static void Transform_Del(GF_Node *node)
   14648             : {
   14649             :         M_Transform *p = (M_Transform *) node;
   14650         333 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   14651         333 :         gf_node_free((GF_Node *) p);
   14652             : }
   14653             : 
   14654             : static const u16 Transform_Def2All[] = { 2, 3, 4, 5, 6, 7};
   14655             : static const u16 Transform_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   14656             : static const u16 Transform_Out2All[] = { 2, 3, 4, 5, 6, 7};
   14657             : static const u16 Transform_Dyn2All[] = { 2, 4, 5, 6, 7};
   14658             : 
   14659             : static u32 Transform_get_field_count(GF_Node *node, u8 IndexMode)
   14660             : {
   14661             :         switch(IndexMode) {
   14662             :         case GF_SG_FIELD_CODING_IN:
   14663             :                 return 8;
   14664             :         case GF_SG_FIELD_CODING_DEF:
   14665             :                 return 6;
   14666             :         case GF_SG_FIELD_CODING_OUT:
   14667             :                 return 6;
   14668             :         case GF_SG_FIELD_CODING_DYN:
   14669             :                 return 5;
   14670             :         default:
   14671             :                 return 8;
   14672             :         }
   14673             : }
   14674             : 
   14675             : static GF_Err Transform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14676             : {
   14677         443 :         switch(IndexMode) {
   14678           0 :         case GF_SG_FIELD_CODING_IN:
   14679           0 :                 *allField = Transform_In2All[inField];
   14680             :                 return GF_OK;
   14681         435 :         case GF_SG_FIELD_CODING_DEF:
   14682         435 :                 *allField = Transform_Def2All[inField];
   14683             :                 return GF_OK;
   14684           0 :         case GF_SG_FIELD_CODING_OUT:
   14685           0 :                 *allField = Transform_Out2All[inField];
   14686             :                 return GF_OK;
   14687           0 :         case GF_SG_FIELD_CODING_DYN:
   14688           0 :                 *allField = Transform_Dyn2All[inField];
   14689             :                 return GF_OK;
   14690             :         default:
   14691             :                 return GF_BAD_PARAM;
   14692             :         }
   14693             : }
   14694        1897 : static GF_Err Transform_get_field(GF_Node *node, GF_FieldInfo *info)
   14695             : {
   14696        1897 :         switch (info->fieldIndex) {
   14697          48 :         case 0:
   14698          48 :                 info->name = "addChildren";
   14699          48 :                 info->eventType = GF_SG_EVENT_IN;
   14700          48 :                 info->on_event_in = ((M_Transform *)node)->on_addChildren;
   14701          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14702          48 :                 info->NDTtype = NDT_SF3DNode;
   14703          48 :                 info->far_ptr = & ((M_Transform *)node)->addChildren;
   14704          48 :                 return GF_OK;
   14705          48 :         case 1:
   14706          48 :                 info->name = "removeChildren";
   14707          48 :                 info->eventType = GF_SG_EVENT_IN;
   14708          48 :                 info->on_event_in = ((M_Transform *)node)->on_removeChildren;
   14709          48 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14710          48 :                 info->NDTtype = NDT_SF3DNode;
   14711          48 :                 info->far_ptr = & ((M_Transform *)node)->removeChildren;
   14712          48 :                 return GF_OK;
   14713         214 :         case 2:
   14714         214 :                 info->name = "center";
   14715         214 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14716         214 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14717         214 :                 info->far_ptr = & ((M_Transform *) node)->center;
   14718         214 :                 return GF_OK;
   14719         363 :         case 3:
   14720         363 :                 info->name = "children";
   14721         363 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14722         363 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14723         363 :                 info->NDTtype = NDT_SF3DNode;
   14724         363 :                 info->far_ptr = & ((M_Transform *)node)->children;
   14725         363 :                 return GF_OK;
   14726         340 :         case 4:
   14727         340 :                 info->name = "rotation";
   14728         340 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14729         340 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   14730         340 :                 info->far_ptr = & ((M_Transform *) node)->rotation;
   14731         340 :                 return GF_OK;
   14732         225 :         case 5:
   14733         225 :                 info->name = "scale";
   14734         225 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14735         225 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14736         225 :                 info->far_ptr = & ((M_Transform *) node)->scale;
   14737         225 :                 return GF_OK;
   14738         274 :         case 6:
   14739         274 :                 info->name = "scaleOrientation";
   14740         274 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14741         274 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   14742         274 :                 info->far_ptr = & ((M_Transform *) node)->scaleOrientation;
   14743         274 :                 return GF_OK;
   14744         385 :         case 7:
   14745         385 :                 info->name = "translation";
   14746         385 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14747         385 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   14748         385 :                 info->far_ptr = & ((M_Transform *) node)->translation;
   14749         385 :                 return GF_OK;
   14750             :         default:
   14751             :                 return GF_BAD_PARAM;
   14752             :         }
   14753             : }
   14754             : 
   14755             : 
   14756         383 : static s32 Transform_get_field_index_by_name(char *name)
   14757             : {
   14758         383 :         if (!strcmp("addChildren", name)) return 0;
   14759         382 :         if (!strcmp("removeChildren", name)) return 1;
   14760         381 :         if (!strcmp("center", name)) return 2;
   14761         380 :         if (!strcmp("children", name)) return 3;
   14762         213 :         if (!strcmp("rotation", name)) return 4;
   14763         150 :         if (!strcmp("scale", name)) return 5;
   14764         141 :         if (!strcmp("scaleOrientation", name)) return 6;
   14765         124 :         if (!strcmp("translation", name)) return 7;
   14766           0 :         return -1;
   14767             : }
   14768             : static Bool Transform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14769             : {
   14770          86 :         switch (FieldIndex) {
   14771           1 :         case 2:
   14772           1 :                 *AType = 1;
   14773           1 :                 *QType = 1;
   14774           1 :                 *b_min = FIX_MIN;
   14775           1 :                 *b_max = FIX_MAX;
   14776             :                 return 1;
   14777          36 :         case 4:
   14778          36 :                 *AType = 10;
   14779          36 :                 *QType = 10;
   14780             :                 return 1;
   14781           1 :         case 5:
   14782           1 :                 *AType = 11;
   14783           1 :                 *QType = 7;
   14784           1 :                 *b_min = FLT2FIX(0);
   14785           1 :                 *b_max = FIX_MAX;
   14786             :                 return 1;
   14787           9 :         case 6:
   14788           9 :                 *AType = 10;
   14789           9 :                 *QType = 10;
   14790             :                 return 1;
   14791          36 :         case 7:
   14792          36 :                 *AType = 1;
   14793          36 :                 *QType = 1;
   14794          36 :                 *b_min = FIX_MIN;
   14795          36 :                 *b_max = FIX_MAX;
   14796             :                 return 1;
   14797             :         default:
   14798             :                 return 0;
   14799             :         }
   14800             : }
   14801             : 
   14802             : 
   14803             : 
   14804         333 : GF_Node *Transform_Create()
   14805             : {
   14806             :         M_Transform *p;
   14807         333 :         GF_SAFEALLOC(p, M_Transform);
   14808         333 :         if(!p) return NULL;
   14809         333 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Transform);
   14810         333 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   14811             : 
   14812             :         /*default field values*/
   14813         333 :         p->center.x = FLT2FIX(0);
   14814         333 :         p->center.y = FLT2FIX(0);
   14815         333 :         p->center.z = FLT2FIX(0);
   14816         333 :         p->rotation.x = FLT2FIX(0);
   14817         333 :         p->rotation.y = FLT2FIX(0);
   14818         333 :         p->rotation.z = FLT2FIX(1);
   14819         333 :         p->rotation.q = FLT2FIX(0);
   14820         333 :         p->scale.x = FLT2FIX(1);
   14821         333 :         p->scale.y = FLT2FIX(1);
   14822         333 :         p->scale.z = FLT2FIX(1);
   14823         333 :         p->scaleOrientation.x = FLT2FIX(0);
   14824         333 :         p->scaleOrientation.y = FLT2FIX(0);
   14825         333 :         p->scaleOrientation.z = FLT2FIX(1);
   14826         333 :         p->scaleOrientation.q = FLT2FIX(0);
   14827         333 :         p->translation.x = FLT2FIX(0);
   14828         333 :         p->translation.y = FLT2FIX(0);
   14829         333 :         p->translation.z = FLT2FIX(0);
   14830         333 :         return (GF_Node *)p;
   14831             : }
   14832             : 
   14833             : 
   14834             : /*
   14835             :         Transform2D Node deletion
   14836             : */
   14837             : 
   14838             : static void Transform2D_Del(GF_Node *node)
   14839             : {
   14840             :         M_Transform2D *p = (M_Transform2D *) node;
   14841        7625 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   14842        7625 :         gf_node_free((GF_Node *) p);
   14843             : }
   14844             : 
   14845             : static const u16 Transform2D_Def2All[] = { 2, 3, 4, 5, 6, 7};
   14846             : static const u16 Transform2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   14847             : static const u16 Transform2D_Out2All[] = { 2, 3, 4, 5, 6, 7};
   14848             : static const u16 Transform2D_Dyn2All[] = { 3, 4, 5, 6, 7};
   14849             : 
   14850             : static u32 Transform2D_get_field_count(GF_Node *node, u8 IndexMode)
   14851             : {
   14852             :         switch(IndexMode) {
   14853             :         case GF_SG_FIELD_CODING_IN:
   14854             :                 return 8;
   14855             :         case GF_SG_FIELD_CODING_DEF:
   14856             :                 return 6;
   14857             :         case GF_SG_FIELD_CODING_OUT:
   14858             :                 return 6;
   14859             :         case GF_SG_FIELD_CODING_DYN:
   14860             :                 return 5;
   14861             :         default:
   14862             :                 return 8;
   14863             :         }
   14864             : }
   14865             : 
   14866             : static GF_Err Transform2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   14867             : {
   14868       19738 :         switch(IndexMode) {
   14869       11952 :         case GF_SG_FIELD_CODING_IN:
   14870       11952 :                 *allField = Transform2D_In2All[inField];
   14871             :                 return GF_OK;
   14872        7708 :         case GF_SG_FIELD_CODING_DEF:
   14873        7708 :                 *allField = Transform2D_Def2All[inField];
   14874             :                 return GF_OK;
   14875          70 :         case GF_SG_FIELD_CODING_OUT:
   14876          70 :                 *allField = Transform2D_Out2All[inField];
   14877             :                 return GF_OK;
   14878           0 :         case GF_SG_FIELD_CODING_DYN:
   14879           0 :                 *allField = Transform2D_Dyn2All[inField];
   14880             :                 return GF_OK;
   14881             :         default:
   14882             :                 return GF_BAD_PARAM;
   14883             :         }
   14884             : }
   14885       69411 : static GF_Err Transform2D_get_field(GF_Node *node, GF_FieldInfo *info)
   14886             : {
   14887       69411 :         switch (info->fieldIndex) {
   14888        3002 :         case 0:
   14889        3002 :                 info->name = "addChildren";
   14890        3002 :                 info->eventType = GF_SG_EVENT_IN;
   14891        3002 :                 info->on_event_in = ((M_Transform2D *)node)->on_addChildren;
   14892        3002 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14893        3002 :                 info->NDTtype = NDT_SF2DNode;
   14894        3002 :                 info->far_ptr = & ((M_Transform2D *)node)->addChildren;
   14895        3002 :                 return GF_OK;
   14896        2976 :         case 1:
   14897        2976 :                 info->name = "removeChildren";
   14898        2976 :                 info->eventType = GF_SG_EVENT_IN;
   14899        2976 :                 info->on_event_in = ((M_Transform2D *)node)->on_removeChildren;
   14900        2976 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14901        2976 :                 info->NDTtype = NDT_SF2DNode;
   14902        2976 :                 info->far_ptr = & ((M_Transform2D *)node)->removeChildren;
   14903        2976 :                 return GF_OK;
   14904       25467 :         case 2:
   14905       25467 :                 info->name = "children";
   14906       25467 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14907       25467 :                 info->fieldType = GF_SG_VRML_MFNODE;
   14908       25467 :                 info->NDTtype = NDT_SF2DNode;
   14909       25467 :                 info->far_ptr = & ((M_Transform2D *)node)->children;
   14910       25467 :                 return GF_OK;
   14911        5545 :         case 3:
   14912        5545 :                 info->name = "center";
   14913        5545 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14914        5545 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14915        5545 :                 info->far_ptr = & ((M_Transform2D *) node)->center;
   14916        5545 :                 return GF_OK;
   14917        5834 :         case 4:
   14918        5834 :                 info->name = "rotationAngle";
   14919        5834 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14920        5834 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14921        5834 :                 info->far_ptr = & ((M_Transform2D *) node)->rotationAngle;
   14922        5834 :                 return GF_OK;
   14923        7770 :         case 5:
   14924        7770 :                 info->name = "scale";
   14925        7770 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14926        7770 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14927        7770 :                 info->far_ptr = & ((M_Transform2D *) node)->scale;
   14928        7770 :                 return GF_OK;
   14929        5548 :         case 6:
   14930        5548 :                 info->name = "scaleOrientation";
   14931        5548 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14932        5548 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   14933        5548 :                 info->far_ptr = & ((M_Transform2D *) node)->scaleOrientation;
   14934        5548 :                 return GF_OK;
   14935       13269 :         case 7:
   14936       13269 :                 info->name = "translation";
   14937       13269 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   14938       13269 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   14939       13269 :                 info->far_ptr = & ((M_Transform2D *) node)->translation;
   14940       13269 :                 return GF_OK;
   14941             :         default:
   14942             :                 return GF_BAD_PARAM;
   14943             :         }
   14944             : }
   14945             : 
   14946             : 
   14947       31783 : static s32 Transform2D_get_field_index_by_name(char *name)
   14948             : {
   14949       31783 :         if (!strcmp("addChildren", name)) return 0;
   14950       31767 :         if (!strcmp("removeChildren", name)) return 1;
   14951       31764 :         if (!strcmp("children", name)) return 2;
   14952       17528 :         if (!strcmp("center", name)) return 3;
   14953       17527 :         if (!strcmp("rotationAngle", name)) return 4;
   14954       17315 :         if (!strcmp("scale", name)) return 5;
   14955       15821 :         if (!strcmp("scaleOrientation", name)) return 6;
   14956       15817 :         if (!strcmp("translation", name)) return 7;
   14957       11173 :         return -1;
   14958             : }
   14959         133 : static Bool Transform2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   14960             : {
   14961         133 :         switch (FieldIndex) {
   14962           1 :         case 3:
   14963           1 :                 *AType = 2;
   14964           1 :                 *QType = 2;
   14965           1 :                 *b_min = FIX_MIN;
   14966           1 :                 *b_max = FIX_MAX;
   14967             :                 return 1;
   14968           1 :         case 4:
   14969           1 :                 *AType = 6;
   14970           1 :                 *QType = 6;
   14971           1 :                 *b_min = FLT2FIX(0);
   14972           1 :                 *b_max = FLT2FIX(6.2831853);
   14973             :                 return 1;
   14974          88 :         case 5:
   14975          88 :                 *AType = 12;
   14976          88 :                 *QType = 7;
   14977          88 :                 *b_min = FIX_MIN;
   14978          88 :                 *b_max = FIX_MAX;
   14979             :                 return 1;
   14980           1 :         case 6:
   14981           1 :                 *AType = 6;
   14982           1 :                 *QType = 6;
   14983           1 :                 *b_min = FLT2FIX(0);
   14984           1 :                 *b_max = FLT2FIX(6.2831853);
   14985             :                 return 1;
   14986          39 :         case 7:
   14987          39 :                 *AType = 2;
   14988          39 :                 *QType = 2;
   14989          39 :                 *b_min = FIX_MIN;
   14990          39 :                 *b_max = FIX_MAX;
   14991             :                 return 1;
   14992             :         default:
   14993             :                 return 0;
   14994             :         }
   14995             : }
   14996             : 
   14997             : 
   14998             : 
   14999        7625 : GF_Node *Transform2D_Create()
   15000             : {
   15001             :         M_Transform2D *p;
   15002        7625 :         GF_SAFEALLOC(p, M_Transform2D);
   15003        7625 :         if(!p) return NULL;
   15004        7625 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Transform2D);
   15005        7625 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   15006             : 
   15007             :         /*default field values*/
   15008        7625 :         p->center.x = FLT2FIX(0);
   15009        7625 :         p->center.y = FLT2FIX(0);
   15010        7625 :         p->rotationAngle = FLT2FIX(0);
   15011        7625 :         p->scale.x = FLT2FIX(1);
   15012        7625 :         p->scale.y = FLT2FIX(1);
   15013        7625 :         p->scaleOrientation = FLT2FIX(0);
   15014        7625 :         p->translation.x = FLT2FIX(0);
   15015        7625 :         p->translation.y = FLT2FIX(0);
   15016        7625 :         return (GF_Node *)p;
   15017             : }
   15018             : 
   15019             : 
   15020             : /*
   15021             :         Valuator Node deletion
   15022             : */
   15023             : 
   15024        2035 : static void Valuator_Del(GF_Node *node)
   15025             : {
   15026             :         M_Valuator *p = (M_Valuator *) node;
   15027        2035 :         gf_sg_mfcolor_del(p->inMFColor);
   15028        2035 :         gf_sg_mffloat_del(p->inMFFloat);
   15029        2035 :         gf_sg_mfint32_del(p->inMFInt32);
   15030        2035 :         gf_sg_mfrotation_del(p->inMFRotation);
   15031        2035 :         gf_sg_sfstring_del(p->inSFString);
   15032        2035 :         gf_sg_mfstring_del(p->inMFString);
   15033        2035 :         gf_sg_mfvec2f_del(p->inMFVec2f);
   15034        2035 :         gf_sg_mfvec3f_del(p->inMFVec3f);
   15035        2035 :         gf_sg_mfcolor_del(p->outMFColor);
   15036        2035 :         gf_sg_mffloat_del(p->outMFFloat);
   15037        2035 :         gf_sg_mfint32_del(p->outMFInt32);
   15038        2035 :         gf_sg_mfrotation_del(p->outMFRotation);
   15039        2035 :         gf_sg_sfstring_del(p->outSFString);
   15040        2035 :         gf_sg_mfstring_del(p->outMFString);
   15041        2035 :         gf_sg_mfvec2f_del(p->outMFVec2f);
   15042        2035 :         gf_sg_mfvec3f_del(p->outMFVec3f);
   15043        2035 :         gf_node_free((GF_Node *) p);
   15044        2035 : }
   15045             : 
   15046             : static const u16 Valuator_Def2All[] = { 32, 33, 34, 35, 36, 37, 38, 39, 40};
   15047             : static const u16 Valuator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 39, 40};
   15048             : static const u16 Valuator_Out2All[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40};
   15049             : 
   15050             : static u32 Valuator_get_field_count(GF_Node *node, u8 IndexMode)
   15051             : {
   15052             :         switch(IndexMode) {
   15053             :         case GF_SG_FIELD_CODING_IN:
   15054             :                 return 25;
   15055             :         case GF_SG_FIELD_CODING_DEF:
   15056             :                 return 9;
   15057             :         case GF_SG_FIELD_CODING_OUT:
   15058             :                 return 25;
   15059             :         case GF_SG_FIELD_CODING_DYN:
   15060             :                 return 0;
   15061             :         default:
   15062             :                 return 41;
   15063             :         }
   15064             : }
   15065             : 
   15066             : static GF_Err Valuator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15067             : {
   15068        2155 :         switch(IndexMode) {
   15069         650 :         case GF_SG_FIELD_CODING_IN:
   15070         650 :                 *allField = Valuator_In2All[inField];
   15071             :                 return GF_OK;
   15072        1457 :         case GF_SG_FIELD_CODING_DEF:
   15073        1457 :                 *allField = Valuator_Def2All[inField];
   15074             :                 return GF_OK;
   15075           7 :         case GF_SG_FIELD_CODING_OUT:
   15076           7 :                 *allField = Valuator_Out2All[inField];
   15077             :                 return GF_OK;
   15078             :         default:
   15079             :                 return GF_BAD_PARAM;
   15080             :         }
   15081             : }
   15082      111132 : static GF_Err Valuator_get_field(GF_Node *node, GF_FieldInfo *info)
   15083             : {
   15084      111132 :         switch (info->fieldIndex) {
   15085        2713 :         case 0:
   15086        2713 :                 info->name = "inSFBool";
   15087        2713 :                 info->eventType = GF_SG_EVENT_IN;
   15088        2713 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFBool;
   15089        2713 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15090        2713 :                 info->far_ptr = & ((M_Valuator *) node)->inSFBool;
   15091        2713 :                 return GF_OK;
   15092        2534 :         case 1:
   15093        2534 :                 info->name = "inSFColor";
   15094        2534 :                 info->eventType = GF_SG_EVENT_IN;
   15095        2534 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFColor;
   15096        2534 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   15097        2534 :                 info->far_ptr = & ((M_Valuator *) node)->inSFColor;
   15098        2534 :                 return GF_OK;
   15099        2493 :         case 2:
   15100        2493 :                 info->name = "inMFColor";
   15101        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15102        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFColor;
   15103        2493 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   15104        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inMFColor;
   15105        2493 :                 return GF_OK;
   15106        2503 :         case 3:
   15107        2503 :                 info->name = "inSFFloat";
   15108        2503 :                 info->eventType = GF_SG_EVENT_IN;
   15109        2503 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFFloat;
   15110        2503 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15111        2503 :                 info->far_ptr = & ((M_Valuator *) node)->inSFFloat;
   15112        2503 :                 return GF_OK;
   15113        2493 :         case 4:
   15114        2493 :                 info->name = "inMFFloat";
   15115        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15116        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFFloat;
   15117        2493 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   15118        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inMFFloat;
   15119        2493 :                 return GF_OK;
   15120        3931 :         case 5:
   15121        3931 :                 info->name = "inSFInt32";
   15122        3931 :                 info->eventType = GF_SG_EVENT_IN;
   15123        3931 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFInt32;
   15124        3931 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15125        3931 :                 info->far_ptr = & ((M_Valuator *) node)->inSFInt32;
   15126        3931 :                 return GF_OK;
   15127        2493 :         case 6:
   15128        2493 :                 info->name = "inMFInt32";
   15129        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15130        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFInt32;
   15131        2493 :                 info->fieldType = GF_SG_VRML_MFINT32;
   15132        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inMFInt32;
   15133        2493 :                 return GF_OK;
   15134        2493 :         case 7:
   15135        2493 :                 info->name = "inSFRotation";
   15136        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15137        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFRotation;
   15138        2493 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   15139        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inSFRotation;
   15140        2493 :                 return GF_OK;
   15141        2493 :         case 8:
   15142        2493 :                 info->name = "inMFRotation";
   15143        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15144        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFRotation;
   15145        2493 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   15146        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inMFRotation;
   15147        2493 :                 return GF_OK;
   15148        2497 :         case 9:
   15149        2497 :                 info->name = "inSFString";
   15150        2497 :                 info->eventType = GF_SG_EVENT_IN;
   15151        2497 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFString;
   15152        2497 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15153        2497 :                 info->far_ptr = & ((M_Valuator *) node)->inSFString;
   15154        2497 :                 return GF_OK;
   15155        2493 :         case 10:
   15156        2493 :                 info->name = "inMFString";
   15157        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15158        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFString;
   15159        2493 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   15160        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inMFString;
   15161        2493 :                 return GF_OK;
   15162        2517 :         case 11:
   15163        2517 :                 info->name = "inSFTime";
   15164        2517 :                 info->eventType = GF_SG_EVENT_IN;
   15165        2517 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFTime;
   15166        2517 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15167        2517 :                 info->far_ptr = & ((M_Valuator *) node)->inSFTime;
   15168        2517 :                 return GF_OK;
   15169        2806 :         case 12:
   15170        2806 :                 info->name = "inSFVec2f";
   15171        2806 :                 info->eventType = GF_SG_EVENT_IN;
   15172        2806 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFVec2f;
   15173        2806 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   15174        2806 :                 info->far_ptr = & ((M_Valuator *) node)->inSFVec2f;
   15175        2806 :                 return GF_OK;
   15176        2495 :         case 13:
   15177        2495 :                 info->name = "inMFVec2f";
   15178        2495 :                 info->eventType = GF_SG_EVENT_IN;
   15179        2495 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFVec2f;
   15180        2495 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   15181        2495 :                 info->far_ptr = & ((M_Valuator *) node)->inMFVec2f;
   15182        2495 :                 return GF_OK;
   15183        2503 :         case 14:
   15184        2503 :                 info->name = "inSFVec3f";
   15185        2503 :                 info->eventType = GF_SG_EVENT_IN;
   15186        2503 :                 info->on_event_in = ((M_Valuator *)node)->on_inSFVec3f;
   15187        2503 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15188        2503 :                 info->far_ptr = & ((M_Valuator *) node)->inSFVec3f;
   15189        2503 :                 return GF_OK;
   15190        2493 :         case 15:
   15191        2493 :                 info->name = "inMFVec3f";
   15192        2493 :                 info->eventType = GF_SG_EVENT_IN;
   15193        2493 :                 info->on_event_in = ((M_Valuator *)node)->on_inMFVec3f;
   15194        2493 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   15195        2493 :                 info->far_ptr = & ((M_Valuator *) node)->inMFVec3f;
   15196        2493 :                 return GF_OK;
   15197        2504 :         case 16:
   15198        2504 :                 info->name = "outSFBool";
   15199        2504 :                 info->eventType = GF_SG_EVENT_OUT;
   15200        2504 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15201        2504 :                 info->far_ptr = & ((M_Valuator *) node)->outSFBool;
   15202        2504 :                 return GF_OK;
   15203        2500 :         case 17:
   15204        2500 :                 info->name = "outSFColor";
   15205        2500 :                 info->eventType = GF_SG_EVENT_OUT;
   15206        2500 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   15207        2500 :                 info->far_ptr = & ((M_Valuator *) node)->outSFColor;
   15208        2500 :                 return GF_OK;
   15209        2493 :         case 18:
   15210        2493 :                 info->name = "outMFColor";
   15211        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15212        2493 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   15213        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outMFColor;
   15214        2493 :                 return GF_OK;
   15215        3283 :         case 19:
   15216        3283 :                 info->name = "outSFFloat";
   15217        3283 :                 info->eventType = GF_SG_EVENT_OUT;
   15218        3283 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15219        3283 :                 info->far_ptr = & ((M_Valuator *) node)->outSFFloat;
   15220        3283 :                 return GF_OK;
   15221        2495 :         case 20:
   15222        2495 :                 info->name = "outMFFloat";
   15223        2495 :                 info->eventType = GF_SG_EVENT_OUT;
   15224        2495 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   15225        2495 :                 info->far_ptr = & ((M_Valuator *) node)->outMFFloat;
   15226        2495 :                 return GF_OK;
   15227        3298 :         case 21:
   15228        3298 :                 info->name = "outSFInt32";
   15229        3298 :                 info->eventType = GF_SG_EVENT_OUT;
   15230        3298 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15231        3298 :                 info->far_ptr = & ((M_Valuator *) node)->outSFInt32;
   15232        3298 :                 return GF_OK;
   15233        2493 :         case 22:
   15234        2493 :                 info->name = "outMFInt32";
   15235        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15236        2493 :                 info->fieldType = GF_SG_VRML_MFINT32;
   15237        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outMFInt32;
   15238        2493 :                 return GF_OK;
   15239        2493 :         case 23:
   15240        2493 :                 info->name = "outSFRotation";
   15241        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15242        2493 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   15243        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outSFRotation;
   15244        2493 :                 return GF_OK;
   15245        2493 :         case 24:
   15246        2493 :                 info->name = "outMFRotation";
   15247        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15248        2493 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   15249        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outMFRotation;
   15250        2493 :                 return GF_OK;
   15251        2493 :         case 25:
   15252        2493 :                 info->name = "outSFString";
   15253        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15254        2493 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15255        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outSFString;
   15256        2493 :                 return GF_OK;
   15257        2550 :         case 26:
   15258        2550 :                 info->name = "outMFString";
   15259        2550 :                 info->eventType = GF_SG_EVENT_OUT;
   15260        2550 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   15261        2550 :                 info->far_ptr = & ((M_Valuator *) node)->outMFString;
   15262        2550 :                 return GF_OK;
   15263        2495 :         case 27:
   15264        2495 :                 info->name = "outSFTime";
   15265        2495 :                 info->eventType = GF_SG_EVENT_OUT;
   15266        2495 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15267        2495 :                 info->far_ptr = & ((M_Valuator *) node)->outSFTime;
   15268        2495 :                 return GF_OK;
   15269        2805 :         case 28:
   15270        2805 :                 info->name = "outSFVec2f";
   15271        2805 :                 info->eventType = GF_SG_EVENT_OUT;
   15272        2805 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   15273        2805 :                 info->far_ptr = & ((M_Valuator *) node)->outSFVec2f;
   15274        2805 :                 return GF_OK;
   15275        2493 :         case 29:
   15276        2493 :                 info->name = "outMFVec2f";
   15277        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15278        2493 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   15279        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outMFVec2f;
   15280        2493 :                 return GF_OK;
   15281        2493 :         case 30:
   15282        2493 :                 info->name = "outSFVec3f";
   15283        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15284        2493 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15285        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outSFVec3f;
   15286        2493 :                 return GF_OK;
   15287        2493 :         case 31:
   15288        2493 :                 info->name = "outMFVec3f";
   15289        2493 :                 info->eventType = GF_SG_EVENT_OUT;
   15290        2493 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   15291        2493 :                 info->far_ptr = & ((M_Valuator *) node)->outMFVec3f;
   15292        2493 :                 return GF_OK;
   15293        3737 :         case 32:
   15294        3737 :                 info->name = "Factor1";
   15295        3737 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15296        3737 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15297        3737 :                 info->far_ptr = & ((M_Valuator *) node)->Factor1;
   15298        3737 :                 return GF_OK;
   15299        2944 :         case 33:
   15300        2944 :                 info->name = "Factor2";
   15301        2944 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15302        2944 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15303        2944 :                 info->far_ptr = & ((M_Valuator *) node)->Factor2;
   15304        2944 :                 return GF_OK;
   15305        2938 :         case 34:
   15306        2938 :                 info->name = "Factor3";
   15307        2938 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15308        2938 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15309        2938 :                 info->far_ptr = & ((M_Valuator *) node)->Factor3;
   15310        2938 :                 return GF_OK;
   15311        2937 :         case 35:
   15312        2937 :                 info->name = "Factor4";
   15313        2937 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15314        2937 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15315        2937 :                 info->far_ptr = & ((M_Valuator *) node)->Factor4;
   15316        2937 :                 return GF_OK;
   15317        3010 :         case 36:
   15318        3010 :                 info->name = "Offset1";
   15319        3010 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15320        3010 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15321        3010 :                 info->far_ptr = & ((M_Valuator *) node)->Offset1;
   15322        3010 :                 return GF_OK;
   15323        2940 :         case 37:
   15324        2940 :                 info->name = "Offset2";
   15325        2940 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15326        2940 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15327        2940 :                 info->far_ptr = & ((M_Valuator *) node)->Offset2;
   15328        2940 :                 return GF_OK;
   15329        2934 :         case 38:
   15330        2934 :                 info->name = "Offset3";
   15331        2934 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15332        2934 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15333        2934 :                 info->far_ptr = & ((M_Valuator *) node)->Offset3;
   15334        2934 :                 return GF_OK;
   15335        2934 :         case 39:
   15336        2934 :                 info->name = "Offset4";
   15337        2934 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15338        2934 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15339        2934 :                 info->far_ptr = & ((M_Valuator *) node)->Offset4;
   15340        2934 :                 return GF_OK;
   15341        2934 :         case 40:
   15342        2934 :                 info->name = "Sum";
   15343        2934 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15344        2934 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15345        2934 :                 info->far_ptr = & ((M_Valuator *) node)->Sum;
   15346        2934 :                 return GF_OK;
   15347             :         default:
   15348             :                 return GF_BAD_PARAM;
   15349             :         }
   15350             : }
   15351             : 
   15352             : 
   15353        1650 : static s32 Valuator_get_field_index_by_name(char *name)
   15354             : {
   15355        1650 :         if (!strcmp("inSFBool", name)) return 0;
   15356        1585 :         if (!strcmp("inSFColor", name)) return 1;
   15357        1579 :         if (!strcmp("inMFColor", name)) return 2;
   15358        1578 :         if (!strcmp("inSFFloat", name)) return 3;
   15359        1574 :         if (!strcmp("inMFFloat", name)) return 4;
   15360        1573 :         if (!strcmp("inSFInt32", name)) return 5;
   15361         723 :         if (!strcmp("inMFInt32", name)) return 6;
   15362         722 :         if (!strcmp("inSFRotation", name)) return 7;
   15363         721 :         if (!strcmp("inMFRotation", name)) return 8;
   15364         720 :         if (!strcmp("inSFString", name)) return 9;
   15365         717 :         if (!strcmp("inMFString", name)) return 10;
   15366         716 :         if (!strcmp("inSFTime", name)) return 11;
   15367         702 :         if (!strcmp("inSFVec2f", name)) return 12;
   15368         431 :         if (!strcmp("inMFVec2f", name)) return 13;
   15369         429 :         if (!strcmp("inSFVec3f", name)) return 14;
   15370         423 :         if (!strcmp("inMFVec3f", name)) return 15;
   15371         422 :         if (!strcmp("outSFBool", name)) return 16;
   15372         414 :         if (!strcmp("outSFColor", name)) return 17;
   15373         411 :         if (!strcmp("outMFColor", name)) return 18;
   15374         410 :         if (!strcmp("outSFFloat", name)) return 19;
   15375         401 :         if (!strcmp("outMFFloat", name)) return 20;
   15376         399 :         if (!strcmp("outSFInt32", name)) return 21;
   15377         389 :         if (!strcmp("outMFInt32", name)) return 22;
   15378         388 :         if (!strcmp("outSFRotation", name)) return 23;
   15379         387 :         if (!strcmp("outMFRotation", name)) return 24;
   15380         386 :         if (!strcmp("outSFString", name)) return 25;
   15381         385 :         if (!strcmp("outMFString", name)) return 26;
   15382         353 :         if (!strcmp("outSFTime", name)) return 27;
   15383         351 :         if (!strcmp("outSFVec2f", name)) return 28;
   15384          80 :         if (!strcmp("outMFVec2f", name)) return 29;
   15385          79 :         if (!strcmp("outSFVec3f", name)) return 30;
   15386          78 :         if (!strcmp("outMFVec3f", name)) return 31;
   15387          77 :         if (!strcmp("Factor1", name)) return 32;
   15388          56 :         if (!strcmp("Factor2", name)) return 33;
   15389          45 :         if (!strcmp("Factor3", name)) return 34;
   15390          40 :         if (!strcmp("Factor4", name)) return 35;
   15391          36 :         if (!strcmp("Offset1", name)) return 36;
   15392          10 :         if (!strcmp("Offset2", name)) return 37;
   15393           3 :         if (!strcmp("Offset3", name)) return 38;
   15394           2 :         if (!strcmp("Offset4", name)) return 39;
   15395           1 :         if (!strcmp("Sum", name)) return 40;
   15396           0 :         return -1;
   15397             : }
   15398          81 : static Bool Valuator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15399             : {
   15400          81 :         switch (FieldIndex) {
   15401           1 :         case 32:
   15402           1 :                 *AType = 0;
   15403           1 :                 *QType = 0;
   15404           1 :                 *b_min = FIX_MIN;
   15405           1 :                 *b_max = FIX_MAX;
   15406             :                 return 1;
   15407           1 :         case 33:
   15408           1 :                 *AType = 0;
   15409           1 :                 *QType = 0;
   15410           1 :                 *b_min = FIX_MIN;
   15411           1 :                 *b_max = FIX_MAX;
   15412             :                 return 1;
   15413           1 :         case 34:
   15414           1 :                 *AType = 0;
   15415           1 :                 *QType = 0;
   15416           1 :                 *b_min = FIX_MIN;
   15417           1 :                 *b_max = FIX_MAX;
   15418             :                 return 1;
   15419           1 :         case 35:
   15420           1 :                 *AType = 0;
   15421           1 :                 *QType = 0;
   15422           1 :                 *b_min = FIX_MIN;
   15423           1 :                 *b_max = FIX_MAX;
   15424             :                 return 1;
   15425           9 :         case 36:
   15426           9 :                 *AType = 0;
   15427           9 :                 *QType = 0;
   15428           9 :                 *b_min = FIX_MIN;
   15429           9 :                 *b_max = FIX_MAX;
   15430             :                 return 1;
   15431           1 :         case 37:
   15432           1 :                 *AType = 0;
   15433           1 :                 *QType = 0;
   15434           1 :                 *b_min = FIX_MIN;
   15435           1 :                 *b_max = FIX_MAX;
   15436             :                 return 1;
   15437           1 :         case 38:
   15438           1 :                 *AType = 0;
   15439           1 :                 *QType = 0;
   15440           1 :                 *b_min = FIX_MIN;
   15441           1 :                 *b_max = FIX_MAX;
   15442             :                 return 1;
   15443           1 :         case 39:
   15444           1 :                 *AType = 0;
   15445           1 :                 *QType = 0;
   15446           1 :                 *b_min = FIX_MIN;
   15447           1 :                 *b_max = FIX_MAX;
   15448             :                 return 1;
   15449             :         default:
   15450             :                 return 0;
   15451             :         }
   15452             : }
   15453             : 
   15454             : 
   15455             : 
   15456        2035 : GF_Node *Valuator_Create()
   15457             : {
   15458             :         M_Valuator *p;
   15459        2035 :         GF_SAFEALLOC(p, M_Valuator);
   15460        2035 :         if(!p) return NULL;
   15461        2035 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Valuator);
   15462             : 
   15463             :         /*default field values*/
   15464        2035 :         p->Factor1 = FLT2FIX(1.0);
   15465        2035 :         p->Factor2 = FLT2FIX(1.0);
   15466        2035 :         p->Factor3 = FLT2FIX(1.0);
   15467        2035 :         p->Factor4 = FLT2FIX(1.0);
   15468        2035 :         p->Offset1 = FLT2FIX(0.0);
   15469        2035 :         p->Offset2 = FLT2FIX(0.0);
   15470        2035 :         p->Offset3 = FLT2FIX(0.0);
   15471        2035 :         p->Offset4 = FLT2FIX(0.0);
   15472        2035 :         return (GF_Node *)p;
   15473             : }
   15474             : 
   15475             : 
   15476             : /*
   15477             :         Viewpoint Node deletion
   15478             : */
   15479             : 
   15480             : static void Viewpoint_Del(GF_Node *node)
   15481             : {
   15482             :         M_Viewpoint *p = (M_Viewpoint *) node;
   15483         103 :         gf_sg_sfstring_del(p->description);
   15484         103 :         gf_node_free((GF_Node *) p);
   15485             : }
   15486             : 
   15487             : static const u16 Viewpoint_Def2All[] = { 1, 2, 3, 4, 5};
   15488             : static const u16 Viewpoint_In2All[] = { 0, 1, 2, 3, 4};
   15489             : static const u16 Viewpoint_Out2All[] = { 1, 2, 3, 4, 6, 7};
   15490             : static const u16 Viewpoint_Dyn2All[] = { 1, 3, 4};
   15491             : 
   15492             : static u32 Viewpoint_get_field_count(GF_Node *node, u8 IndexMode)
   15493             : {
   15494             :         switch(IndexMode) {
   15495             :         case GF_SG_FIELD_CODING_IN:
   15496             :                 return 5;
   15497             :         case GF_SG_FIELD_CODING_DEF:
   15498             :                 return 5;
   15499             :         case GF_SG_FIELD_CODING_OUT:
   15500             :                 return 6;
   15501             :         case GF_SG_FIELD_CODING_DYN:
   15502             :                 return 3;
   15503             :         default:
   15504             :                 return 8;
   15505             :         }
   15506             : }
   15507             : 
   15508             : static GF_Err Viewpoint_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15509             : {
   15510         138 :         switch(IndexMode) {
   15511           0 :         case GF_SG_FIELD_CODING_IN:
   15512           0 :                 *allField = Viewpoint_In2All[inField];
   15513             :                 return GF_OK;
   15514         130 :         case GF_SG_FIELD_CODING_DEF:
   15515         130 :                 *allField = Viewpoint_Def2All[inField];
   15516             :                 return GF_OK;
   15517           0 :         case GF_SG_FIELD_CODING_OUT:
   15518           0 :                 *allField = Viewpoint_Out2All[inField];
   15519             :                 return GF_OK;
   15520           0 :         case GF_SG_FIELD_CODING_DYN:
   15521           0 :                 *allField = Viewpoint_Dyn2All[inField];
   15522             :                 return GF_OK;
   15523             :         default:
   15524             :                 return GF_BAD_PARAM;
   15525             :         }
   15526             : }
   15527         599 : static GF_Err Viewpoint_get_field(GF_Node *node, GF_FieldInfo *info)
   15528             : {
   15529         599 :         switch (info->fieldIndex) {
   15530          30 :         case 0:
   15531          30 :                 info->name = "set_bind";
   15532          30 :                 info->eventType = GF_SG_EVENT_IN;
   15533          30 :                 info->on_event_in = ((M_Viewpoint *)node)->on_set_bind;
   15534          30 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15535          30 :                 info->far_ptr = & ((M_Viewpoint *) node)->set_bind;
   15536          30 :                 return GF_OK;
   15537          73 :         case 1:
   15538          73 :                 info->name = "fieldOfView";
   15539          73 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15540          73 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   15541          73 :                 info->far_ptr = & ((M_Viewpoint *) node)->fieldOfView;
   15542          73 :                 return GF_OK;
   15543          76 :         case 2:
   15544          76 :                 info->name = "jump";
   15545          76 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15546          76 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15547          76 :                 info->far_ptr = & ((M_Viewpoint *) node)->jump;
   15548          76 :                 return GF_OK;
   15549          80 :         case 3:
   15550          80 :                 info->name = "orientation";
   15551          80 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15552          80 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   15553          80 :                 info->far_ptr = & ((M_Viewpoint *) node)->orientation;
   15554          80 :                 return GF_OK;
   15555         162 :         case 4:
   15556         162 :                 info->name = "position";
   15557         162 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15558         162 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15559         162 :                 info->far_ptr = & ((M_Viewpoint *) node)->position;
   15560         162 :                 return GF_OK;
   15561         144 :         case 5:
   15562         144 :                 info->name = "description";
   15563         144 :                 info->eventType = GF_SG_EVENT_FIELD;
   15564         144 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15565         144 :                 info->far_ptr = & ((M_Viewpoint *) node)->description;
   15566         144 :                 return GF_OK;
   15567          17 :         case 6:
   15568          17 :                 info->name = "bindTime";
   15569          17 :                 info->eventType = GF_SG_EVENT_OUT;
   15570          17 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15571          17 :                 info->far_ptr = & ((M_Viewpoint *) node)->bindTime;
   15572          17 :                 return GF_OK;
   15573          17 :         case 7:
   15574          17 :                 info->name = "isBound";
   15575          17 :                 info->eventType = GF_SG_EVENT_OUT;
   15576          17 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15577          17 :                 info->far_ptr = & ((M_Viewpoint *) node)->isBound;
   15578          17 :                 return GF_OK;
   15579             :         default:
   15580             :                 return GF_BAD_PARAM;
   15581             :         }
   15582             : }
   15583             : 
   15584             : 
   15585          99 : static s32 Viewpoint_get_field_index_by_name(char *name)
   15586             : {
   15587          99 :         if (!strcmp("set_bind", name)) return 0;
   15588          92 :         if (!strcmp("fieldOfView", name)) return 1;
   15589          90 :         if (!strcmp("jump", name)) return 2;
   15590          85 :         if (!strcmp("orientation", name)) return 3;
   15591          77 :         if (!strcmp("position", name)) return 4;
   15592          31 :         if (!strcmp("description", name)) return 5;
   15593           2 :         if (!strcmp("bindTime", name)) return 6;
   15594           1 :         if (!strcmp("isBound", name)) return 7;
   15595           0 :         return -1;
   15596             : }
   15597             : static Bool Viewpoint_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15598             : {
   15599          16 :         switch (FieldIndex) {
   15600           1 :         case 1:
   15601           1 :                 *AType = 8;
   15602           1 :                 *QType = 6;
   15603           1 :                 *b_min = FLT2FIX(0);
   15604           1 :                 *b_max = FLT2FIX(3.1415927);
   15605             :                 return 1;
   15606           1 :         case 3:
   15607           1 :                 *AType = 10;
   15608           1 :                 *QType = 10;
   15609             :                 return 1;
   15610           9 :         case 4:
   15611           9 :                 *AType = 1;
   15612           9 :                 *QType = 1;
   15613           9 :                 *b_min = FIX_MIN;
   15614           9 :                 *b_max = FIX_MAX;
   15615             :                 return 1;
   15616             :         default:
   15617             :                 return 0;
   15618             :         }
   15619             : }
   15620             : 
   15621             : 
   15622             : 
   15623         103 : GF_Node *Viewpoint_Create()
   15624             : {
   15625             :         M_Viewpoint *p;
   15626         103 :         GF_SAFEALLOC(p, M_Viewpoint);
   15627         103 :         if(!p) return NULL;
   15628         103 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Viewpoint);
   15629             : 
   15630             :         /*default field values*/
   15631         103 :         p->fieldOfView = FLT2FIX(0.785398);
   15632         103 :         p->jump = 1;
   15633         103 :         p->orientation.x = FLT2FIX(0);
   15634         103 :         p->orientation.y = FLT2FIX(0);
   15635         103 :         p->orientation.z = FLT2FIX(1);
   15636         103 :         p->orientation.q = FLT2FIX(0);
   15637         103 :         p->position.x = FLT2FIX(0);
   15638         103 :         p->position.y = FLT2FIX(0);
   15639         103 :         p->position.z = FLT2FIX(10);
   15640         103 :         return (GF_Node *)p;
   15641             : }
   15642             : 
   15643             : 
   15644             : /*
   15645             :         VisibilitySensor Node deletion
   15646             : */
   15647             : 
   15648             : static void VisibilitySensor_Del(GF_Node *node)
   15649             : {
   15650             :         M_VisibilitySensor *p = (M_VisibilitySensor *) node;
   15651          78 :         gf_node_free((GF_Node *) p);
   15652             : }
   15653             : 
   15654             : static const u16 VisibilitySensor_Def2All[] = { 0, 1, 2};
   15655             : static const u16 VisibilitySensor_In2All[] = { 0, 1, 2};
   15656             : static const u16 VisibilitySensor_Out2All[] = { 0, 1, 2, 3, 4, 5};
   15657             : static const u16 VisibilitySensor_Dyn2All[] = { 0, 2};
   15658             : 
   15659             : static u32 VisibilitySensor_get_field_count(GF_Node *node, u8 IndexMode)
   15660             : {
   15661             :         switch(IndexMode) {
   15662             :         case GF_SG_FIELD_CODING_IN:
   15663             :                 return 3;
   15664             :         case GF_SG_FIELD_CODING_DEF:
   15665             :                 return 3;
   15666             :         case GF_SG_FIELD_CODING_OUT:
   15667             :                 return 6;
   15668             :         case GF_SG_FIELD_CODING_DYN:
   15669             :                 return 2;
   15670             :         default:
   15671             :                 return 6;
   15672             :         }
   15673             : }
   15674             : 
   15675             : static GF_Err VisibilitySensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15676             : {
   15677          66 :         switch(IndexMode) {
   15678           0 :         case GF_SG_FIELD_CODING_IN:
   15679           0 :                 *allField = VisibilitySensor_In2All[inField];
   15680             :                 return GF_OK;
   15681          60 :         case GF_SG_FIELD_CODING_DEF:
   15682          60 :                 *allField = VisibilitySensor_Def2All[inField];
   15683             :                 return GF_OK;
   15684           0 :         case GF_SG_FIELD_CODING_OUT:
   15685           0 :                 *allField = VisibilitySensor_Out2All[inField];
   15686             :                 return GF_OK;
   15687           0 :         case GF_SG_FIELD_CODING_DYN:
   15688           0 :                 *allField = VisibilitySensor_Dyn2All[inField];
   15689             :                 return GF_OK;
   15690             :         default:
   15691             :                 return GF_BAD_PARAM;
   15692             :         }
   15693             : }
   15694         326 : static GF_Err VisibilitySensor_get_field(GF_Node *node, GF_FieldInfo *info)
   15695             : {
   15696         326 :         switch (info->fieldIndex) {
   15697          85 :         case 0:
   15698          85 :                 info->name = "center";
   15699          85 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15700          85 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15701          85 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->center;
   15702          85 :                 return GF_OK;
   15703          84 :         case 1:
   15704          84 :                 info->name = "enabled";
   15705          84 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15706          84 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15707          84 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->enabled;
   15708          84 :                 return GF_OK;
   15709          85 :         case 2:
   15710          85 :                 info->name = "size";
   15711          85 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15712          85 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   15713          85 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->size;
   15714          85 :                 return GF_OK;
   15715          25 :         case 3:
   15716          25 :                 info->name = "enterTime";
   15717          25 :                 info->eventType = GF_SG_EVENT_OUT;
   15718          25 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15719          25 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->enterTime;
   15720          25 :                 return GF_OK;
   15721          24 :         case 4:
   15722          24 :                 info->name = "exitTime";
   15723          24 :                 info->eventType = GF_SG_EVENT_OUT;
   15724          24 :                 info->fieldType = GF_SG_VRML_SFTIME;
   15725          24 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->exitTime;
   15726          24 :                 return GF_OK;
   15727          23 :         case 5:
   15728          23 :                 info->name = "isActive";
   15729          23 :                 info->eventType = GF_SG_EVENT_OUT;
   15730          23 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15731          23 :                 info->far_ptr = & ((M_VisibilitySensor *) node)->isActive;
   15732          23 :                 return GF_OK;
   15733             :         default:
   15734             :                 return GF_BAD_PARAM;
   15735             :         }
   15736             : }
   15737             : 
   15738             : 
   15739          10 : static s32 VisibilitySensor_get_field_index_by_name(char *name)
   15740             : {
   15741          10 :         if (!strcmp("center", name)) return 0;
   15742           8 :         if (!strcmp("enabled", name)) return 1;
   15743           7 :         if (!strcmp("size", name)) return 2;
   15744           5 :         if (!strcmp("enterTime", name)) return 3;
   15745           3 :         if (!strcmp("exitTime", name)) return 4;
   15746           1 :         if (!strcmp("isActive", name)) return 5;
   15747           0 :         return -1;
   15748             : }
   15749             : static Bool VisibilitySensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15750             : {
   15751           6 :         switch (FieldIndex) {
   15752           1 :         case 0:
   15753           1 :                 *AType = 1;
   15754           1 :                 *QType = 1;
   15755           1 :                 *b_min = FIX_MIN;
   15756           1 :                 *b_max = FIX_MAX;
   15757             :                 return 1;
   15758           1 :         case 2:
   15759           1 :                 *AType = 11;
   15760           1 :                 *QType = 11;
   15761           1 :                 *b_min = FLT2FIX(0);
   15762           1 :                 *b_max = FIX_MAX;
   15763             :                 return 1;
   15764             :         default:
   15765             :                 return 0;
   15766             :         }
   15767             : }
   15768             : 
   15769             : 
   15770             : 
   15771          78 : GF_Node *VisibilitySensor_Create()
   15772             : {
   15773             :         M_VisibilitySensor *p;
   15774          78 :         GF_SAFEALLOC(p, M_VisibilitySensor);
   15775          78 :         if(!p) return NULL;
   15776          78 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_VisibilitySensor);
   15777             : 
   15778             :         /*default field values*/
   15779          78 :         p->center.x = FLT2FIX(0);
   15780          78 :         p->center.y = FLT2FIX(0);
   15781          78 :         p->center.z = FLT2FIX(0);
   15782          78 :         p->enabled = 1;
   15783          78 :         p->size.x = FLT2FIX(0);
   15784          78 :         p->size.y = FLT2FIX(0);
   15785          78 :         p->size.z = FLT2FIX(0);
   15786          78 :         return (GF_Node *)p;
   15787             : }
   15788             : 
   15789             : 
   15790             : /*
   15791             :         Viseme Node deletion
   15792             : */
   15793             : 
   15794             : static void Viseme_Del(GF_Node *node)
   15795             : {
   15796             :         M_Viseme *p = (M_Viseme *) node;
   15797           1 :         gf_node_free((GF_Node *) p);
   15798             : }
   15799             : 
   15800             : static const u16 Viseme_Def2All[] = { 0, 1, 2, 3};
   15801             : static const u16 Viseme_In2All[] = { 0, 1, 2, 3};
   15802             : static const u16 Viseme_Out2All[] = { 0, 1, 2, 3};
   15803             : 
   15804             : static u32 Viseme_get_field_count(GF_Node *node, u8 IndexMode)
   15805             : {
   15806           6 :         switch(IndexMode) {
   15807             :         case GF_SG_FIELD_CODING_IN:
   15808             :                 return 4;
   15809             :         case GF_SG_FIELD_CODING_DEF:
   15810             :                 return 4;
   15811             :         case GF_SG_FIELD_CODING_OUT:
   15812             :                 return 4;
   15813           1 :         case GF_SG_FIELD_CODING_DYN:
   15814             :                 return 0;
   15815             :         default:
   15816             :                 return 4;
   15817             :         }
   15818             : }
   15819             : 
   15820             : static GF_Err Viseme_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15821             : {
   15822           4 :         switch(IndexMode) {
   15823           0 :         case GF_SG_FIELD_CODING_IN:
   15824           0 :                 *allField = Viseme_In2All[inField];
   15825             :                 return GF_OK;
   15826           0 :         case GF_SG_FIELD_CODING_DEF:
   15827           0 :                 *allField = Viseme_Def2All[inField];
   15828             :                 return GF_OK;
   15829           0 :         case GF_SG_FIELD_CODING_OUT:
   15830           0 :                 *allField = Viseme_Out2All[inField];
   15831             :                 return GF_OK;
   15832             :         default:
   15833             :                 return GF_BAD_PARAM;
   15834             :         }
   15835             : }
   15836           8 : static GF_Err Viseme_get_field(GF_Node *node, GF_FieldInfo *info)
   15837             : {
   15838           8 :         switch (info->fieldIndex) {
   15839           2 :         case 0:
   15840           2 :                 info->name = "viseme_select1";
   15841           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15842           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15843           2 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_select1;
   15844           2 :                 return GF_OK;
   15845           2 :         case 1:
   15846           2 :                 info->name = "viseme_select2";
   15847           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15848           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15849           2 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_select2;
   15850           2 :                 return GF_OK;
   15851           2 :         case 2:
   15852           2 :                 info->name = "viseme_blend";
   15853           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15854           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   15855           2 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_blend;
   15856           2 :                 return GF_OK;
   15857           2 :         case 3:
   15858           2 :                 info->name = "viseme_def";
   15859           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   15860           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   15861           2 :                 info->far_ptr = & ((M_Viseme *) node)->viseme_def;
   15862           2 :                 return GF_OK;
   15863             :         default:
   15864             :                 return GF_BAD_PARAM;
   15865             :         }
   15866             : }
   15867             : 
   15868             : 
   15869           4 : static s32 Viseme_get_field_index_by_name(char *name)
   15870             : {
   15871           4 :         if (!strcmp("viseme_select1", name)) return 0;
   15872           3 :         if (!strcmp("viseme_select2", name)) return 1;
   15873           2 :         if (!strcmp("viseme_blend", name)) return 2;
   15874           1 :         if (!strcmp("viseme_def", name)) return 3;
   15875           0 :         return -1;
   15876             : }
   15877             : static Bool Viseme_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15878             : {
   15879           4 :         switch (FieldIndex) {
   15880           1 :         case 0:
   15881           1 :                 *AType = 0;
   15882           1 :                 *QType = 13;
   15883           1 :                 *QT13_bits = 5;
   15884           1 :                 *b_min = FLT2FIX(0);
   15885           1 :                 *b_max = FLT2FIX(31);
   15886             :                 return 1;
   15887           1 :         case 1:
   15888           1 :                 *AType = 0;
   15889           1 :                 *QType = 13;
   15890           1 :                 *QT13_bits = 5;
   15891           1 :                 *b_min = FLT2FIX(0);
   15892           1 :                 *b_max = FLT2FIX(31);
   15893             :                 return 1;
   15894           1 :         case 2:
   15895           1 :                 *AType = 0;
   15896           1 :                 *QType = 13;
   15897           1 :                 *QT13_bits = 6;
   15898           1 :                 *b_min = FLT2FIX(0);
   15899           1 :                 *b_max = FLT2FIX(63);
   15900             :                 return 1;
   15901             :         default:
   15902             :                 return 0;
   15903             :         }
   15904             : }
   15905             : 
   15906             : 
   15907             : 
   15908           1 : GF_Node *Viseme_Create()
   15909             : {
   15910             :         M_Viseme *p;
   15911           1 :         GF_SAFEALLOC(p, M_Viseme);
   15912           1 :         if(!p) return NULL;
   15913           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Viseme);
   15914             : 
   15915             :         /*default field values*/
   15916           1 :         p->viseme_select1 = 0;
   15917           1 :         p->viseme_select2 = 0;
   15918           1 :         p->viseme_blend = 0;
   15919           1 :         return (GF_Node *)p;
   15920             : }
   15921             : 
   15922             : 
   15923             : /*
   15924             :         WorldInfo Node deletion
   15925             : */
   15926             : 
   15927         511 : static void WorldInfo_Del(GF_Node *node)
   15928             : {
   15929             :         M_WorldInfo *p = (M_WorldInfo *) node;
   15930         511 :         gf_sg_mfstring_del(p->info);
   15931         511 :         gf_sg_sfstring_del(p->title);
   15932         511 :         gf_node_free((GF_Node *) p);
   15933         511 : }
   15934             : 
   15935             : static const u16 WorldInfo_Def2All[] = { 0, 1};
   15936             : 
   15937             : static u32 WorldInfo_get_field_count(GF_Node *node, u8 IndexMode)
   15938             : {
   15939         173 :         switch(IndexMode) {
   15940             :         case GF_SG_FIELD_CODING_IN:
   15941             :                 return 0;
   15942         134 :         case GF_SG_FIELD_CODING_DEF:
   15943             :                 return 2;
   15944             :         case GF_SG_FIELD_CODING_OUT:
   15945             :                 return 0;
   15946             :         case GF_SG_FIELD_CODING_DYN:
   15947             :                 return 0;
   15948          36 :         default:
   15949             :                 return 2;
   15950             :         }
   15951             : }
   15952             : 
   15953             : static GF_Err WorldInfo_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   15954             : {
   15955         174 :         switch(IndexMode) {
   15956         172 :         case GF_SG_FIELD_CODING_DEF:
   15957         172 :                 *allField = WorldInfo_Def2All[inField];
   15958             :                 return GF_OK;
   15959             :         default:
   15960             :                 return GF_BAD_PARAM;
   15961             :         }
   15962             : }
   15963             : static GF_Err WorldInfo_get_field(GF_Node *node, GF_FieldInfo *info)
   15964             : {
   15965        1308 :         switch (info->fieldIndex) {
   15966         654 :         case 0:
   15967         654 :                 info->name = "info";
   15968         654 :                 info->eventType = GF_SG_EVENT_FIELD;
   15969         654 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   15970         654 :                 info->far_ptr = & ((M_WorldInfo *) node)->info;
   15971             :                 return GF_OK;
   15972         654 :         case 1:
   15973         654 :                 info->name = "title";
   15974         654 :                 info->eventType = GF_SG_EVENT_FIELD;
   15975         654 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   15976         654 :                 info->far_ptr = & ((M_WorldInfo *) node)->title;
   15977             :                 return GF_OK;
   15978             :         default:
   15979             :                 return GF_BAD_PARAM;
   15980             :         }
   15981             : }
   15982             : 
   15983             : 
   15984         770 : static s32 WorldInfo_get_field_index_by_name(char *name)
   15985             : {
   15986         770 :         if (!strcmp("info", name)) return 0;
   15987         385 :         if (!strcmp("title", name)) return 1;
   15988           0 :         return -1;
   15989             : }
   15990             : static Bool WorldInfo_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   15991             : {
   15992             :         switch (FieldIndex) {
   15993             :         default:
   15994             :                 return 0;
   15995             :         }
   15996             : }
   15997             : 
   15998             : 
   15999             : 
   16000         511 : GF_Node *WorldInfo_Create()
   16001             : {
   16002             :         M_WorldInfo *p;
   16003         511 :         GF_SAFEALLOC(p, M_WorldInfo);
   16004         511 :         if(!p) return NULL;
   16005         511 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_WorldInfo);
   16006             : 
   16007             :         /*default field values*/
   16008         511 :         return (GF_Node *)p;
   16009             : }
   16010             : 
   16011             : 
   16012             : /*
   16013             :         AcousticMaterial Node deletion
   16014             : */
   16015             : 
   16016           1 : static void AcousticMaterial_Del(GF_Node *node)
   16017             : {
   16018             :         M_AcousticMaterial *p = (M_AcousticMaterial *) node;
   16019           1 :         gf_sg_mffloat_del(p->reffunc);
   16020           1 :         gf_sg_mffloat_del(p->transfunc);
   16021           1 :         gf_sg_mffloat_del(p->refFrequency);
   16022           1 :         gf_sg_mffloat_del(p->transFrequency);
   16023           1 :         gf_node_free((GF_Node *) p);
   16024           1 : }
   16025             : 
   16026             : static const u16 AcousticMaterial_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   16027             : static const u16 AcousticMaterial_In2All[] = { 0, 1, 2, 3, 4, 5};
   16028             : static const u16 AcousticMaterial_Out2All[] = { 0, 1, 2, 3, 4, 5};
   16029             : static const u16 AcousticMaterial_Dyn2All[] = { 0, 1, 2, 3, 4, 5};
   16030             : 
   16031             : static u32 AcousticMaterial_get_field_count(GF_Node *node, u8 IndexMode)
   16032             : {
   16033           6 :         switch(IndexMode) {
   16034             :         case GF_SG_FIELD_CODING_IN:
   16035             :                 return 6;
   16036           1 :         case GF_SG_FIELD_CODING_DEF:
   16037             :                 return 10;
   16038             :         case GF_SG_FIELD_CODING_OUT:
   16039             :                 return 6;
   16040             :         case GF_SG_FIELD_CODING_DYN:
   16041             :                 return 6;
   16042           2 :         default:
   16043             :                 return 10;
   16044             :         }
   16045             : }
   16046             : 
   16047             : static GF_Err AcousticMaterial_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16048             : {
   16049          10 :         switch(IndexMode) {
   16050           0 :         case GF_SG_FIELD_CODING_IN:
   16051           0 :                 *allField = AcousticMaterial_In2All[inField];
   16052             :                 return GF_OK;
   16053           0 :         case GF_SG_FIELD_CODING_DEF:
   16054           0 :                 *allField = AcousticMaterial_Def2All[inField];
   16055             :                 return GF_OK;
   16056           0 :         case GF_SG_FIELD_CODING_OUT:
   16057           0 :                 *allField = AcousticMaterial_Out2All[inField];
   16058             :                 return GF_OK;
   16059           0 :         case GF_SG_FIELD_CODING_DYN:
   16060           0 :                 *allField = AcousticMaterial_Dyn2All[inField];
   16061             :                 return GF_OK;
   16062             :         default:
   16063             :                 return GF_BAD_PARAM;
   16064             :         }
   16065             : }
   16066          20 : static GF_Err AcousticMaterial_get_field(GF_Node *node, GF_FieldInfo *info)
   16067             : {
   16068          20 :         switch (info->fieldIndex) {
   16069           2 :         case 0:
   16070           2 :                 info->name = "ambientIntensity";
   16071           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16072           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16073           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->ambientIntensity;
   16074           2 :                 return GF_OK;
   16075           2 :         case 1:
   16076           2 :                 info->name = "diffuseColor";
   16077           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16078           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   16079           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->diffuseColor;
   16080           2 :                 return GF_OK;
   16081           2 :         case 2:
   16082           2 :                 info->name = "emissiveColor";
   16083           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16084           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   16085           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->emissiveColor;
   16086           2 :                 return GF_OK;
   16087           2 :         case 3:
   16088           2 :                 info->name = "shininess";
   16089           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16090           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16091           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->shininess;
   16092           2 :                 return GF_OK;
   16093           2 :         case 4:
   16094           2 :                 info->name = "specularColor";
   16095           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16096           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   16097           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->specularColor;
   16098           2 :                 return GF_OK;
   16099           2 :         case 5:
   16100           2 :                 info->name = "transparency";
   16101           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16102           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16103           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->transparency;
   16104           2 :                 return GF_OK;
   16105           2 :         case 6:
   16106           2 :                 info->name = "reffunc";
   16107           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16108           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16109           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->reffunc;
   16110           2 :                 return GF_OK;
   16111           2 :         case 7:
   16112           2 :                 info->name = "transfunc";
   16113           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16114           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16115           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->transfunc;
   16116           2 :                 return GF_OK;
   16117           2 :         case 8:
   16118           2 :                 info->name = "refFrequency";
   16119           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16120           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16121           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->refFrequency;
   16122           2 :                 return GF_OK;
   16123           2 :         case 9:
   16124           2 :                 info->name = "transFrequency";
   16125           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16126           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16127           2 :                 info->far_ptr = & ((M_AcousticMaterial *) node)->transFrequency;
   16128           2 :                 return GF_OK;
   16129             :         default:
   16130             :                 return GF_BAD_PARAM;
   16131             :         }
   16132             : }
   16133             : 
   16134             : 
   16135          10 : static s32 AcousticMaterial_get_field_index_by_name(char *name)
   16136             : {
   16137          10 :         if (!strcmp("ambientIntensity", name)) return 0;
   16138           9 :         if (!strcmp("diffuseColor", name)) return 1;
   16139           8 :         if (!strcmp("emissiveColor", name)) return 2;
   16140           7 :         if (!strcmp("shininess", name)) return 3;
   16141           6 :         if (!strcmp("specularColor", name)) return 4;
   16142           5 :         if (!strcmp("transparency", name)) return 5;
   16143           4 :         if (!strcmp("reffunc", name)) return 6;
   16144           3 :         if (!strcmp("transfunc", name)) return 7;
   16145           2 :         if (!strcmp("refFrequency", name)) return 8;
   16146           1 :         if (!strcmp("transFrequency", name)) return 9;
   16147           0 :         return -1;
   16148             : }
   16149          10 : static Bool AcousticMaterial_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   16150             : {
   16151          10 :         switch (FieldIndex) {
   16152           1 :         case 0:
   16153           1 :                 *AType = 8;
   16154           1 :                 *QType = 4;
   16155           1 :                 *b_min = FLT2FIX(0);
   16156           1 :                 *b_max = FLT2FIX(1);
   16157             :                 return 1;
   16158           1 :         case 1:
   16159           1 :                 *AType = 8;
   16160           1 :                 *QType = 4;
   16161           1 :                 *b_min = FLT2FIX(0);
   16162           1 :                 *b_max = FLT2FIX(1);
   16163             :                 return 1;
   16164           1 :         case 2:
   16165           1 :                 *AType = 8;
   16166           1 :                 *QType = 4;
   16167           1 :                 *b_min = FLT2FIX(0);
   16168           1 :                 *b_max = FLT2FIX(1);
   16169             :                 return 1;
   16170           1 :         case 3:
   16171           1 :                 *AType = 8;
   16172           1 :                 *QType = 4;
   16173           1 :                 *b_min = FLT2FIX(0);
   16174           1 :                 *b_max = FLT2FIX(1);
   16175             :                 return 1;
   16176           1 :         case 4:
   16177           1 :                 *AType = 8;
   16178           1 :                 *QType = 4;
   16179           1 :                 *b_min = FLT2FIX(0);
   16180           1 :                 *b_max = FLT2FIX(1);
   16181             :                 return 1;
   16182           1 :         case 5:
   16183           1 :                 *AType = 8;
   16184           1 :                 *QType = 4;
   16185           1 :                 *b_min = FLT2FIX(0);
   16186           1 :                 *b_max = FLT2FIX(1);
   16187             :                 return 1;
   16188           1 :         case 6:
   16189           1 :                 *AType = 0;
   16190           1 :                 *QType = 0;
   16191           1 :                 *b_min = FIX_MIN;
   16192           1 :                 *b_max = FIX_MAX;
   16193             :                 return 1;
   16194           1 :         case 7:
   16195           1 :                 *AType = 0;
   16196           1 :                 *QType = 0;
   16197           1 :                 *b_min = FIX_MIN;
   16198           1 :                 *b_max = FIX_MAX;
   16199             :                 return 1;
   16200           1 :         case 8:
   16201           1 :                 *AType = 0;
   16202           1 :                 *QType = 0;
   16203           1 :                 *b_min = FLT2FIX(0);
   16204           1 :                 *b_max = FIX_MAX;
   16205             :                 return 1;
   16206           1 :         case 9:
   16207           1 :                 *AType = 0;
   16208           1 :                 *QType = 0;
   16209           1 :                 *b_min = FLT2FIX(0);
   16210           1 :                 *b_max = FIX_MAX;
   16211             :                 return 1;
   16212             :         default:
   16213             :                 return 0;
   16214             :         }
   16215             : }
   16216             : 
   16217             : 
   16218             : 
   16219           1 : GF_Node *AcousticMaterial_Create()
   16220             : {
   16221             :         M_AcousticMaterial *p;
   16222           1 :         GF_SAFEALLOC(p, M_AcousticMaterial);
   16223           1 :         if(!p) return NULL;
   16224           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AcousticMaterial);
   16225             : 
   16226             :         /*default field values*/
   16227           1 :         p->ambientIntensity = FLT2FIX(0.2);
   16228           1 :         p->diffuseColor.red = FLT2FIX(0.8);
   16229           1 :         p->diffuseColor.green = FLT2FIX(0.8);
   16230           1 :         p->diffuseColor.blue = FLT2FIX(0.8);
   16231           1 :         p->emissiveColor.red = FLT2FIX(0);
   16232           1 :         p->emissiveColor.green = FLT2FIX(0);
   16233           1 :         p->emissiveColor.blue = FLT2FIX(0);
   16234           1 :         p->shininess = FLT2FIX(0.2);
   16235           1 :         p->specularColor.red = FLT2FIX(0);
   16236           1 :         p->specularColor.green = FLT2FIX(0);
   16237           1 :         p->specularColor.blue = FLT2FIX(0);
   16238           1 :         p->transparency = FLT2FIX(0);
   16239           1 :         p->reffunc.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16240           1 :         p->reffunc.count = 1;
   16241           1 :         p->reffunc.vals[0] = FLT2FIX(0);
   16242           1 :         p->transfunc.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16243           1 :         p->transfunc.count = 1;
   16244           1 :         p->transfunc.vals[0] = FLT2FIX(1);
   16245           1 :         p->refFrequency.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16246           1 :         p->refFrequency.count = 1;
   16247           1 :         p->refFrequency.vals[0] = FLT2FIX(0);
   16248           1 :         p->transFrequency.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16249           1 :         p->transFrequency.count = 1;
   16250           1 :         p->transFrequency.vals[0] = FLT2FIX(0);
   16251           1 :         return (GF_Node *)p;
   16252             : }
   16253             : 
   16254             : 
   16255             : /*
   16256             :         AcousticScene Node deletion
   16257             : */
   16258             : 
   16259           1 : static void AcousticScene_Del(GF_Node *node)
   16260             : {
   16261             :         M_AcousticScene *p = (M_AcousticScene *) node;
   16262           1 :         gf_sg_mftime_del(p->reverbTime);
   16263           1 :         gf_sg_mffloat_del(p->reverbFreq);
   16264           1 :         gf_node_free((GF_Node *) p);
   16265           1 : }
   16266             : 
   16267             : static const u16 AcousticScene_Def2All[] = { 0, 1, 2, 3, 4, 5};
   16268             : static const u16 AcousticScene_In2All[] = { 4, 5};
   16269             : static const u16 AcousticScene_Out2All[] = { 4, 5};
   16270             : static const u16 AcousticScene_Dyn2All[] = { 4};
   16271             : 
   16272             : static u32 AcousticScene_get_field_count(GF_Node *node, u8 IndexMode)
   16273             : {
   16274             :         switch(IndexMode) {
   16275             :         case GF_SG_FIELD_CODING_IN:
   16276             :                 return 2;
   16277             :         case GF_SG_FIELD_CODING_DEF:
   16278             :                 return 6;
   16279             :         case GF_SG_FIELD_CODING_OUT:
   16280             :                 return 2;
   16281             :         case GF_SG_FIELD_CODING_DYN:
   16282             :                 return 1;
   16283             :         default:
   16284             :                 return 6;
   16285             :         }
   16286             : }
   16287             : 
   16288             : static GF_Err AcousticScene_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16289             : {
   16290           6 :         switch(IndexMode) {
   16291           0 :         case GF_SG_FIELD_CODING_IN:
   16292           0 :                 *allField = AcousticScene_In2All[inField];
   16293             :                 return GF_OK;
   16294           0 :         case GF_SG_FIELD_CODING_DEF:
   16295           0 :                 *allField = AcousticScene_Def2All[inField];
   16296             :                 return GF_OK;
   16297           0 :         case GF_SG_FIELD_CODING_OUT:
   16298           0 :                 *allField = AcousticScene_Out2All[inField];
   16299             :                 return GF_OK;
   16300           0 :         case GF_SG_FIELD_CODING_DYN:
   16301           0 :                 *allField = AcousticScene_Dyn2All[inField];
   16302             :                 return GF_OK;
   16303             :         default:
   16304             :                 return GF_BAD_PARAM;
   16305             :         }
   16306             : }
   16307          12 : static GF_Err AcousticScene_get_field(GF_Node *node, GF_FieldInfo *info)
   16308             : {
   16309          12 :         switch (info->fieldIndex) {
   16310           2 :         case 0:
   16311           2 :                 info->name = "center";
   16312           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16313           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   16314           2 :                 info->far_ptr = & ((M_AcousticScene *) node)->center;
   16315           2 :                 return GF_OK;
   16316           2 :         case 1:
   16317           2 :                 info->name = "Size";
   16318           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16319           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   16320           2 :                 info->far_ptr = & ((M_AcousticScene *) node)->Size;
   16321           2 :                 return GF_OK;
   16322           2 :         case 2:
   16323           2 :                 info->name = "reverbTime";
   16324           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16325           2 :                 info->fieldType = GF_SG_VRML_MFTIME;
   16326           2 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbTime;
   16327           2 :                 return GF_OK;
   16328           2 :         case 3:
   16329           2 :                 info->name = "reverbFreq";
   16330           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   16331           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   16332           2 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbFreq;
   16333           2 :                 return GF_OK;
   16334           2 :         case 4:
   16335           2 :                 info->name = "reverbLevel";
   16336           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16337           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   16338           2 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbLevel;
   16339           2 :                 return GF_OK;
   16340           2 :         case 5:
   16341           2 :                 info->name = "reverbDelay";
   16342           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16343           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   16344           2 :                 info->far_ptr = & ((M_AcousticScene *) node)->reverbDelay;
   16345           2 :                 return GF_OK;
   16346             :         default:
   16347             :                 return GF_BAD_PARAM;
   16348             :         }
   16349             : }
   16350             : 
   16351             : 
   16352           6 : static s32 AcousticScene_get_field_index_by_name(char *name)
   16353             : {
   16354           6 :         if (!strcmp("center", name)) return 0;
   16355           5 :         if (!strcmp("Size", name)) return 1;
   16356           4 :         if (!strcmp("reverbTime", name)) return 2;
   16357           3 :         if (!strcmp("reverbFreq", name)) return 3;
   16358           2 :         if (!strcmp("reverbLevel", name)) return 4;
   16359           1 :         if (!strcmp("reverbDelay", name)) return 5;
   16360           0 :         return -1;
   16361             : }
   16362           6 : static Bool AcousticScene_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   16363             : {
   16364           6 :         switch (FieldIndex) {
   16365           1 :         case 0:
   16366           1 :                 *AType = 0;
   16367           1 :                 *QType = 1;
   16368           1 :                 *b_min = FIX_MIN;
   16369           1 :                 *b_max = FIX_MAX;
   16370             :                 return 1;
   16371           1 :         case 1:
   16372           1 :                 *AType = 0;
   16373           1 :                 *QType = 11;
   16374           1 :                 *b_min = FIX_MIN;
   16375           1 :                 *b_max = FIX_MAX;
   16376             :                 return 1;
   16377           1 :         case 2:
   16378           1 :                 *AType = 0;
   16379           1 :                 *QType = 0;
   16380           1 :                 *b_min = FLT2FIX(0 );
   16381           1 :                 *b_max = FIX_MAX;
   16382             :                 return 1;
   16383           1 :         case 3:
   16384           1 :                 *AType = 0;
   16385           1 :                 *QType = 0;
   16386           1 :                 *b_min = FLT2FIX(0 );
   16387           1 :                 *b_max = FIX_MAX;
   16388             :                 return 1;
   16389           1 :         case 4:
   16390           1 :                 *AType = 7;
   16391           1 :                 *QType = 0;
   16392           1 :                 *b_min = FLT2FIX(0 );
   16393           1 :                 *b_max = FIX_MAX;
   16394             :                 return 1;
   16395           1 :         case 5:
   16396           1 :                 *AType = 0;
   16397           1 :                 *QType = 0;
   16398           1 :                 *b_min = FLT2FIX(0 );
   16399           1 :                 *b_max = FIX_MAX;
   16400             :                 return 1;
   16401             :         default:
   16402             :                 return 0;
   16403             :         }
   16404             : }
   16405             : 
   16406             : 
   16407             : 
   16408           1 : GF_Node *AcousticScene_Create()
   16409             : {
   16410             :         M_AcousticScene *p;
   16411           1 :         GF_SAFEALLOC(p, M_AcousticScene);
   16412           1 :         if(!p) return NULL;
   16413           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AcousticScene);
   16414             : 
   16415             :         /*default field values*/
   16416           1 :         p->center.x = FLT2FIX(0);
   16417           1 :         p->center.y = FLT2FIX(0);
   16418           1 :         p->center.z = FLT2FIX(0);
   16419           1 :         p->Size.x = FLT2FIX(-1);
   16420           1 :         p->Size.y = FLT2FIX(-1);
   16421           1 :         p->Size.z = FLT2FIX(-1);
   16422           1 :         p->reverbTime.vals = (SFTime*)gf_malloc(sizeof(SFTime)*1);
   16423           1 :         p->reverbTime.count = 1;
   16424           1 :         p->reverbTime.vals[0] = 0;
   16425           1 :         p->reverbFreq.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   16426           1 :         p->reverbFreq.count = 1;
   16427           1 :         p->reverbFreq.vals[0] = FLT2FIX(1000);
   16428           1 :         p->reverbLevel = FLT2FIX(0.4);
   16429           1 :         p->reverbDelay = 0.5;
   16430           1 :         return (GF_Node *)p;
   16431             : }
   16432             : 
   16433             : 
   16434             : /*
   16435             :         ApplicationWindow Node deletion
   16436             : */
   16437             : 
   16438           1 : static void ApplicationWindow_Del(GF_Node *node)
   16439             : {
   16440             :         M_ApplicationWindow *p = (M_ApplicationWindow *) node;
   16441           1 :         gf_sg_sfstring_del(p->description);
   16442           1 :         gf_sg_mfstring_del(p->parameter);
   16443           1 :         gf_sg_mfurl_del(p->url);
   16444           1 :         gf_node_free((GF_Node *) p);
   16445           1 : }
   16446             : 
   16447             : static const u16 ApplicationWindow_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   16448             : static const u16 ApplicationWindow_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   16449             : static const u16 ApplicationWindow_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   16450             : static const u16 ApplicationWindow_Dyn2All[] = { 6};
   16451             : 
   16452             : static u32 ApplicationWindow_get_field_count(GF_Node *node, u8 IndexMode)
   16453             : {
   16454           6 :         switch(IndexMode) {
   16455             :         case GF_SG_FIELD_CODING_IN:
   16456             :                 return 7;
   16457             :         case GF_SG_FIELD_CODING_DEF:
   16458             :                 return 7;
   16459             :         case GF_SG_FIELD_CODING_OUT:
   16460             :                 return 7;
   16461           1 :         case GF_SG_FIELD_CODING_DYN:
   16462             :                 return 1;
   16463             :         default:
   16464             :                 return 7;
   16465             :         }
   16466             : }
   16467             : 
   16468             : static GF_Err ApplicationWindow_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16469             : {
   16470           7 :         switch(IndexMode) {
   16471           0 :         case GF_SG_FIELD_CODING_IN:
   16472           0 :                 *allField = ApplicationWindow_In2All[inField];
   16473             :                 return GF_OK;
   16474           0 :         case GF_SG_FIELD_CODING_DEF:
   16475           0 :                 *allField = ApplicationWindow_Def2All[inField];
   16476             :                 return GF_OK;
   16477           0 :         case GF_SG_FIELD_CODING_OUT:
   16478           0 :                 *allField = ApplicationWindow_Out2All[inField];
   16479             :                 return GF_OK;
   16480           0 :         case GF_SG_FIELD_CODING_DYN:
   16481           0 :                 *allField = ApplicationWindow_Dyn2All[inField];
   16482             :                 return GF_OK;
   16483             :         default:
   16484             :                 return GF_BAD_PARAM;
   16485             :         }
   16486             : }
   16487          14 : static GF_Err ApplicationWindow_get_field(GF_Node *node, GF_FieldInfo *info)
   16488             : {
   16489          14 :         switch (info->fieldIndex) {
   16490           2 :         case 0:
   16491           2 :                 info->name = "isActive";
   16492           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16493           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   16494           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->isActive;
   16495           2 :                 return GF_OK;
   16496           2 :         case 1:
   16497           2 :                 info->name = "startTime";
   16498           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16499           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   16500           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->startTime;
   16501           2 :                 return GF_OK;
   16502           2 :         case 2:
   16503           2 :                 info->name = "stopTime";
   16504           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16505           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   16506           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->stopTime;
   16507           2 :                 return GF_OK;
   16508           2 :         case 3:
   16509           2 :                 info->name = "description";
   16510           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16511           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   16512           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->description;
   16513           2 :                 return GF_OK;
   16514           2 :         case 4:
   16515           2 :                 info->name = "parameter";
   16516           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16517           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   16518           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->parameter;
   16519           2 :                 return GF_OK;
   16520           2 :         case 5:
   16521           2 :                 info->name = "url";
   16522           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16523           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   16524           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->url;
   16525           2 :                 return GF_OK;
   16526           2 :         case 6:
   16527           2 :                 info->name = "size";
   16528           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16529           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   16530           2 :                 info->far_ptr = & ((M_ApplicationWindow *) node)->size;
   16531           2 :                 return GF_OK;
   16532             :         default:
   16533             :                 return GF_BAD_PARAM;
   16534             :         }
   16535             : }
   16536             : 
   16537             : 
   16538           7 : static s32 ApplicationWindow_get_field_index_by_name(char *name)
   16539             : {
   16540           7 :         if (!strcmp("isActive", name)) return 0;
   16541           6 :         if (!strcmp("startTime", name)) return 1;
   16542           5 :         if (!strcmp("stopTime", name)) return 2;
   16543           4 :         if (!strcmp("description", name)) return 3;
   16544           3 :         if (!strcmp("parameter", name)) return 4;
   16545           2 :         if (!strcmp("url", name)) return 5;
   16546           1 :         if (!strcmp("size", name)) return 6;
   16547           0 :         return -1;
   16548             : }
   16549             : static Bool ApplicationWindow_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   16550             : {
   16551           7 :         switch (FieldIndex) {
   16552           1 :         case 1:
   16553           1 :                 *AType = 0;
   16554           1 :                 *QType = 0;
   16555           1 :                 *b_min = FIX_MIN;
   16556           1 :                 *b_max = FIX_MAX;
   16557             :                 return 1;
   16558           1 :         case 2:
   16559           1 :                 *AType = 0;
   16560           1 :                 *QType = 0;
   16561           1 :                 *b_min = FIX_MIN;
   16562           1 :                 *b_max = FIX_MAX;
   16563             :                 return 1;
   16564           1 :         case 6:
   16565           1 :                 *AType = 12;
   16566           1 :                 *QType = 12;
   16567           1 :                 *b_min = FIX_MIN;
   16568           1 :                 *b_max = FIX_MAX;
   16569             :                 return 1;
   16570             :         default:
   16571             :                 return 0;
   16572             :         }
   16573             : }
   16574             : 
   16575             : 
   16576             : 
   16577           1 : GF_Node *ApplicationWindow_Create()
   16578             : {
   16579             :         M_ApplicationWindow *p;
   16580           1 :         GF_SAFEALLOC(p, M_ApplicationWindow);
   16581           1 :         if(!p) return NULL;
   16582           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ApplicationWindow);
   16583             : 
   16584             :         /*default field values*/
   16585           1 :         p->startTime = 0;
   16586           1 :         p->stopTime = 0;
   16587           1 :         p->size.x = FLT2FIX(0);
   16588           1 :         p->size.y = FLT2FIX(0);
   16589           1 :         return (GF_Node *)p;
   16590             : }
   16591             : 
   16592             : 
   16593             : /*
   16594             :         BAP Node deletion
   16595             : */
   16596             : 
   16597             : static void BAP_Del(GF_Node *node)
   16598             : {
   16599             :         M_BAP *p = (M_BAP *) node;
   16600           1 :         gf_node_free((GF_Node *) p);
   16601             : }
   16602             : 
   16603             : static const u16 BAP_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295};
   16604             : static const u16 BAP_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295};
   16605             : static const u16 BAP_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295};
   16606             : 
   16607             : static u32 BAP_get_field_count(GF_Node *node, u8 IndexMode)
   16608             : {
   16609           6 :         switch(IndexMode) {
   16610             :         case GF_SG_FIELD_CODING_IN:
   16611             :                 return 296;
   16612             :         case GF_SG_FIELD_CODING_DEF:
   16613             :                 return 296;
   16614             :         case GF_SG_FIELD_CODING_OUT:
   16615             :                 return 296;
   16616           1 :         case GF_SG_FIELD_CODING_DYN:
   16617             :                 return 0;
   16618             :         default:
   16619             :                 return 296;
   16620             :         }
   16621             : }
   16622             : 
   16623             : static GF_Err BAP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   16624             : {
   16625         296 :         switch(IndexMode) {
   16626           0 :         case GF_SG_FIELD_CODING_IN:
   16627           0 :                 *allField = BAP_In2All[inField];
   16628             :                 return GF_OK;
   16629           0 :         case GF_SG_FIELD_CODING_DEF:
   16630           0 :                 *allField = BAP_Def2All[inField];
   16631             :                 return GF_OK;
   16632           0 :         case GF_SG_FIELD_CODING_OUT:
   16633           0 :                 *allField = BAP_Out2All[inField];
   16634             :                 return GF_OK;
   16635             :         default:
   16636             :                 return GF_BAD_PARAM;
   16637             :         }
   16638             : }
   16639         592 : static GF_Err BAP_get_field(GF_Node *node, GF_FieldInfo *info)
   16640             : {
   16641         592 :         switch (info->fieldIndex) {
   16642           2 :         case 0:
   16643           2 :                 info->name = "sacroiliac_tilt";
   16644           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16645           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16646           2 :                 info->far_ptr = & ((M_BAP *) node)->sacroiliac_tilt;
   16647           2 :                 return GF_OK;
   16648           2 :         case 1:
   16649           2 :                 info->name = "sacroiliac_torsion";
   16650           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16651           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16652           2 :                 info->far_ptr = & ((M_BAP *) node)->sacroiliac_torsion;
   16653           2 :                 return GF_OK;
   16654           2 :         case 2:
   16655           2 :                 info->name = "sacroiliac_roll";
   16656           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16657           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16658           2 :                 info->far_ptr = & ((M_BAP *) node)->sacroiliac_roll;
   16659           2 :                 return GF_OK;
   16660           2 :         case 3:
   16661           2 :                 info->name = "l_hip_flexion";
   16662           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16663           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16664           2 :                 info->far_ptr = & ((M_BAP *) node)->l_hip_flexion;
   16665           2 :                 return GF_OK;
   16666           2 :         case 4:
   16667           2 :                 info->name = "r_hip_flexion";
   16668           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16669           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16670           2 :                 info->far_ptr = & ((M_BAP *) node)->r_hip_flexion;
   16671           2 :                 return GF_OK;
   16672           2 :         case 5:
   16673           2 :                 info->name = "l_hip_abduct";
   16674           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16675           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16676           2 :                 info->far_ptr = & ((M_BAP *) node)->l_hip_abduct;
   16677           2 :                 return GF_OK;
   16678           2 :         case 6:
   16679           2 :                 info->name = "r_hip_abduct";
   16680           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16681           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16682           2 :                 info->far_ptr = & ((M_BAP *) node)->r_hip_abduct;
   16683           2 :                 return GF_OK;
   16684           2 :         case 7:
   16685           2 :                 info->name = "l_hip_twisting";
   16686           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16687           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16688           2 :                 info->far_ptr = & ((M_BAP *) node)->l_hip_twisting;
   16689           2 :                 return GF_OK;
   16690           2 :         case 8:
   16691           2 :                 info->name = "r_hip_twisting";
   16692           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16693           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16694           2 :                 info->far_ptr = & ((M_BAP *) node)->r_hip_twisting;
   16695           2 :                 return GF_OK;
   16696           2 :         case 9:
   16697           2 :                 info->name = "l_knee_flexion";
   16698           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16699           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16700           2 :                 info->far_ptr = & ((M_BAP *) node)->l_knee_flexion;
   16701           2 :                 return GF_OK;
   16702           2 :         case 10:
   16703           2 :                 info->name = "r_knee_flexion";
   16704           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16705           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16706           2 :                 info->far_ptr = & ((M_BAP *) node)->r_knee_flexion;
   16707           2 :                 return GF_OK;
   16708           2 :         case 11:
   16709           2 :                 info->name = "l_knee_twisting";
   16710           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16711           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16712           2 :                 info->far_ptr = & ((M_BAP *) node)->l_knee_twisting;
   16713           2 :                 return GF_OK;
   16714           2 :         case 12:
   16715           2 :                 info->name = "r_knee_twisting";
   16716           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16717           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16718           2 :                 info->far_ptr = & ((M_BAP *) node)->r_knee_twisting;
   16719           2 :                 return GF_OK;
   16720           2 :         case 13:
   16721           2 :                 info->name = "l_ankle_flexion";
   16722           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16723           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16724           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ankle_flexion;
   16725           2 :                 return GF_OK;
   16726           2 :         case 14:
   16727           2 :                 info->name = "r_ankle_flexion";
   16728           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16729           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16730           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ankle_flexion;
   16731           2 :                 return GF_OK;
   16732           2 :         case 15:
   16733           2 :                 info->name = "l_ankle_twisting";
   16734           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16735           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16736           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ankle_twisting;
   16737           2 :                 return GF_OK;
   16738           2 :         case 16:
   16739           2 :                 info->name = "r_ankle_twisting";
   16740           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16741           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16742           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ankle_twisting;
   16743           2 :                 return GF_OK;
   16744           2 :         case 17:
   16745           2 :                 info->name = "l_subtalar_flexion";
   16746           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16747           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16748           2 :                 info->far_ptr = & ((M_BAP *) node)->l_subtalar_flexion;
   16749           2 :                 return GF_OK;
   16750           2 :         case 18:
   16751           2 :                 info->name = "r_subtalar_flexion";
   16752           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16753           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16754           2 :                 info->far_ptr = & ((M_BAP *) node)->r_subtalar_flexion;
   16755           2 :                 return GF_OK;
   16756           2 :         case 19:
   16757           2 :                 info->name = "l_midtarsal_flexion";
   16758           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16759           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16760           2 :                 info->far_ptr = & ((M_BAP *) node)->l_midtarsal_flexion;
   16761           2 :                 return GF_OK;
   16762           2 :         case 20:
   16763           2 :                 info->name = "r_midtarsal_flexion";
   16764           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16765           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16766           2 :                 info->far_ptr = & ((M_BAP *) node)->r_midtarsal_flexion;
   16767           2 :                 return GF_OK;
   16768           2 :         case 21:
   16769           2 :                 info->name = "l_metatarsal_flexion";
   16770           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16771           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16772           2 :                 info->far_ptr = & ((M_BAP *) node)->l_metatarsal_flexion;
   16773           2 :                 return GF_OK;
   16774           2 :         case 22:
   16775           2 :                 info->name = "r_metatarsal_flexion";
   16776           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16777           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16778           2 :                 info->far_ptr = & ((M_BAP *) node)->r_metatarsal_flexion;
   16779           2 :                 return GF_OK;
   16780           2 :         case 23:
   16781           2 :                 info->name = "l_sternoclavicular_abduct";
   16782           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16783           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16784           2 :                 info->far_ptr = & ((M_BAP *) node)->l_sternoclavicular_abduct;
   16785           2 :                 return GF_OK;
   16786           2 :         case 24:
   16787           2 :                 info->name = "r_sternoclavicular_abduct";
   16788           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16789           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16790           2 :                 info->far_ptr = & ((M_BAP *) node)->r_sternoclavicular_abduct;
   16791           2 :                 return GF_OK;
   16792           2 :         case 25:
   16793           2 :                 info->name = "l_sternoclavicular_rotate";
   16794           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16795           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16796           2 :                 info->far_ptr = & ((M_BAP *) node)->l_sternoclavicular_rotate;
   16797           2 :                 return GF_OK;
   16798           2 :         case 26:
   16799           2 :                 info->name = "r_sternoclavicular_rotate";
   16800           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16801           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16802           2 :                 info->far_ptr = & ((M_BAP *) node)->r_sternoclavicular_rotate;
   16803           2 :                 return GF_OK;
   16804           2 :         case 27:
   16805           2 :                 info->name = "l_acromioclavicular_abduct";
   16806           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16807           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16808           2 :                 info->far_ptr = & ((M_BAP *) node)->l_acromioclavicular_abduct;
   16809           2 :                 return GF_OK;
   16810           2 :         case 28:
   16811           2 :                 info->name = "r_acromioclavicular_abduct";
   16812           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16813           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16814           2 :                 info->far_ptr = & ((M_BAP *) node)->r_acromioclavicular_abduct;
   16815           2 :                 return GF_OK;
   16816           2 :         case 29:
   16817           2 :                 info->name = "l_acromioclavicular_rotate";
   16818           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16819           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16820           2 :                 info->far_ptr = & ((M_BAP *) node)->l_acromioclavicular_rotate;
   16821           2 :                 return GF_OK;
   16822           2 :         case 30:
   16823           2 :                 info->name = "r_acromioclavicular_rotate";
   16824           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16825           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16826           2 :                 info->far_ptr = & ((M_BAP *) node)->r_acromioclavicular_rotate;
   16827           2 :                 return GF_OK;
   16828           2 :         case 31:
   16829           2 :                 info->name = "l_shoulder_flexion";
   16830           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16831           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16832           2 :                 info->far_ptr = & ((M_BAP *) node)->l_shoulder_flexion;
   16833           2 :                 return GF_OK;
   16834           2 :         case 32:
   16835           2 :                 info->name = "r_shoulder_flexion";
   16836           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16837           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16838           2 :                 info->far_ptr = & ((M_BAP *) node)->r_shoulder_flexion;
   16839           2 :                 return GF_OK;
   16840           2 :         case 33:
   16841           2 :                 info->name = "l_shoulder_abduct";
   16842           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16843           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16844           2 :                 info->far_ptr = & ((M_BAP *) node)->l_shoulder_abduct;
   16845           2 :                 return GF_OK;
   16846           2 :         case 34:
   16847           2 :                 info->name = "r_shoulder_abduct";
   16848           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16849           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16850           2 :                 info->far_ptr = & ((M_BAP *) node)->r_shoulder_abduct;
   16851           2 :                 return GF_OK;
   16852           2 :         case 35:
   16853           2 :                 info->name = "l_shoulder_twisting";
   16854           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16855           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16856           2 :                 info->far_ptr = & ((M_BAP *) node)->l_shoulder_twisting;
   16857           2 :                 return GF_OK;
   16858           2 :         case 36:
   16859           2 :                 info->name = "r_shoulder_twisting";
   16860           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16861           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16862           2 :                 info->far_ptr = & ((M_BAP *) node)->r_shoulder_twisting;
   16863           2 :                 return GF_OK;
   16864           2 :         case 37:
   16865           2 :                 info->name = "l_elbow_flexion";
   16866           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16867           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16868           2 :                 info->far_ptr = & ((M_BAP *) node)->l_elbow_flexion;
   16869           2 :                 return GF_OK;
   16870           2 :         case 38:
   16871           2 :                 info->name = "r_elbow_flexion";
   16872           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16873           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16874           2 :                 info->far_ptr = & ((M_BAP *) node)->r_elbow_flexion;
   16875           2 :                 return GF_OK;
   16876           2 :         case 39:
   16877           2 :                 info->name = "l_elbow_twisting";
   16878           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16879           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16880           2 :                 info->far_ptr = & ((M_BAP *) node)->l_elbow_twisting;
   16881           2 :                 return GF_OK;
   16882           2 :         case 40:
   16883           2 :                 info->name = "r_elbow_twisting";
   16884           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16885           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16886           2 :                 info->far_ptr = & ((M_BAP *) node)->r_elbow_twisting;
   16887           2 :                 return GF_OK;
   16888           2 :         case 41:
   16889           2 :                 info->name = "l_wrist_flexion";
   16890           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16891           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16892           2 :                 info->far_ptr = & ((M_BAP *) node)->l_wrist_flexion;
   16893           2 :                 return GF_OK;
   16894           2 :         case 42:
   16895           2 :                 info->name = "r_wrist_flexion";
   16896           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16897           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16898           2 :                 info->far_ptr = & ((M_BAP *) node)->r_wrist_flexion;
   16899           2 :                 return GF_OK;
   16900           2 :         case 43:
   16901           2 :                 info->name = "l_wrist_pivot";
   16902           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16903           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16904           2 :                 info->far_ptr = & ((M_BAP *) node)->l_wrist_pivot;
   16905           2 :                 return GF_OK;
   16906           2 :         case 44:
   16907           2 :                 info->name = "r_wrist_pivot";
   16908           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16909           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16910           2 :                 info->far_ptr = & ((M_BAP *) node)->r_wrist_pivot;
   16911           2 :                 return GF_OK;
   16912           2 :         case 45:
   16913           2 :                 info->name = "l_wrist_twisting";
   16914           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16915           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16916           2 :                 info->far_ptr = & ((M_BAP *) node)->l_wrist_twisting;
   16917           2 :                 return GF_OK;
   16918           2 :         case 46:
   16919           2 :                 info->name = "r_wrist_twisting";
   16920           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16921           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16922           2 :                 info->far_ptr = & ((M_BAP *) node)->r_wrist_twisting;
   16923           2 :                 return GF_OK;
   16924           2 :         case 47:
   16925           2 :                 info->name = "skullbase_roll";
   16926           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16927           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16928           2 :                 info->far_ptr = & ((M_BAP *) node)->skullbase_roll;
   16929           2 :                 return GF_OK;
   16930           2 :         case 48:
   16931           2 :                 info->name = "skullbase_torsion";
   16932           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16933           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16934           2 :                 info->far_ptr = & ((M_BAP *) node)->skullbase_torsion;
   16935           2 :                 return GF_OK;
   16936           2 :         case 49:
   16937           2 :                 info->name = "skullbase_tilt";
   16938           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16939           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16940           2 :                 info->far_ptr = & ((M_BAP *) node)->skullbase_tilt;
   16941           2 :                 return GF_OK;
   16942           2 :         case 50:
   16943           2 :                 info->name = "vc1roll";
   16944           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16945           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16946           2 :                 info->far_ptr = & ((M_BAP *) node)->vc1roll;
   16947           2 :                 return GF_OK;
   16948           2 :         case 51:
   16949           2 :                 info->name = "vc1torsion";
   16950           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16951           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16952           2 :                 info->far_ptr = & ((M_BAP *) node)->vc1torsion;
   16953           2 :                 return GF_OK;
   16954           2 :         case 52:
   16955           2 :                 info->name = "vc1tilt";
   16956           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16957           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16958           2 :                 info->far_ptr = & ((M_BAP *) node)->vc1tilt;
   16959           2 :                 return GF_OK;
   16960           2 :         case 53:
   16961           2 :                 info->name = "vc2roll";
   16962           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16963           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16964           2 :                 info->far_ptr = & ((M_BAP *) node)->vc2roll;
   16965           2 :                 return GF_OK;
   16966           2 :         case 54:
   16967           2 :                 info->name = "vc2torsion";
   16968           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16969           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16970           2 :                 info->far_ptr = & ((M_BAP *) node)->vc2torsion;
   16971           2 :                 return GF_OK;
   16972           2 :         case 55:
   16973           2 :                 info->name = "vc2tilt";
   16974           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16975           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16976           2 :                 info->far_ptr = & ((M_BAP *) node)->vc2tilt;
   16977           2 :                 return GF_OK;
   16978           2 :         case 56:
   16979           2 :                 info->name = "vc3roll";
   16980           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16981           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16982           2 :                 info->far_ptr = & ((M_BAP *) node)->vc3roll;
   16983           2 :                 return GF_OK;
   16984           2 :         case 57:
   16985           2 :                 info->name = "vc3torsion";
   16986           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16987           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16988           2 :                 info->far_ptr = & ((M_BAP *) node)->vc3torsion;
   16989           2 :                 return GF_OK;
   16990           2 :         case 58:
   16991           2 :                 info->name = "vc3tilt";
   16992           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16993           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   16994           2 :                 info->far_ptr = & ((M_BAP *) node)->vc3tilt;
   16995           2 :                 return GF_OK;
   16996           2 :         case 59:
   16997           2 :                 info->name = "vc4roll";
   16998           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   16999           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17000           2 :                 info->far_ptr = & ((M_BAP *) node)->vc4roll;
   17001           2 :                 return GF_OK;
   17002           2 :         case 60:
   17003           2 :                 info->name = "vc4torsion";
   17004           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17005           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17006           2 :                 info->far_ptr = & ((M_BAP *) node)->vc4torsion;
   17007           2 :                 return GF_OK;
   17008           2 :         case 61:
   17009           2 :                 info->name = "vc4tilt";
   17010           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17011           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17012           2 :                 info->far_ptr = & ((M_BAP *) node)->vc4tilt;
   17013           2 :                 return GF_OK;
   17014           2 :         case 62:
   17015           2 :                 info->name = "vc5roll";
   17016           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17017           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17018           2 :                 info->far_ptr = & ((M_BAP *) node)->vc5roll;
   17019           2 :                 return GF_OK;
   17020           2 :         case 63:
   17021           2 :                 info->name = "vc5torsion";
   17022           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17023           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17024           2 :                 info->far_ptr = & ((M_BAP *) node)->vc5torsion;
   17025           2 :                 return GF_OK;
   17026           2 :         case 64:
   17027           2 :                 info->name = "vc5tilt";
   17028           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17029           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17030           2 :                 info->far_ptr = & ((M_BAP *) node)->vc5tilt;
   17031           2 :                 return GF_OK;
   17032           2 :         case 65:
   17033           2 :                 info->name = "vc6roll";
   17034           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17035           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17036           2 :                 info->far_ptr = & ((M_BAP *) node)->vc6roll;
   17037           2 :                 return GF_OK;
   17038           2 :         case 66:
   17039           2 :                 info->name = "vc6torsion";
   17040           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17041           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17042           2 :                 info->far_ptr = & ((M_BAP *) node)->vc6torsion;
   17043           2 :                 return GF_OK;
   17044           2 :         case 67:
   17045           2 :                 info->name = "vc6tilt";
   17046           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17047           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17048           2 :                 info->far_ptr = & ((M_BAP *) node)->vc6tilt;
   17049           2 :                 return GF_OK;
   17050           2 :         case 68:
   17051           2 :                 info->name = "vc7roll";
   17052           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17053           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17054           2 :                 info->far_ptr = & ((M_BAP *) node)->vc7roll;
   17055           2 :                 return GF_OK;
   17056           2 :         case 69:
   17057           2 :                 info->name = "vc7torsion";
   17058           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17059           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17060           2 :                 info->far_ptr = & ((M_BAP *) node)->vc7torsion;
   17061           2 :                 return GF_OK;
   17062           2 :         case 70:
   17063           2 :                 info->name = "vc7tilt";
   17064           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17065           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17066           2 :                 info->far_ptr = & ((M_BAP *) node)->vc7tilt;
   17067           2 :                 return GF_OK;
   17068           2 :         case 71:
   17069           2 :                 info->name = "vt1roll";
   17070           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17071           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17072           2 :                 info->far_ptr = & ((M_BAP *) node)->vt1roll;
   17073           2 :                 return GF_OK;
   17074           2 :         case 72:
   17075           2 :                 info->name = "vt1torsion";
   17076           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17077           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17078           2 :                 info->far_ptr = & ((M_BAP *) node)->vt1torsion;
   17079           2 :                 return GF_OK;
   17080           2 :         case 73:
   17081           2 :                 info->name = "vt1tilt";
   17082           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17083           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17084           2 :                 info->far_ptr = & ((M_BAP *) node)->vt1tilt;
   17085           2 :                 return GF_OK;
   17086           2 :         case 74:
   17087           2 :                 info->name = "vt2roll";
   17088           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17089           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17090           2 :                 info->far_ptr = & ((M_BAP *) node)->vt2roll;
   17091           2 :                 return GF_OK;
   17092           2 :         case 75:
   17093           2 :                 info->name = "vt2torsion";
   17094           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17095           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17096           2 :                 info->far_ptr = & ((M_BAP *) node)->vt2torsion;
   17097           2 :                 return GF_OK;
   17098           2 :         case 76:
   17099           2 :                 info->name = "vt2tilt";
   17100           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17101           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17102           2 :                 info->far_ptr = & ((M_BAP *) node)->vt2tilt;
   17103           2 :                 return GF_OK;
   17104           2 :         case 77:
   17105           2 :                 info->name = "vt3roll";
   17106           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17107           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17108           2 :                 info->far_ptr = & ((M_BAP *) node)->vt3roll;
   17109           2 :                 return GF_OK;
   17110           2 :         case 78:
   17111           2 :                 info->name = "vt3torsion";
   17112           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17113           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17114           2 :                 info->far_ptr = & ((M_BAP *) node)->vt3torsion;
   17115           2 :                 return GF_OK;
   17116           2 :         case 79:
   17117           2 :                 info->name = "vt3tilt";
   17118           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17119           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17120           2 :                 info->far_ptr = & ((M_BAP *) node)->vt3tilt;
   17121           2 :                 return GF_OK;
   17122           2 :         case 80:
   17123           2 :                 info->name = "vt4roll";
   17124           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17125           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17126           2 :                 info->far_ptr = & ((M_BAP *) node)->vt4roll;
   17127           2 :                 return GF_OK;
   17128           2 :         case 81:
   17129           2 :                 info->name = "vt4torsion";
   17130           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17131           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17132           2 :                 info->far_ptr = & ((M_BAP *) node)->vt4torsion;
   17133           2 :                 return GF_OK;
   17134           2 :         case 82:
   17135           2 :                 info->name = "vt4tilt";
   17136           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17137           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17138           2 :                 info->far_ptr = & ((M_BAP *) node)->vt4tilt;
   17139           2 :                 return GF_OK;
   17140           2 :         case 83:
   17141           2 :                 info->name = "vt5roll";
   17142           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17143           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17144           2 :                 info->far_ptr = & ((M_BAP *) node)->vt5roll;
   17145           2 :                 return GF_OK;
   17146           2 :         case 84:
   17147           2 :                 info->name = "vt5torsion";
   17148           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17149           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17150           2 :                 info->far_ptr = & ((M_BAP *) node)->vt5torsion;
   17151           2 :                 return GF_OK;
   17152           2 :         case 85:
   17153           2 :                 info->name = "vt5tilt";
   17154           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17155           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17156           2 :                 info->far_ptr = & ((M_BAP *) node)->vt5tilt;
   17157           2 :                 return GF_OK;
   17158           2 :         case 86:
   17159           2 :                 info->name = "vt6roll";
   17160           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17161           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17162           2 :                 info->far_ptr = & ((M_BAP *) node)->vt6roll;
   17163           2 :                 return GF_OK;
   17164           2 :         case 87:
   17165           2 :                 info->name = "vt6torsion";
   17166           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17167           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17168           2 :                 info->far_ptr = & ((M_BAP *) node)->vt6torsion;
   17169           2 :                 return GF_OK;
   17170           2 :         case 88:
   17171           2 :                 info->name = "vt6tilt";
   17172           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17173           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17174           2 :                 info->far_ptr = & ((M_BAP *) node)->vt6tilt;
   17175           2 :                 return GF_OK;
   17176           2 :         case 89:
   17177           2 :                 info->name = "vt7roll";
   17178           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17179           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17180           2 :                 info->far_ptr = & ((M_BAP *) node)->vt7roll;
   17181           2 :                 return GF_OK;
   17182           2 :         case 90:
   17183           2 :                 info->name = "vt7torsion";
   17184           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17185           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17186           2 :                 info->far_ptr = & ((M_BAP *) node)->vt7torsion;
   17187           2 :                 return GF_OK;
   17188           2 :         case 91:
   17189           2 :                 info->name = "vt7tilt";
   17190           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17191           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17192           2 :                 info->far_ptr = & ((M_BAP *) node)->vt7tilt;
   17193           2 :                 return GF_OK;
   17194           2 :         case 92:
   17195           2 :                 info->name = "vt8roll";
   17196           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17197           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17198           2 :                 info->far_ptr = & ((M_BAP *) node)->vt8roll;
   17199           2 :                 return GF_OK;
   17200           2 :         case 93:
   17201           2 :                 info->name = "vt8torsion";
   17202           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17203           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17204           2 :                 info->far_ptr = & ((M_BAP *) node)->vt8torsion;
   17205           2 :                 return GF_OK;
   17206           2 :         case 94:
   17207           2 :                 info->name = "vt8tilt";
   17208           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17209           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17210           2 :                 info->far_ptr = & ((M_BAP *) node)->vt8tilt;
   17211           2 :                 return GF_OK;
   17212           2 :         case 95:
   17213           2 :                 info->name = "vt9roll";
   17214           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17215           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17216           2 :                 info->far_ptr = & ((M_BAP *) node)->vt9roll;
   17217           2 :                 return GF_OK;
   17218           2 :         case 96:
   17219           2 :                 info->name = "vt9torsion";
   17220           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17221           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17222           2 :                 info->far_ptr = & ((M_BAP *) node)->vt9torsion;
   17223           2 :                 return GF_OK;
   17224           2 :         case 97:
   17225           2 :                 info->name = "vt9tilt";
   17226           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17227           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17228           2 :                 info->far_ptr = & ((M_BAP *) node)->vt9tilt;
   17229           2 :                 return GF_OK;
   17230           2 :         case 98:
   17231           2 :                 info->name = "vt10roll";
   17232           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17233           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17234           2 :                 info->far_ptr = & ((M_BAP *) node)->vt10roll;
   17235           2 :                 return GF_OK;
   17236           2 :         case 99:
   17237           2 :                 info->name = "vt10torsion";
   17238           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17239           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17240           2 :                 info->far_ptr = & ((M_BAP *) node)->vt10torsion;
   17241           2 :                 return GF_OK;
   17242           2 :         case 100:
   17243           2 :                 info->name = "vt10tilt";
   17244           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17245           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17246           2 :                 info->far_ptr = & ((M_BAP *) node)->vt10tilt;
   17247           2 :                 return GF_OK;
   17248           2 :         case 101:
   17249           2 :                 info->name = "vt11roll";
   17250           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17251           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17252           2 :                 info->far_ptr = & ((M_BAP *) node)->vt11roll;
   17253           2 :                 return GF_OK;
   17254           2 :         case 102:
   17255           2 :                 info->name = "vt11torsion";
   17256           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17257           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17258           2 :                 info->far_ptr = & ((M_BAP *) node)->vt11torsion;
   17259           2 :                 return GF_OK;
   17260           2 :         case 103:
   17261           2 :                 info->name = "vt11tilt";
   17262           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17263           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17264           2 :                 info->far_ptr = & ((M_BAP *) node)->vt11tilt;
   17265           2 :                 return GF_OK;
   17266           2 :         case 104:
   17267           2 :                 info->name = "vt12roll";
   17268           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17269           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17270           2 :                 info->far_ptr = & ((M_BAP *) node)->vt12roll;
   17271           2 :                 return GF_OK;
   17272           2 :         case 105:
   17273           2 :                 info->name = "vt12torsion";
   17274           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17275           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17276           2 :                 info->far_ptr = & ((M_BAP *) node)->vt12torsion;
   17277           2 :                 return GF_OK;
   17278           2 :         case 106:
   17279           2 :                 info->name = "vt12tilt";
   17280           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17281           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17282           2 :                 info->far_ptr = & ((M_BAP *) node)->vt12tilt;
   17283           2 :                 return GF_OK;
   17284           2 :         case 107:
   17285           2 :                 info->name = "vl1roll";
   17286           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17287           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17288           2 :                 info->far_ptr = & ((M_BAP *) node)->vl1roll;
   17289           2 :                 return GF_OK;
   17290           2 :         case 108:
   17291           2 :                 info->name = "vl1torsion";
   17292           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17293           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17294           2 :                 info->far_ptr = & ((M_BAP *) node)->vl1torsion;
   17295           2 :                 return GF_OK;
   17296           2 :         case 109:
   17297           2 :                 info->name = "vl1tilt";
   17298           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17299           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17300           2 :                 info->far_ptr = & ((M_BAP *) node)->vl1tilt;
   17301           2 :                 return GF_OK;
   17302           2 :         case 110:
   17303           2 :                 info->name = "vl2roll";
   17304           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17305           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17306           2 :                 info->far_ptr = & ((M_BAP *) node)->vl2roll;
   17307           2 :                 return GF_OK;
   17308           2 :         case 111:
   17309           2 :                 info->name = "vl2torsion";
   17310           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17311           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17312           2 :                 info->far_ptr = & ((M_BAP *) node)->vl2torsion;
   17313           2 :                 return GF_OK;
   17314           2 :         case 112:
   17315           2 :                 info->name = "vl2tilt";
   17316           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17317           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17318           2 :                 info->far_ptr = & ((M_BAP *) node)->vl2tilt;
   17319           2 :                 return GF_OK;
   17320           2 :         case 113:
   17321           2 :                 info->name = "vl3roll";
   17322           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17323           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17324           2 :                 info->far_ptr = & ((M_BAP *) node)->vl3roll;
   17325           2 :                 return GF_OK;
   17326           2 :         case 114:
   17327           2 :                 info->name = "vl3torsion";
   17328           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17329           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17330           2 :                 info->far_ptr = & ((M_BAP *) node)->vl3torsion;
   17331           2 :                 return GF_OK;
   17332           2 :         case 115:
   17333           2 :                 info->name = "vl3tilt";
   17334           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17335           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17336           2 :                 info->far_ptr = & ((M_BAP *) node)->vl3tilt;
   17337           2 :                 return GF_OK;
   17338           2 :         case 116:
   17339           2 :                 info->name = "vl4roll";
   17340           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17341           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17342           2 :                 info->far_ptr = & ((M_BAP *) node)->vl4roll;
   17343           2 :                 return GF_OK;
   17344           2 :         case 117:
   17345           2 :                 info->name = "vl4torsion";
   17346           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17347           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17348           2 :                 info->far_ptr = & ((M_BAP *) node)->vl4torsion;
   17349           2 :                 return GF_OK;
   17350           2 :         case 118:
   17351           2 :                 info->name = "vl4tilt";
   17352           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17353           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17354           2 :                 info->far_ptr = & ((M_BAP *) node)->vl4tilt;
   17355           2 :                 return GF_OK;
   17356           2 :         case 119:
   17357           2 :                 info->name = "vl5roll";
   17358           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17359           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17360           2 :                 info->far_ptr = & ((M_BAP *) node)->vl5roll;
   17361           2 :                 return GF_OK;
   17362           2 :         case 120:
   17363           2 :                 info->name = "vl5torsion";
   17364           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17365           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17366           2 :                 info->far_ptr = & ((M_BAP *) node)->vl5torsion;
   17367           2 :                 return GF_OK;
   17368           2 :         case 121:
   17369           2 :                 info->name = "vl5tilt";
   17370           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17371           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17372           2 :                 info->far_ptr = & ((M_BAP *) node)->vl5tilt;
   17373           2 :                 return GF_OK;
   17374           2 :         case 122:
   17375           2 :                 info->name = "l_pinky0_flexion";
   17376           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17377           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17378           2 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky0_flexion;
   17379           2 :                 return GF_OK;
   17380           2 :         case 123:
   17381           2 :                 info->name = "r_pinky0_flexion";
   17382           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17383           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17384           2 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky0_flexion;
   17385           2 :                 return GF_OK;
   17386           2 :         case 124:
   17387           2 :                 info->name = "l_pinky1_flexion";
   17388           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17389           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17390           2 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky1_flexion;
   17391           2 :                 return GF_OK;
   17392           2 :         case 125:
   17393           2 :                 info->name = "r_pinky1_flexion";
   17394           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17395           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17396           2 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky1_flexion;
   17397           2 :                 return GF_OK;
   17398           2 :         case 126:
   17399           2 :                 info->name = "l_pinky1_pivot";
   17400           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17401           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17402           2 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky1_pivot;
   17403           2 :                 return GF_OK;
   17404           2 :         case 127:
   17405           2 :                 info->name = "r_pinky1_pivot";
   17406           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17407           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17408           2 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky1_pivot;
   17409           2 :                 return GF_OK;
   17410           2 :         case 128:
   17411           2 :                 info->name = "l_pinky1_twisting";
   17412           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17413           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17414           2 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky1_twisting;
   17415           2 :                 return GF_OK;
   17416           2 :         case 129:
   17417           2 :                 info->name = "r_pinky1_twisting";
   17418           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17419           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17420           2 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky1_twisting;
   17421           2 :                 return GF_OK;
   17422           2 :         case 130:
   17423           2 :                 info->name = "l_pinky2_flexion";
   17424           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17425           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17426           2 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky2_flexion;
   17427           2 :                 return GF_OK;
   17428           2 :         case 131:
   17429           2 :                 info->name = "r_pinky2_flexion";
   17430           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17431           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17432           2 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky2_flexion;
   17433           2 :                 return GF_OK;
   17434           2 :         case 132:
   17435           2 :                 info->name = "l_pinky3_flexion";
   17436           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17437           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17438           2 :                 info->far_ptr = & ((M_BAP *) node)->l_pinky3_flexion;
   17439           2 :                 return GF_OK;
   17440           2 :         case 133:
   17441           2 :                 info->name = "r_pinky3_flexion";
   17442           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17443           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17444           2 :                 info->far_ptr = & ((M_BAP *) node)->r_pinky3_flexion;
   17445           2 :                 return GF_OK;
   17446           2 :         case 134:
   17447           2 :                 info->name = "l_ring0_flexion";
   17448           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17449           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17450           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ring0_flexion;
   17451           2 :                 return GF_OK;
   17452           2 :         case 135:
   17453           2 :                 info->name = "r_ring0_flexion";
   17454           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17455           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17456           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ring0_flexion;
   17457           2 :                 return GF_OK;
   17458           2 :         case 136:
   17459           2 :                 info->name = "l_ring1_flexion";
   17460           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17461           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17462           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ring1_flexion;
   17463           2 :                 return GF_OK;
   17464           2 :         case 137:
   17465           2 :                 info->name = "r_ring1_flexion";
   17466           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17467           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17468           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ring1_flexion;
   17469           2 :                 return GF_OK;
   17470           2 :         case 138:
   17471           2 :                 info->name = "l_ring1_pivot";
   17472           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17473           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17474           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ring1_pivot;
   17475           2 :                 return GF_OK;
   17476           2 :         case 139:
   17477           2 :                 info->name = "r_ring1_pivot";
   17478           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17479           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17480           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ring1_pivot;
   17481           2 :                 return GF_OK;
   17482           2 :         case 140:
   17483           2 :                 info->name = "l_ring1_twisting";
   17484           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17485           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17486           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ring1_twisting;
   17487           2 :                 return GF_OK;
   17488           2 :         case 141:
   17489           2 :                 info->name = "r_ring1_twisting";
   17490           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17491           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17492           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ring1_twisting;
   17493           2 :                 return GF_OK;
   17494           2 :         case 142:
   17495           2 :                 info->name = "l_ring2_flexion";
   17496           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17497           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17498           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ring2_flexion;
   17499           2 :                 return GF_OK;
   17500           2 :         case 143:
   17501           2 :                 info->name = "r_ring2_flexion";
   17502           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17503           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17504           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ring2_flexion;
   17505           2 :                 return GF_OK;
   17506           2 :         case 144:
   17507           2 :                 info->name = "l_ring3_flexion";
   17508           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17509           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17510           2 :                 info->far_ptr = & ((M_BAP *) node)->l_ring3_flexion;
   17511           2 :                 return GF_OK;
   17512           2 :         case 145:
   17513           2 :                 info->name = "r_ring3_flexion";
   17514           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17515           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17516           2 :                 info->far_ptr = & ((M_BAP *) node)->r_ring3_flexion;
   17517           2 :                 return GF_OK;
   17518           2 :         case 146:
   17519           2 :                 info->name = "l_middle0_flexion";
   17520           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17521           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17522           2 :                 info->far_ptr = & ((M_BAP *) node)->l_middle0_flexion;
   17523           2 :                 return GF_OK;
   17524           2 :         case 147:
   17525           2 :                 info->name = "r_middle0_flexion";
   17526           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17527           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17528           2 :                 info->far_ptr = & ((M_BAP *) node)->r_middle0_flexion;
   17529           2 :                 return GF_OK;
   17530           2 :         case 148:
   17531           2 :                 info->name = "l_middle1_flexion";
   17532           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17533           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17534           2 :                 info->far_ptr = & ((M_BAP *) node)->l_middle1_flexion;
   17535           2 :                 return GF_OK;
   17536           2 :         case 149:
   17537           2 :                 info->name = "r_middle1_flexion";
   17538           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17539           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17540           2 :                 info->far_ptr = & ((M_BAP *) node)->r_middle1_flexion;
   17541           2 :                 return GF_OK;
   17542           2 :         case 150:
   17543           2 :                 info->name = "l_middle1_pivot";
   17544           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17545           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17546           2 :                 info->far_ptr = & ((M_BAP *) node)->l_middle1_pivot;
   17547           2 :                 return GF_OK;
   17548           2 :         case 151:
   17549           2 :                 info->name = "r_middle1_pivot";
   17550           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17551           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17552           2 :                 info->far_ptr = & ((M_BAP *) node)->r_middle1_pivot;
   17553           2 :                 return GF_OK;
   17554           2 :         case 152:
   17555           2 :                 info->name = "l_middle1_twisting";
   17556           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17557           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17558           2 :                 info->far_ptr = & ((M_BAP *) node)->l_middle1_twisting;
   17559           2 :                 return GF_OK;
   17560           2 :         case 153:
   17561           2 :                 info->name = "r_middle1_twisting";
   17562           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17563           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17564           2 :                 info->far_ptr = & ((M_BAP *) node)->r_middle1_twisting;
   17565           2 :                 return GF_OK;
   17566           2 :         case 154:
   17567           2 :                 info->name = "l_middle2_flexion";
   17568           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17569           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17570           2 :                 info->far_ptr = & ((M_BAP *) node)->l_middle2_flexion;
   17571           2 :                 return GF_OK;
   17572           2 :         case 155:
   17573           2 :                 info->name = "r_middle2_flexion";
   17574           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17575           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17576           2 :                 info->far_ptr = & ((M_BAP *) node)->r_middle2_flexion;
   17577           2 :                 return GF_OK;
   17578           2 :         case 156:
   17579           2 :                 info->name = "l_middle3_flexion";
   17580           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17581           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17582           2 :                 info->far_ptr = & ((M_BAP *) node)->l_middle3_flexion;
   17583           2 :                 return GF_OK;
   17584           2 :         case 157:
   17585           2 :                 info->name = "r_middle3_flexion";
   17586           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17587           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17588           2 :                 info->far_ptr = & ((M_BAP *) node)->r_middle3_flexion;
   17589           2 :                 return GF_OK;
   17590           2 :         case 158:
   17591           2 :                 info->name = "l_index0_flexion";
   17592           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17593           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17594           2 :                 info->far_ptr = & ((M_BAP *) node)->l_index0_flexion;
   17595           2 :                 return GF_OK;
   17596           2 :         case 159:
   17597           2 :                 info->name = "r_index0_flexion";
   17598           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17599           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17600           2 :                 info->far_ptr = & ((M_BAP *) node)->r_index0_flexion;
   17601           2 :                 return GF_OK;
   17602           2 :         case 160:
   17603           2 :                 info->name = "l_index1_flexion";
   17604           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17605           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17606           2 :                 info->far_ptr = & ((M_BAP *) node)->l_index1_flexion;
   17607           2 :                 return GF_OK;
   17608           2 :         case 161:
   17609           2 :                 info->name = "r_index1_flexion";
   17610           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17611           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17612           2 :                 info->far_ptr = & ((M_BAP *) node)->r_index1_flexion;
   17613           2 :                 return GF_OK;
   17614           2 :         case 162:
   17615           2 :                 info->name = "l_index1_pivot";
   17616           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17617           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17618           2 :                 info->far_ptr = & ((M_BAP *) node)->l_index1_pivot;
   17619           2 :                 return GF_OK;
   17620           2 :         case 163:
   17621           2 :                 info->name = "r_index1_pivot";
   17622           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17623           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17624           2 :                 info->far_ptr = & ((M_BAP *) node)->r_index1_pivot;
   17625           2 :                 return GF_OK;
   17626           2 :         case 164:
   17627           2 :                 info->name = "l_index1_twisting";
   17628           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17629           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17630           2 :                 info->far_ptr = & ((M_BAP *) node)->l_index1_twisting;
   17631           2 :                 return GF_OK;
   17632           2 :         case 165:
   17633           2 :                 info->name = "r_index1_twisting";
   17634           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17635           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17636           2 :                 info->far_ptr = & ((M_BAP *) node)->r_index1_twisting;
   17637           2 :                 return GF_OK;
   17638           2 :         case 166:
   17639           2 :                 info->name = "l_index2_flexion";
   17640           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17641           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17642           2 :                 info->far_ptr = & ((M_BAP *) node)->l_index2_flexion;
   17643           2 :                 return GF_OK;
   17644           2 :         case 167:
   17645           2 :                 info->name = "r_index2_flexion";
   17646           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17647           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17648           2 :                 info->far_ptr = & ((M_BAP *) node)->r_index2_flexion;
   17649           2 :                 return GF_OK;
   17650           2 :         case 168:
   17651           2 :                 info->name = "l_index3_flexion";
   17652           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17653           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17654           2 :                 info->far_ptr = & ((M_BAP *) node)->l_index3_flexion;
   17655           2 :                 return GF_OK;
   17656           2 :         case 169:
   17657           2 :                 info->name = "r_index3_flexion";
   17658           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17659           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17660           2 :                 info->far_ptr = & ((M_BAP *) node)->r_index3_flexion;
   17661           2 :                 return GF_OK;
   17662           2 :         case 170:
   17663           2 :                 info->name = "l_thumb1_flexion";
   17664           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17665           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17666           2 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb1_flexion;
   17667           2 :                 return GF_OK;
   17668           2 :         case 171:
   17669           2 :                 info->name = "r_thumb1_flexion";
   17670           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17671           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17672           2 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb1_flexion;
   17673           2 :                 return GF_OK;
   17674           2 :         case 172:
   17675           2 :                 info->name = "l_thumb1_pivot";
   17676           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17677           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17678           2 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb1_pivot;
   17679           2 :                 return GF_OK;
   17680           2 :         case 173:
   17681           2 :                 info->name = "r_thumb1_pivot";
   17682           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17683           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17684           2 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb1_pivot;
   17685           2 :                 return GF_OK;
   17686           2 :         case 174:
   17687           2 :                 info->name = "l_thumb1_twisting";
   17688           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17689           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17690           2 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb1_twisting;
   17691           2 :                 return GF_OK;
   17692           2 :         case 175:
   17693           2 :                 info->name = "r_thumb1_twisting";
   17694           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17695           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17696           2 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb1_twisting;
   17697           2 :                 return GF_OK;
   17698           2 :         case 176:
   17699           2 :                 info->name = "l_thumb2_flexion";
   17700           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17701           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17702           2 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb2_flexion;
   17703           2 :                 return GF_OK;
   17704           2 :         case 177:
   17705           2 :                 info->name = "r_thumb2_flexion";
   17706           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17707           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17708           2 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb2_flexion;
   17709           2 :                 return GF_OK;
   17710           2 :         case 178:
   17711           2 :                 info->name = "l_thumb3_flexion";
   17712           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17713           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17714           2 :                 info->far_ptr = & ((M_BAP *) node)->l_thumb3_flexion;
   17715           2 :                 return GF_OK;
   17716           2 :         case 179:
   17717           2 :                 info->name = "r_thumb3_flexion";
   17718           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17719           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17720           2 :                 info->far_ptr = & ((M_BAP *) node)->r_thumb3_flexion;
   17721           2 :                 return GF_OK;
   17722           2 :         case 180:
   17723           2 :                 info->name = "HumanoidRoot_tr_vertical";
   17724           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17725           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17726           2 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_tr_vertical;
   17727           2 :                 return GF_OK;
   17728           2 :         case 181:
   17729           2 :                 info->name = "HumanoidRoot_tr_lateral";
   17730           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17731           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17732           2 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_tr_lateral;
   17733           2 :                 return GF_OK;
   17734           2 :         case 182:
   17735           2 :                 info->name = "HumanoidRoot_tr_frontal";
   17736           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17737           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17738           2 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_tr_frontal;
   17739           2 :                 return GF_OK;
   17740           2 :         case 183:
   17741           2 :                 info->name = "HumanoidRoot_rt_body_turn";
   17742           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17743           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17744           2 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_rt_body_turn;
   17745           2 :                 return GF_OK;
   17746           2 :         case 184:
   17747           2 :                 info->name = "HumanoidRoot_rt_body_roll";
   17748           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17749           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17750           2 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_rt_body_roll;
   17751           2 :                 return GF_OK;
   17752           2 :         case 185:
   17753           2 :                 info->name = "HumanoidRoot_rt_body_tilt";
   17754           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17755           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17756           2 :                 info->far_ptr = & ((M_BAP *) node)->HumanoidRoot_rt_body_tilt;
   17757           2 :                 return GF_OK;
   17758           2 :         case 186:
   17759           2 :                 info->name = "extensionBap187";
   17760           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17761           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17762           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap187;
   17763           2 :                 return GF_OK;
   17764           2 :         case 187:
   17765           2 :                 info->name = "extensionBap188";
   17766           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17767           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17768           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap188;
   17769           2 :                 return GF_OK;
   17770           2 :         case 188:
   17771           2 :                 info->name = "extensionBap189";
   17772           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17773           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17774           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap189;
   17775           2 :                 return GF_OK;
   17776           2 :         case 189:
   17777           2 :                 info->name = "extensionBap190";
   17778           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17779           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17780           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap190;
   17781           2 :                 return GF_OK;
   17782           2 :         case 190:
   17783           2 :                 info->name = "extensionBap191";
   17784           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17785           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17786           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap191;
   17787           2 :                 return GF_OK;
   17788           2 :         case 191:
   17789           2 :                 info->name = "extensionBap192";
   17790           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17791           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17792           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap192;
   17793           2 :                 return GF_OK;
   17794           2 :         case 192:
   17795           2 :                 info->name = "extensionBap193";
   17796           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17797           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17798           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap193;
   17799           2 :                 return GF_OK;
   17800           2 :         case 193:
   17801           2 :                 info->name = "extensionBap194";
   17802           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17803           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17804           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap194;
   17805           2 :                 return GF_OK;
   17806           2 :         case 194:
   17807           2 :                 info->name = "extensionBap195";
   17808           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17809           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17810           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap195;
   17811           2 :                 return GF_OK;
   17812           2 :         case 195:
   17813           2 :                 info->name = "extensionBap196";
   17814           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17815           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17816           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap196;
   17817           2 :                 return GF_OK;
   17818           2 :         case 196:
   17819           2 :                 info->name = "extensionBap197";
   17820           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17821           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17822           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap197;
   17823           2 :                 return GF_OK;
   17824           2 :         case 197:
   17825           2 :                 info->name = "extensionBap198";
   17826           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17827           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17828           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap198;
   17829           2 :                 return GF_OK;
   17830           2 :         case 198:
   17831           2 :                 info->name = "extensionBap199";
   17832           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17833           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17834           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap199;
   17835           2 :                 return GF_OK;
   17836           2 :         case 199:
   17837           2 :                 info->name = "extensionBap200";
   17838           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17839           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17840           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap200;
   17841           2 :                 return GF_OK;
   17842           2 :         case 200:
   17843           2 :                 info->name = "extensionBap201";
   17844           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17845           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17846           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap201;
   17847           2 :                 return GF_OK;
   17848           2 :         case 201:
   17849           2 :                 info->name = "extensionBap202";
   17850           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17851           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17852           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap202;
   17853           2 :                 return GF_OK;
   17854           2 :         case 202:
   17855           2 :                 info->name = "extensionBap203";
   17856           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17857           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17858           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap203;
   17859           2 :                 return GF_OK;
   17860           2 :         case 203:
   17861           2 :                 info->name = "extensionBap204";
   17862           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17863           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17864           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap204;
   17865           2 :                 return GF_OK;
   17866           2 :         case 204:
   17867           2 :                 info->name = "extensionBap205";
   17868           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17869           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17870           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap205;
   17871           2 :                 return GF_OK;
   17872           2 :         case 205:
   17873           2 :                 info->name = "extensionBap206";
   17874           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17875           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17876           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap206;
   17877           2 :                 return GF_OK;
   17878           2 :         case 206:
   17879           2 :                 info->name = "extensionBap207";
   17880           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17881           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17882           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap207;
   17883           2 :                 return GF_OK;
   17884           2 :         case 207:
   17885           2 :                 info->name = "extensionBap208";
   17886           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17887           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17888           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap208;
   17889           2 :                 return GF_OK;
   17890           2 :         case 208:
   17891           2 :                 info->name = "extensionBap209";
   17892           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17893           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17894           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap209;
   17895           2 :                 return GF_OK;
   17896           2 :         case 209:
   17897           2 :                 info->name = "extensionBap210";
   17898           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17899           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17900           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap210;
   17901           2 :                 return GF_OK;
   17902           2 :         case 210:
   17903           2 :                 info->name = "extensionBap211";
   17904           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17905           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17906           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap211;
   17907           2 :                 return GF_OK;
   17908           2 :         case 211:
   17909           2 :                 info->name = "extensionBap212";
   17910           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17911           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17912           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap212;
   17913           2 :                 return GF_OK;
   17914           2 :         case 212:
   17915           2 :                 info->name = "extensionBap213";
   17916           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17917           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17918           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap213;
   17919           2 :                 return GF_OK;
   17920           2 :         case 213:
   17921           2 :                 info->name = "extensionBap214";
   17922           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17923           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17924           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap214;
   17925           2 :                 return GF_OK;
   17926           2 :         case 214:
   17927           2 :                 info->name = "extensionBap215";
   17928           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17929           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17930           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap215;
   17931           2 :                 return GF_OK;
   17932           2 :         case 215:
   17933           2 :                 info->name = "extensionBap216";
   17934           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17935           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17936           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap216;
   17937           2 :                 return GF_OK;
   17938           2 :         case 216:
   17939           2 :                 info->name = "extensionBap217";
   17940           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17941           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17942           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap217;
   17943           2 :                 return GF_OK;
   17944           2 :         case 217:
   17945           2 :                 info->name = "extensionBap218";
   17946           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17947           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17948           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap218;
   17949           2 :                 return GF_OK;
   17950           2 :         case 218:
   17951           2 :                 info->name = "extensionBap219";
   17952           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17953           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17954           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap219;
   17955           2 :                 return GF_OK;
   17956           2 :         case 219:
   17957           2 :                 info->name = "extensionBap220";
   17958           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17959           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17960           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap220;
   17961           2 :                 return GF_OK;
   17962           2 :         case 220:
   17963           2 :                 info->name = "extensionBap221";
   17964           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17965           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17966           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap221;
   17967           2 :                 return GF_OK;
   17968           2 :         case 221:
   17969           2 :                 info->name = "extensionBap222";
   17970           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17971           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17972           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap222;
   17973           2 :                 return GF_OK;
   17974           2 :         case 222:
   17975           2 :                 info->name = "extensionBap223";
   17976           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17977           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17978           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap223;
   17979           2 :                 return GF_OK;
   17980           2 :         case 223:
   17981           2 :                 info->name = "extensionBap224";
   17982           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17983           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17984           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap224;
   17985           2 :                 return GF_OK;
   17986           2 :         case 224:
   17987           2 :                 info->name = "extensionBap225";
   17988           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17989           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17990           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap225;
   17991           2 :                 return GF_OK;
   17992           2 :         case 225:
   17993           2 :                 info->name = "extensionBap226";
   17994           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   17995           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   17996           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap226;
   17997           2 :                 return GF_OK;
   17998           2 :         case 226:
   17999           2 :                 info->name = "extensionBap227";
   18000           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18001           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18002           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap227;
   18003           2 :                 return GF_OK;
   18004           2 :         case 227:
   18005           2 :                 info->name = "extensionBap228";
   18006           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18007           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18008           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap228;
   18009           2 :                 return GF_OK;
   18010           2 :         case 228:
   18011           2 :                 info->name = "extensionBap229";
   18012           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18013           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18014           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap229;
   18015           2 :                 return GF_OK;
   18016           2 :         case 229:
   18017           2 :                 info->name = "extensionBap230";
   18018           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18019           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18020           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap230;
   18021           2 :                 return GF_OK;
   18022           2 :         case 230:
   18023           2 :                 info->name = "extensionBap231";
   18024           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18025           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18026           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap231;
   18027           2 :                 return GF_OK;
   18028           2 :         case 231:
   18029           2 :                 info->name = "extensionBap232";
   18030           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18031           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18032           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap232;
   18033           2 :                 return GF_OK;
   18034           2 :         case 232:
   18035           2 :                 info->name = "extensionBap233";
   18036           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18037           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18038           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap233;
   18039           2 :                 return GF_OK;
   18040           2 :         case 233:
   18041           2 :                 info->name = "extensionBap234";
   18042           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18043           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18044           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap234;
   18045           2 :                 return GF_OK;
   18046           2 :         case 234:
   18047           2 :                 info->name = "extensionBap235";
   18048           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18049           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18050           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap235;
   18051           2 :                 return GF_OK;
   18052           2 :         case 235:
   18053           2 :                 info->name = "extensionBap236";
   18054           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18055           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18056           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap236;
   18057           2 :                 return GF_OK;
   18058           2 :         case 236:
   18059           2 :                 info->name = "extensionBap237";
   18060           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18061           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18062           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap237;
   18063           2 :                 return GF_OK;
   18064           2 :         case 237:
   18065           2 :                 info->name = "extensionBap238";
   18066           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18067           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18068           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap238;
   18069           2 :                 return GF_OK;
   18070           2 :         case 238:
   18071           2 :                 info->name = "extensionBap239";
   18072           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18073           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18074           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap239;
   18075           2 :                 return GF_OK;
   18076           2 :         case 239:
   18077           2 :                 info->name = "extensionBap240";
   18078           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18079           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18080           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap240;
   18081           2 :                 return GF_OK;
   18082           2 :         case 240:
   18083           2 :                 info->name = "extensionBap241";
   18084           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18085           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18086           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap241;
   18087           2 :                 return GF_OK;
   18088           2 :         case 241:
   18089           2 :                 info->name = "extensionBap242";
   18090           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18091           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18092           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap242;
   18093           2 :                 return GF_OK;
   18094           2 :         case 242:
   18095           2 :                 info->name = "extensionBap243";
   18096           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18097           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18098           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap243;
   18099           2 :                 return GF_OK;
   18100           2 :         case 243:
   18101           2 :                 info->name = "extensionBap244";
   18102           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18103           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18104           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap244;
   18105           2 :                 return GF_OK;
   18106           2 :         case 244:
   18107           2 :                 info->name = "extensionBap245";
   18108           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18109           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18110           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap245;
   18111           2 :                 return GF_OK;
   18112           2 :         case 245:
   18113           2 :                 info->name = "extensionBap246";
   18114           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18115           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18116           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap246;
   18117           2 :                 return GF_OK;
   18118           2 :         case 246:
   18119           2 :                 info->name = "extensionBap247";
   18120           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18121           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18122           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap247;
   18123           2 :                 return GF_OK;
   18124           2 :         case 247:
   18125           2 :                 info->name = "extensionBap248";
   18126           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18127           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18128           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap248;
   18129           2 :                 return GF_OK;
   18130           2 :         case 248:
   18131           2 :                 info->name = "extensionBap249";
   18132           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18133           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18134           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap249;
   18135           2 :                 return GF_OK;
   18136           2 :         case 249:
   18137           2 :                 info->name = "extensionBap250";
   18138           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18139           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18140           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap250;
   18141           2 :                 return GF_OK;
   18142           2 :         case 250:
   18143           2 :                 info->name = "extensionBap251";
   18144           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18145           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18146           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap251;
   18147           2 :                 return GF_OK;
   18148           2 :         case 251:
   18149           2 :                 info->name = "extensionBap252";
   18150           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18151           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18152           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap252;
   18153           2 :                 return GF_OK;
   18154           2 :         case 252:
   18155           2 :                 info->name = "extensionBap253";
   18156           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18157           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18158           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap253;
   18159           2 :                 return GF_OK;
   18160           2 :         case 253:
   18161           2 :                 info->name = "extensionBap254";
   18162           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18163           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18164           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap254;
   18165           2 :                 return GF_OK;
   18166           2 :         case 254:
   18167           2 :                 info->name = "extensionBap255";
   18168           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18169           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18170           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap255;
   18171           2 :                 return GF_OK;
   18172           2 :         case 255:
   18173           2 :                 info->name = "extensionBap256";
   18174           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18175           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18176           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap256;
   18177           2 :                 return GF_OK;
   18178           2 :         case 256:
   18179           2 :                 info->name = "extensionBap257";
   18180           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18181           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18182           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap257;
   18183           2 :                 return GF_OK;
   18184           2 :         case 257:
   18185           2 :                 info->name = "extensionBap258";
   18186           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18187           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18188           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap258;
   18189           2 :                 return GF_OK;
   18190           2 :         case 258:
   18191           2 :                 info->name = "extensionBap259";
   18192           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18193           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18194           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap259;
   18195           2 :                 return GF_OK;
   18196           2 :         case 259:
   18197           2 :                 info->name = "extensionBap260";
   18198           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18199           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18200           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap260;
   18201           2 :                 return GF_OK;
   18202           2 :         case 260:
   18203           2 :                 info->name = "extensionBap261";
   18204           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18205           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18206           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap261;
   18207           2 :                 return GF_OK;
   18208           2 :         case 261:
   18209           2 :                 info->name = "extensionBap262";
   18210           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18211           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18212           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap262;
   18213           2 :                 return GF_OK;
   18214           2 :         case 262:
   18215           2 :                 info->name = "extensionBap263";
   18216           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18217           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18218           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap263;
   18219           2 :                 return GF_OK;
   18220           2 :         case 263:
   18221           2 :                 info->name = "extensionBap264";
   18222           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18223           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18224           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap264;
   18225           2 :                 return GF_OK;
   18226           2 :         case 264:
   18227           2 :                 info->name = "extensionBap265";
   18228           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18229           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18230           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap265;
   18231           2 :                 return GF_OK;
   18232           2 :         case 265:
   18233           2 :                 info->name = "extensionBap266";
   18234           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18235           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18236           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap266;
   18237           2 :                 return GF_OK;
   18238           2 :         case 266:
   18239           2 :                 info->name = "extensionBap267";
   18240           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18241           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18242           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap267;
   18243           2 :                 return GF_OK;
   18244           2 :         case 267:
   18245           2 :                 info->name = "extensionBap268";
   18246           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18247           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18248           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap268;
   18249           2 :                 return GF_OK;
   18250           2 :         case 268:
   18251           2 :                 info->name = "extensionBap269";
   18252           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18253           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18254           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap269;
   18255           2 :                 return GF_OK;
   18256           2 :         case 269:
   18257           2 :                 info->name = "extensionBap270";
   18258           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18259           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18260           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap270;
   18261           2 :                 return GF_OK;
   18262           2 :         case 270:
   18263           2 :                 info->name = "extensionBap271";
   18264           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18265           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18266           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap271;
   18267           2 :                 return GF_OK;
   18268           2 :         case 271:
   18269           2 :                 info->name = "extensionBap272";
   18270           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18271           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18272           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap272;
   18273           2 :                 return GF_OK;
   18274           2 :         case 272:
   18275           2 :                 info->name = "extensionBap273";
   18276           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18277           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18278           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap273;
   18279           2 :                 return GF_OK;
   18280           2 :         case 273:
   18281           2 :                 info->name = "extensionBap274";
   18282           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18283           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18284           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap274;
   18285           2 :                 return GF_OK;
   18286           2 :         case 274:
   18287           2 :                 info->name = "extensionBap275";
   18288           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18289           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18290           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap275;
   18291           2 :                 return GF_OK;
   18292           2 :         case 275:
   18293           2 :                 info->name = "extensionBap276";
   18294           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18295           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18296           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap276;
   18297           2 :                 return GF_OK;
   18298           2 :         case 276:
   18299           2 :                 info->name = "extensionBap277";
   18300           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18301           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18302           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap277;
   18303           2 :                 return GF_OK;
   18304           2 :         case 277:
   18305           2 :                 info->name = "extensionBap278";
   18306           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18307           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18308           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap278;
   18309           2 :                 return GF_OK;
   18310           2 :         case 278:
   18311           2 :                 info->name = "extensionBap279";
   18312           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18313           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18314           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap279;
   18315           2 :                 return GF_OK;
   18316           2 :         case 279:
   18317           2 :                 info->name = "extensionBap280";
   18318           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18319           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18320           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap280;
   18321           2 :                 return GF_OK;
   18322           2 :         case 280:
   18323           2 :                 info->name = "extensionBap281";
   18324           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18325           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18326           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap281;
   18327           2 :                 return GF_OK;
   18328           2 :         case 281:
   18329           2 :                 info->name = "extensionBap282";
   18330           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18331           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18332           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap282;
   18333           2 :                 return GF_OK;
   18334           2 :         case 282:
   18335           2 :                 info->name = "extensionBap283";
   18336           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18337           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18338           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap283;
   18339           2 :                 return GF_OK;
   18340           2 :         case 283:
   18341           2 :                 info->name = "extensionBap284";
   18342           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18343           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18344           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap284;
   18345           2 :                 return GF_OK;
   18346           2 :         case 284:
   18347           2 :                 info->name = "extensionBap285";
   18348           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18349           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18350           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap285;
   18351           2 :                 return GF_OK;
   18352           2 :         case 285:
   18353           2 :                 info->name = "extensionBap286";
   18354           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18355           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18356           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap286;
   18357           2 :                 return GF_OK;
   18358           2 :         case 286:
   18359           2 :                 info->name = "extensionBap287";
   18360           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18361           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18362           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap287;
   18363           2 :                 return GF_OK;
   18364           2 :         case 287:
   18365           2 :                 info->name = "extensionBap288";
   18366           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18367           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18368           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap288;
   18369           2 :                 return GF_OK;
   18370           2 :         case 288:
   18371           2 :                 info->name = "extensionBap289";
   18372           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18373           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18374           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap289;
   18375           2 :                 return GF_OK;
   18376           2 :         case 289:
   18377           2 :                 info->name = "extensionBap290";
   18378           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18379           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18380           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap290;
   18381           2 :                 return GF_OK;
   18382           2 :         case 290:
   18383           2 :                 info->name = "extensionBap291";
   18384           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18385           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18386           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap291;
   18387           2 :                 return GF_OK;
   18388           2 :         case 291:
   18389           2 :                 info->name = "extensionBap292";
   18390           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18391           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18392           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap292;
   18393           2 :                 return GF_OK;
   18394           2 :         case 292:
   18395           2 :                 info->name = "extensionBap293";
   18396           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18397           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18398           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap293;
   18399           2 :                 return GF_OK;
   18400           2 :         case 293:
   18401           2 :                 info->name = "extensionBap294";
   18402           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18403           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18404           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap294;
   18405           2 :                 return GF_OK;
   18406           2 :         case 294:
   18407           2 :                 info->name = "extensionBap295";
   18408           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18409           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18410           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap295;
   18411           2 :                 return GF_OK;
   18412           2 :         case 295:
   18413           2 :                 info->name = "extensionBap296";
   18414           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   18415           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   18416           2 :                 info->far_ptr = & ((M_BAP *) node)->extensionBap296;
   18417           2 :                 return GF_OK;
   18418             :         default:
   18419             :                 return GF_BAD_PARAM;
   18420             :         }
   18421             : }
   18422             : 
   18423             : 
   18424         296 : static s32 BAP_get_field_index_by_name(char *name)
   18425             : {
   18426         296 :         if (!strcmp("sacroiliac_tilt", name)) return 0;
   18427         295 :         if (!strcmp("sacroiliac_torsion", name)) return 1;
   18428         294 :         if (!strcmp("sacroiliac_roll", name)) return 2;
   18429         293 :         if (!strcmp("l_hip_flexion", name)) return 3;
   18430         292 :         if (!strcmp("r_hip_flexion", name)) return 4;
   18431         291 :         if (!strcmp("l_hip_abduct", name)) return 5;
   18432         290 :         if (!strcmp("r_hip_abduct", name)) return 6;
   18433         289 :         if (!strcmp("l_hip_twisting", name)) return 7;
   18434         288 :         if (!strcmp("r_hip_twisting", name)) return 8;
   18435         287 :         if (!strcmp("l_knee_flexion", name)) return 9;
   18436         286 :         if (!strcmp("r_knee_flexion", name)) return 10;
   18437         285 :         if (!strcmp("l_knee_twisting", name)) return 11;
   18438         284 :         if (!strcmp("r_knee_twisting", name)) return 12;
   18439         283 :         if (!strcmp("l_ankle_flexion", name)) return 13;
   18440         282 :         if (!strcmp("r_ankle_flexion", name)) return 14;
   18441         281 :         if (!strcmp("l_ankle_twisting", name)) return 15;
   18442         280 :         if (!strcmp("r_ankle_twisting", name)) return 16;
   18443         279 :         if (!strcmp("l_subtalar_flexion", name)) return 17;
   18444         278 :         if (!strcmp("r_subtalar_flexion", name)) return 18;
   18445         277 :         if (!strcmp("l_midtarsal_flexion", name)) return 19;
   18446         276 :         if (!strcmp("r_midtarsal_flexion", name)) return 20;
   18447         275 :         if (!strcmp("l_metatarsal_flexion", name)) return 21;
   18448         274 :         if (!strcmp("r_metatarsal_flexion", name)) return 22;
   18449         273 :         if (!strcmp("l_sternoclavicular_abduct", name)) return 23;
   18450         272 :         if (!strcmp("r_sternoclavicular_abduct", name)) return 24;
   18451         271 :         if (!strcmp("l_sternoclavicular_rotate", name)) return 25;
   18452         270 :         if (!strcmp("r_sternoclavicular_rotate", name)) return 26;
   18453         269 :         if (!strcmp("l_acromioclavicular_abduct", name)) return 27;
   18454         268 :         if (!strcmp("r_acromioclavicular_abduct", name)) return 28;
   18455         267 :         if (!strcmp("l_acromioclavicular_rotate", name)) return 29;
   18456         266 :         if (!strcmp("r_acromioclavicular_rotate", name)) return 30;
   18457         265 :         if (!strcmp("l_shoulder_flexion", name)) return 31;
   18458         264 :         if (!strcmp("r_shoulder_flexion", name)) return 32;
   18459         263 :         if (!strcmp("l_shoulder_abduct", name)) return 33;
   18460         262 :         if (!strcmp("r_shoulder_abduct", name)) return 34;
   18461         261 :         if (!strcmp("l_shoulder_twisting", name)) return 35;
   18462         260 :         if (!strcmp("r_shoulder_twisting", name)) return 36;
   18463         259 :         if (!strcmp("l_elbow_flexion", name)) return 37;
   18464         258 :         if (!strcmp("r_elbow_flexion", name)) return 38;
   18465         257 :         if (!strcmp("l_elbow_twisting", name)) return 39;
   18466         256 :         if (!strcmp("r_elbow_twisting", name)) return 40;
   18467         255 :         if (!strcmp("l_wrist_flexion", name)) return 41;
   18468         254 :         if (!strcmp("r_wrist_flexion", name)) return 42;
   18469         253 :         if (!strcmp("l_wrist_pivot", name)) return 43;
   18470         252 :         if (!strcmp("r_wrist_pivot", name)) return 44;
   18471         251 :         if (!strcmp("l_wrist_twisting", name)) return 45;
   18472         250 :         if (!strcmp("r_wrist_twisting", name)) return 46;
   18473         249 :         if (!strcmp("skullbase_roll", name)) return 47;
   18474         248 :         if (!strcmp("skullbase_torsion", name)) return 48;
   18475         247 :         if (!strcmp("skullbase_tilt", name)) return 49;
   18476         246 :         if (!strcmp("vc1roll", name)) return 50;
   18477         245 :         if (!strcmp("vc1torsion", name)) return 51;
   18478         244 :         if (!strcmp("vc1tilt", name)) return 52;
   18479         243 :         if (!strcmp("vc2roll", name)) return 53;
   18480         242 :         if (!strcmp("vc2torsion", name)) return 54;
   18481         241 :         if (!strcmp("vc2tilt", name)) return 55;
   18482         240 :         if (!strcmp("vc3roll", name)) return 56;
   18483         239 :         if (!strcmp("vc3torsion", name)) return 57;
   18484         238 :         if (!strcmp("vc3tilt", name)) return 58;
   18485         237 :         if (!strcmp("vc4roll", name)) return 59;
   18486         236 :         if (!strcmp("vc4torsion", name)) return 60;
   18487         235 :         if (!strcmp("vc4tilt", name)) return 61;
   18488         234 :         if (!strcmp("vc5roll", name)) return 62;
   18489         233 :         if (!strcmp("vc5torsion", name)) return 63;
   18490         232 :         if (!strcmp("vc5tilt", name)) return 64;
   18491         231 :         if (!strcmp("vc6roll", name)) return 65;
   18492         230 :         if (!strcmp("vc6torsion", name)) return 66;
   18493         229 :         if (!strcmp("vc6tilt", name)) return 67;
   18494         228 :         if (!strcmp("vc7roll", name)) return 68;
   18495         227 :         if (!strcmp("vc7torsion", name)) return 69;
   18496         226 :         if (!strcmp("vc7tilt", name)) return 70;
   18497         225 :         if (!strcmp("vt1roll", name)) return 71;
   18498         224 :         if (!strcmp("vt1torsion", name)) return 72;
   18499         223 :         if (!strcmp("vt1tilt", name)) return 73;
   18500         222 :         if (!strcmp("vt2roll", name)) return 74;
   18501         221 :         if (!strcmp("vt2torsion", name)) return 75;
   18502         220 :         if (!strcmp("vt2tilt", name)) return 76;
   18503         219 :         if (!strcmp("vt3roll", name)) return 77;
   18504         218 :         if (!strcmp("vt3torsion", name)) return 78;
   18505         217 :         if (!strcmp("vt3tilt", name)) return 79;
   18506         216 :         if (!strcmp("vt4roll", name)) return 80;
   18507         215 :         if (!strcmp("vt4torsion", name)) return 81;
   18508         214 :         if (!strcmp("vt4tilt", name)) return 82;
   18509         213 :         if (!strcmp("vt5roll", name)) return 83;
   18510         212 :         if (!strcmp("vt5torsion", name)) return 84;
   18511         211 :         if (!strcmp("vt5tilt", name)) return 85;
   18512         210 :         if (!strcmp("vt6roll", name)) return 86;
   18513         209 :         if (!strcmp("vt6torsion", name)) return 87;
   18514         208 :         if (!strcmp("vt6tilt", name)) return 88;
   18515         207 :         if (!strcmp("vt7roll", name)) return 89;
   18516         206 :         if (!strcmp("vt7torsion", name)) return 90;
   18517         205 :         if (!strcmp("vt7tilt", name)) return 91;
   18518         204 :         if (!strcmp("vt8roll", name)) return 92;
   18519         203 :         if (!strcmp("vt8torsion", name)) return 93;
   18520         202 :         if (!strcmp("vt8tilt", name)) return 94;
   18521         201 :         if (!strcmp("vt9roll", name)) return 95;
   18522         200 :         if (!strcmp("vt9torsion", name)) return 96;
   18523         199 :         if (!strcmp("vt9tilt", name)) return 97;
   18524         198 :         if (!strcmp("vt10roll", name)) return 98;
   18525         197 :         if (!strcmp("vt10torsion", name)) return 99;
   18526         196 :         if (!strcmp("vt10tilt", name)) return 100;
   18527         195 :         if (!strcmp("vt11roll", name)) return 101;
   18528         194 :         if (!strcmp("vt11torsion", name)) return 102;
   18529         193 :         if (!strcmp("vt11tilt", name)) return 103;
   18530         192 :         if (!strcmp("vt12roll", name)) return 104;
   18531         191 :         if (!strcmp("vt12torsion", name)) return 105;
   18532         190 :         if (!strcmp("vt12tilt", name)) return 106;
   18533         189 :         if (!strcmp("vl1roll", name)) return 107;
   18534         188 :         if (!strcmp("vl1torsion", name)) return 108;
   18535         187 :         if (!strcmp("vl1tilt", name)) return 109;
   18536         186 :         if (!strcmp("vl2roll", name)) return 110;
   18537         185 :         if (!strcmp("vl2torsion", name)) return 111;
   18538         184 :         if (!strcmp("vl2tilt", name)) return 112;
   18539         183 :         if (!strcmp("vl3roll", name)) return 113;
   18540         182 :         if (!strcmp("vl3torsion", name)) return 114;
   18541         181 :         if (!strcmp("vl3tilt", name)) return 115;
   18542         180 :         if (!strcmp("vl4roll", name)) return 116;
   18543         179 :         if (!strcmp("vl4torsion", name)) return 117;
   18544         178 :         if (!strcmp("vl4tilt", name)) return 118;
   18545         177 :         if (!strcmp("vl5roll", name)) return 119;
   18546         176 :         if (!strcmp("vl5torsion", name)) return 120;
   18547         175 :         if (!strcmp("vl5tilt", name)) return 121;
   18548         174 :         if (!strcmp("l_pinky0_flexion", name)) return 122;
   18549         173 :         if (!strcmp("r_pinky0_flexion", name)) return 123;
   18550         172 :         if (!strcmp("l_pinky1_flexion", name)) return 124;
   18551         171 :         if (!strcmp("r_pinky1_flexion", name)) return 125;
   18552         170 :         if (!strcmp("l_pinky1_pivot", name)) return 126;
   18553         169 :         if (!strcmp("r_pinky1_pivot", name)) return 127;
   18554         168 :         if (!strcmp("l_pinky1_twisting", name)) return 128;
   18555         167 :         if (!strcmp("r_pinky1_twisting", name)) return 129;
   18556         166 :         if (!strcmp("l_pinky2_flexion", name)) return 130;
   18557         165 :         if (!strcmp("r_pinky2_flexion", name)) return 131;
   18558         164 :         if (!strcmp("l_pinky3_flexion", name)) return 132;
   18559         163 :         if (!strcmp("r_pinky3_flexion", name)) return 133;
   18560         162 :         if (!strcmp("l_ring0_flexion", name)) return 134;
   18561         161 :         if (!strcmp("r_ring0_flexion", name)) return 135;
   18562         160 :         if (!strcmp("l_ring1_flexion", name)) return 136;
   18563         159 :         if (!strcmp("r_ring1_flexion", name)) return 137;
   18564         158 :         if (!strcmp("l_ring1_pivot", name)) return 138;
   18565         157 :         if (!strcmp("r_ring1_pivot", name)) return 139;
   18566         156 :         if (!strcmp("l_ring1_twisting", name)) return 140;
   18567         155 :         if (!strcmp("r_ring1_twisting", name)) return 141;
   18568         154 :         if (!strcmp("l_ring2_flexion", name)) return 142;
   18569         153 :         if (!strcmp("r_ring2_flexion", name)) return 143;
   18570         152 :         if (!strcmp("l_ring3_flexion", name)) return 144;
   18571         151 :         if (!strcmp("r_ring3_flexion", name)) return 145;
   18572         150 :         if (!strcmp("l_middle0_flexion", name)) return 146;
   18573         149 :         if (!strcmp("r_middle0_flexion", name)) return 147;
   18574         148 :         if (!strcmp("l_middle1_flexion", name)) return 148;
   18575         147 :         if (!strcmp("r_middle1_flexion", name)) return 149;
   18576         146 :         if (!strcmp("l_middle1_pivot", name)) return 150;
   18577         145 :         if (!strcmp("r_middle1_pivot", name)) return 151;
   18578         144 :         if (!strcmp("l_middle1_twisting", name)) return 152;
   18579         143 :         if (!strcmp("r_middle1_twisting", name)) return 153;
   18580         142 :         if (!strcmp("l_middle2_flexion", name)) return 154;
   18581         141 :         if (!strcmp("r_middle2_flexion", name)) return 155;
   18582         140 :         if (!strcmp("l_middle3_flexion", name)) return 156;
   18583         139 :         if (!strcmp("r_middle3_flexion", name)) return 157;
   18584         138 :         if (!strcmp("l_index0_flexion", name)) return 158;
   18585         137 :         if (!strcmp("r_index0_flexion", name)) return 159;
   18586         136 :         if (!strcmp("l_index1_flexion", name)) return 160;
   18587         135 :         if (!strcmp("r_index1_flexion", name)) return 161;
   18588         134 :         if (!strcmp("l_index1_pivot", name)) return 162;
   18589         133 :         if (!strcmp("r_index1_pivot", name)) return 163;
   18590         132 :         if (!strcmp("l_index1_twisting", name)) return 164;
   18591         131 :         if (!strcmp("r_index1_twisting", name)) return 165;
   18592         130 :         if (!strcmp("l_index2_flexion", name)) return 166;
   18593         129 :         if (!strcmp("r_index2_flexion", name)) return 167;
   18594         128 :         if (!strcmp("l_index3_flexion", name)) return 168;
   18595         127 :         if (!strcmp("r_index3_flexion", name)) return 169;
   18596         126 :         if (!strcmp("l_thumb1_flexion", name)) return 170;
   18597         125 :         if (!strcmp("r_thumb1_flexion", name)) return 171;
   18598         124 :         if (!strcmp("l_thumb1_pivot", name)) return 172;
   18599         123 :         if (!strcmp("r_thumb1_pivot", name)) return 173;
   18600         122 :         if (!strcmp("l_thumb1_twisting", name)) return 174;
   18601         121 :         if (!strcmp("r_thumb1_twisting", name)) return 175;
   18602         120 :         if (!strcmp("l_thumb2_flexion", name)) return 176;
   18603         119 :         if (!strcmp("r_thumb2_flexion", name)) return 177;
   18604         118 :         if (!strcmp("l_thumb3_flexion", name)) return 178;
   18605         117 :         if (!strcmp("r_thumb3_flexion", name)) return 179;
   18606         116 :         if (!strcmp("HumanoidRoot_tr_vertical", name)) return 180;
   18607         115 :         if (!strcmp("HumanoidRoot_tr_lateral", name)) return 181;
   18608         114 :         if (!strcmp("HumanoidRoot_tr_frontal", name)) return 182;
   18609         113 :         if (!strcmp("HumanoidRoot_rt_body_turn", name)) return 183;
   18610         112 :         if (!strcmp("HumanoidRoot_rt_body_roll", name)) return 184;
   18611         111 :         if (!strcmp("HumanoidRoot_rt_body_tilt", name)) return 185;
   18612         110 :         if (!strcmp("extensionBap187", name)) return 186;
   18613         109 :         if (!strcmp("extensionBap188", name)) return 187;
   18614         108 :         if (!strcmp("extensionBap189", name)) return 188;
   18615         107 :         if (!strcmp("extensionBap190", name)) return 189;
   18616         106 :         if (!strcmp("extensionBap191", name)) return 190;
   18617         105 :         if (!strcmp("extensionBap192", name)) return 191;
   18618         104 :         if (!strcmp("extensionBap193", name)) return 192;
   18619         103 :         if (!strcmp("extensionBap194", name)) return 193;
   18620         102 :         if (!strcmp("extensionBap195", name)) return 194;
   18621         101 :         if (!strcmp("extensionBap196", name)) return 195;
   18622         100 :         if (!strcmp("extensionBap197", name)) return 196;
   18623          99 :         if (!strcmp("extensionBap198", name)) return 197;
   18624          98 :         if (!strcmp("extensionBap199", name)) return 198;
   18625          97 :         if (!strcmp("extensionBap200", name)) return 199;
   18626          96 :         if (!strcmp("extensionBap201", name)) return 200;
   18627          95 :         if (!strcmp("extensionBap202", name)) return 201;
   18628          94 :         if (!strcmp("extensionBap203", name)) return 202;
   18629          93 :         if (!strcmp("extensionBap204", name)) return 203;
   18630          92 :         if (!strcmp("extensionBap205", name)) return 204;
   18631          91 :         if (!strcmp("extensionBap206", name)) return 205;
   18632          90 :         if (!strcmp("extensionBap207", name)) return 206;
   18633          89 :         if (!strcmp("extensionBap208", name)) return 207;
   18634          88 :         if (!strcmp("extensionBap209", name)) return 208;
   18635          87 :         if (!strcmp("extensionBap210", name)) return 209;
   18636          86 :         if (!strcmp("extensionBap211", name)) return 210;
   18637          85 :         if (!strcmp("extensionBap212", name)) return 211;
   18638          84 :         if (!strcmp("extensionBap213", name)) return 212;
   18639          83 :         if (!strcmp("extensionBap214", name)) return 213;
   18640          82 :         if (!strcmp("extensionBap215", name)) return 214;
   18641          81 :         if (!strcmp("extensionBap216", name)) return 215;
   18642          80 :         if (!strcmp("extensionBap217", name)) return 216;
   18643          79 :         if (!strcmp("extensionBap218", name)) return 217;
   18644          78 :         if (!strcmp("extensionBap219", name)) return 218;
   18645          77 :         if (!strcmp("extensionBap220", name)) return 219;
   18646          76 :         if (!strcmp("extensionBap221", name)) return 220;
   18647          75 :         if (!strcmp("extensionBap222", name)) return 221;
   18648          74 :         if (!strcmp("extensionBap223", name)) return 222;
   18649          73 :         if (!strcmp("extensionBap224", name)) return 223;
   18650          72 :         if (!strcmp("extensionBap225", name)) return 224;
   18651          71 :         if (!strcmp("extensionBap226", name)) return 225;
   18652          70 :         if (!strcmp("extensionBap227", name)) return 226;
   18653          69 :         if (!strcmp("extensionBap228", name)) return 227;
   18654          68 :         if (!strcmp("extensionBap229", name)) return 228;
   18655          67 :         if (!strcmp("extensionBap230", name)) return 229;
   18656          66 :         if (!strcmp("extensionBap231", name)) return 230;
   18657          65 :         if (!strcmp("extensionBap232", name)) return 231;
   18658          64 :         if (!strcmp("extensionBap233", name)) return 232;
   18659          63 :         if (!strcmp("extensionBap234", name)) return 233;
   18660          62 :         if (!strcmp("extensionBap235", name)) return 234;
   18661          61 :         if (!strcmp("extensionBap236", name)) return 235;
   18662          60 :         if (!strcmp("extensionBap237", name)) return 236;
   18663          59 :         if (!strcmp("extensionBap238", name)) return 237;
   18664          58 :         if (!strcmp("extensionBap239", name)) return 238;
   18665          57 :         if (!strcmp("extensionBap240", name)) return 239;
   18666          56 :         if (!strcmp("extensionBap241", name)) return 240;
   18667          55 :         if (!strcmp("extensionBap242", name)) return 241;
   18668          54 :         if (!strcmp("extensionBap243", name)) return 242;
   18669          53 :         if (!strcmp("extensionBap244", name)) return 243;
   18670          52 :         if (!strcmp("extensionBap245", name)) return 244;
   18671          51 :         if (!strcmp("extensionBap246", name)) return 245;
   18672          50 :         if (!strcmp("extensionBap247", name)) return 246;
   18673          49 :         if (!strcmp("extensionBap248", name)) return 247;
   18674          48 :         if (!strcmp("extensionBap249", name)) return 248;
   18675          47 :         if (!strcmp("extensionBap250", name)) return 249;
   18676          46 :         if (!strcmp("extensionBap251", name)) return 250;
   18677          45 :         if (!strcmp("extensionBap252", name)) return 251;
   18678          44 :         if (!strcmp("extensionBap253", name)) return 252;
   18679          43 :         if (!strcmp("extensionBap254", name)) return 253;
   18680          42 :         if (!strcmp("extensionBap255", name)) return 254;
   18681          41 :         if (!strcmp("extensionBap256", name)) return 255;
   18682          40 :         if (!strcmp("extensionBap257", name)) return 256;
   18683          39 :         if (!strcmp("extensionBap258", name)) return 257;
   18684          38 :         if (!strcmp("extensionBap259", name)) return 258;
   18685          37 :         if (!strcmp("extensionBap260", name)) return 259;
   18686          36 :         if (!strcmp("extensionBap261", name)) return 260;
   18687          35 :         if (!strcmp("extensionBap262", name)) return 261;
   18688          34 :         if (!strcmp("extensionBap263", name)) return 262;
   18689          33 :         if (!strcmp("extensionBap264", name)) return 263;
   18690          32 :         if (!strcmp("extensionBap265", name)) return 264;
   18691          31 :         if (!strcmp("extensionBap266", name)) return 265;
   18692          30 :         if (!strcmp("extensionBap267", name)) return 266;
   18693          29 :         if (!strcmp("extensionBap268", name)) return 267;
   18694          28 :         if (!strcmp("extensionBap269", name)) return 268;
   18695          27 :         if (!strcmp("extensionBap270", name)) return 269;
   18696          26 :         if (!strcmp("extensionBap271", name)) return 270;
   18697          25 :         if (!strcmp("extensionBap272", name)) return 271;
   18698          24 :         if (!strcmp("extensionBap273", name)) return 272;
   18699          23 :         if (!strcmp("extensionBap274", name)) return 273;
   18700          22 :         if (!strcmp("extensionBap275", name)) return 274;
   18701          21 :         if (!strcmp("extensionBap276", name)) return 275;
   18702          20 :         if (!strcmp("extensionBap277", name)) return 276;
   18703          19 :         if (!strcmp("extensionBap278", name)) return 277;
   18704          18 :         if (!strcmp("extensionBap279", name)) return 278;
   18705          17 :         if (!strcmp("extensionBap280", name)) return 279;
   18706          16 :         if (!strcmp("extensionBap281", name)) return 280;
   18707          15 :         if (!strcmp("extensionBap282", name)) return 281;
   18708          14 :         if (!strcmp("extensionBap283", name)) return 282;
   18709          13 :         if (!strcmp("extensionBap284", name)) return 283;
   18710          12 :         if (!strcmp("extensionBap285", name)) return 284;
   18711          11 :         if (!strcmp("extensionBap286", name)) return 285;
   18712          10 :         if (!strcmp("extensionBap287", name)) return 286;
   18713           9 :         if (!strcmp("extensionBap288", name)) return 287;
   18714           8 :         if (!strcmp("extensionBap289", name)) return 288;
   18715           7 :         if (!strcmp("extensionBap290", name)) return 289;
   18716           6 :         if (!strcmp("extensionBap291", name)) return 290;
   18717           5 :         if (!strcmp("extensionBap292", name)) return 291;
   18718           4 :         if (!strcmp("extensionBap293", name)) return 292;
   18719           3 :         if (!strcmp("extensionBap294", name)) return 293;
   18720           2 :         if (!strcmp("extensionBap295", name)) return 294;
   18721           1 :         if (!strcmp("extensionBap296", name)) return 295;
   18722           0 :         return -1;
   18723             : }
   18724         296 : static Bool BAP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   18725             : {
   18726         296 :         switch (FieldIndex) {
   18727           1 :         case 0:
   18728           1 :                 *AType = 0;
   18729           1 :                 *QType = 0;
   18730           1 :                 *b_min = FIX_MIN;
   18731           1 :                 *b_max = FIX_MAX;
   18732             :                 return 1;
   18733           1 :         case 1:
   18734           1 :                 *AType = 0;
   18735           1 :                 *QType = 0;
   18736           1 :                 *b_min = FIX_MIN;
   18737           1 :                 *b_max = FIX_MAX;
   18738             :                 return 1;
   18739           1 :         case 2:
   18740           1 :                 *AType = 0;
   18741           1 :                 *QType = 0;
   18742           1 :                 *b_min = FIX_MIN;
   18743           1 :                 *b_max = FIX_MAX;
   18744             :                 return 1;
   18745           1 :         case 3:
   18746           1 :                 *AType = 0;
   18747           1 :                 *QType = 0;
   18748           1 :                 *b_min = FIX_MIN;
   18749           1 :                 *b_max = FIX_MAX;
   18750             :                 return 1;
   18751           1 :         case 4:
   18752           1 :                 *AType = 0;
   18753           1 :                 *QType = 0;
   18754           1 :                 *b_min = FIX_MIN;
   18755           1 :                 *b_max = FIX_MAX;
   18756             :                 return 1;
   18757           1 :         case 5:
   18758           1 :                 *AType = 0;
   18759           1 :                 *QType = 0;
   18760           1 :                 *b_min = FIX_MIN;
   18761           1 :                 *b_max = FIX_MAX;
   18762             :                 return 1;
   18763           1 :         case 6:
   18764           1 :                 *AType = 0;
   18765           1 :                 *QType = 0;
   18766           1 :                 *b_min = FIX_MIN;
   18767           1 :                 *b_max = FIX_MAX;
   18768             :                 return 1;
   18769           1 :         case 7:
   18770           1 :                 *AType = 0;
   18771           1 :                 *QType = 0;
   18772           1 :                 *b_min = FIX_MIN;
   18773           1 :                 *b_max = FIX_MAX;
   18774             :                 return 1;
   18775           1 :         case 8:
   18776           1 :                 *AType = 0;
   18777           1 :                 *QType = 0;
   18778           1 :                 *b_min = FIX_MIN;
   18779           1 :                 *b_max = FIX_MAX;
   18780             :                 return 1;
   18781           1 :         case 9:
   18782           1 :                 *AType = 0;
   18783           1 :                 *QType = 0;
   18784           1 :                 *b_min = FIX_MIN;
   18785           1 :                 *b_max = FIX_MAX;
   18786             :                 return 1;
   18787           1 :         case 10:
   18788           1 :                 *AType = 0;
   18789           1 :                 *QType = 0;
   18790           1 :                 *b_min = FIX_MIN;
   18791           1 :                 *b_max = FIX_MAX;
   18792             :                 return 1;
   18793           1 :         case 11:
   18794           1 :                 *AType = 0;
   18795           1 :                 *QType = 0;
   18796           1 :                 *b_min = FIX_MIN;
   18797           1 :                 *b_max = FIX_MAX;
   18798             :                 return 1;
   18799           1 :         case 12:
   18800           1 :                 *AType = 0;
   18801           1 :                 *QType = 0;
   18802           1 :                 *b_min = FIX_MIN;
   18803           1 :                 *b_max = FIX_MAX;
   18804             :                 return 1;
   18805           1 :         case 13:
   18806           1 :                 *AType = 0;
   18807           1 :                 *QType = 0;
   18808           1 :                 *b_min = FIX_MIN;
   18809           1 :                 *b_max = FIX_MAX;
   18810             :                 return 1;
   18811           1 :         case 14:
   18812           1 :                 *AType = 0;
   18813           1 :                 *QType = 0;
   18814           1 :                 *b_min = FIX_MIN;
   18815           1 :                 *b_max = FIX_MAX;
   18816             :                 return 1;
   18817           1 :         case 15:
   18818           1 :                 *AType = 0;
   18819           1 :                 *QType = 0;
   18820           1 :                 *b_min = FIX_MIN;
   18821           1 :                 *b_max = FIX_MAX;
   18822             :                 return 1;
   18823           1 :         case 16:
   18824           1 :                 *AType = 0;
   18825           1 :                 *QType = 0;
   18826           1 :                 *b_min = FIX_MIN;
   18827           1 :                 *b_max = FIX_MAX;
   18828             :                 return 1;
   18829           1 :         case 17:
   18830           1 :                 *AType = 0;
   18831           1 :                 *QType = 0;
   18832           1 :                 *b_min = FIX_MIN;
   18833           1 :                 *b_max = FIX_MAX;
   18834             :                 return 1;
   18835           1 :         case 18:
   18836           1 :                 *AType = 0;
   18837           1 :                 *QType = 0;
   18838           1 :                 *b_min = FIX_MIN;
   18839           1 :                 *b_max = FIX_MAX;
   18840             :                 return 1;
   18841           1 :         case 19:
   18842           1 :                 *AType = 0;
   18843           1 :                 *QType = 0;
   18844           1 :                 *b_min = FIX_MIN;
   18845           1 :                 *b_max = FIX_MAX;
   18846             :                 return 1;
   18847           1 :         case 20:
   18848           1 :                 *AType = 0;
   18849           1 :                 *QType = 0;
   18850           1 :                 *b_min = FIX_MIN;
   18851           1 :                 *b_max = FIX_MAX;
   18852             :                 return 1;
   18853           1 :         case 21:
   18854           1 :                 *AType = 0;
   18855           1 :                 *QType = 0;
   18856           1 :                 *b_min = FIX_MIN;
   18857           1 :                 *b_max = FIX_MAX;
   18858             :                 return 1;
   18859           1 :         case 22:
   18860           1 :                 *AType = 0;
   18861           1 :                 *QType = 0;
   18862           1 :                 *b_min = FIX_MIN;
   18863           1 :                 *b_max = FIX_MAX;
   18864             :                 return 1;
   18865           1 :         case 23:
   18866           1 :                 *AType = 0;
   18867           1 :                 *QType = 0;
   18868           1 :                 *b_min = FIX_MIN;
   18869           1 :                 *b_max = FIX_MAX;
   18870             :                 return 1;
   18871           1 :         case 24:
   18872           1 :                 *AType = 0;
   18873           1 :                 *QType = 0;
   18874           1 :                 *b_min = FIX_MIN;
   18875           1 :                 *b_max = FIX_MAX;
   18876             :                 return 1;
   18877           1 :         case 25:
   18878           1 :                 *AType = 0;
   18879           1 :                 *QType = 0;
   18880           1 :                 *b_min = FIX_MIN;
   18881           1 :                 *b_max = FIX_MAX;
   18882             :                 return 1;
   18883           1 :         case 26:
   18884           1 :                 *AType = 0;
   18885           1 :                 *QType = 0;
   18886           1 :                 *b_min = FIX_MIN;
   18887           1 :                 *b_max = FIX_MAX;
   18888             :                 return 1;
   18889           1 :         case 27:
   18890           1 :                 *AType = 0;
   18891           1 :                 *QType = 0;
   18892           1 :                 *b_min = FIX_MIN;
   18893           1 :                 *b_max = FIX_MAX;
   18894             :                 return 1;
   18895           1 :         case 28:
   18896           1 :                 *AType = 0;
   18897           1 :                 *QType = 0;
   18898           1 :                 *b_min = FIX_MIN;
   18899           1 :                 *b_max = FIX_MAX;
   18900             :                 return 1;
   18901           1 :         case 29:
   18902           1 :                 *AType = 0;
   18903           1 :                 *QType = 0;
   18904           1 :                 *b_min = FIX_MIN;
   18905           1 :                 *b_max = FIX_MAX;
   18906             :                 return 1;
   18907           1 :         case 30:
   18908           1 :                 *AType = 0;
   18909           1 :                 *QType = 0;
   18910           1 :                 *b_min = FIX_MIN;
   18911           1 :                 *b_max = FIX_MAX;
   18912             :                 return 1;
   18913           1 :         case 31:
   18914           1 :                 *AType = 0;
   18915           1 :                 *QType = 0;
   18916           1 :                 *b_min = FIX_MIN;
   18917           1 :                 *b_max = FIX_MAX;
   18918             :                 return 1;
   18919           1 :         case 32:
   18920           1 :                 *AType = 0;
   18921           1 :                 *QType = 0;
   18922           1 :                 *b_min = FIX_MIN;
   18923           1 :                 *b_max = FIX_MAX;
   18924             :                 return 1;
   18925           1 :         case 33:
   18926           1 :                 *AType = 0;
   18927           1 :                 *QType = 0;
   18928           1 :                 *b_min = FIX_MIN;
   18929           1 :                 *b_max = FIX_MAX;
   18930             :                 return 1;
   18931           1 :         case 34:
   18932           1 :                 *AType = 0;
   18933           1 :                 *QType = 0;
   18934           1 :                 *b_min = FIX_MIN;
   18935           1 :                 *b_max = FIX_MAX;
   18936             :                 return 1;
   18937           1 :         case 35:
   18938           1 :                 *AType = 0;
   18939           1 :                 *QType = 0;
   18940           1 :                 *b_min = FIX_MIN;
   18941           1 :                 *b_max = FIX_MAX;
   18942             :                 return 1;
   18943           1 :         case 36:
   18944           1 :                 *AType = 0;
   18945           1 :                 *QType = 0;
   18946           1 :                 *b_min = FIX_MIN;
   18947           1 :                 *b_max = FIX_MAX;
   18948             :                 return 1;
   18949           1 :         case 37:
   18950           1 :                 *AType = 0;
   18951           1 :                 *QType = 0;
   18952           1 :                 *b_min = FIX_MIN;
   18953           1 :                 *b_max = FIX_MAX;
   18954             :                 return 1;
   18955           1 :         case 38:
   18956           1 :                 *AType = 0;
   18957           1 :                 *QType = 0;
   18958           1 :                 *b_min = FIX_MIN;
   18959           1 :                 *b_max = FIX_MAX;
   18960             :                 return 1;
   18961           1 :         case 39:
   18962           1 :                 *AType = 0;
   18963           1 :                 *QType = 0;
   18964           1 :                 *b_min = FIX_MIN;
   18965           1 :                 *b_max = FIX_MAX;
   18966             :                 return 1;
   18967           1 :         case 40:
   18968           1 :                 *AType = 0;
   18969           1 :                 *QType = 0;
   18970           1 :                 *b_min = FIX_MIN;
   18971           1 :                 *b_max = FIX_MAX;
   18972             :                 return 1;
   18973           1 :         case 41:
   18974           1 :                 *AType = 0;
   18975           1 :                 *QType = 0;
   18976           1 :                 *b_min = FIX_MIN;
   18977           1 :                 *b_max = FIX_MAX;
   18978             :                 return 1;
   18979           1 :         case 42:
   18980           1 :                 *AType = 0;
   18981           1 :                 *QType = 0;
   18982           1 :                 *b_min = FIX_MIN;
   18983           1 :                 *b_max = FIX_MAX;
   18984             :                 return 1;
   18985           1 :         case 43:
   18986           1 :                 *AType = 0;
   18987           1 :                 *QType = 0;
   18988           1 :                 *b_min = FIX_MIN;
   18989           1 :                 *b_max = FIX_MAX;
   18990             :                 return 1;
   18991           1 :         case 44:
   18992           1 :                 *AType = 0;
   18993           1 :                 *QType = 0;
   18994           1 :                 *b_min = FIX_MIN;
   18995           1 :                 *b_max = FIX_MAX;
   18996             :                 return 1;
   18997           1 :         case 45:
   18998           1 :                 *AType = 0;
   18999           1 :                 *QType = 0;
   19000           1 :                 *b_min = FIX_MIN;
   19001           1 :                 *b_max = FIX_MAX;
   19002             :                 return 1;
   19003           1 :         case 46:
   19004           1 :                 *AType = 0;
   19005           1 :                 *QType = 0;
   19006           1 :                 *b_min = FIX_MIN;
   19007           1 :                 *b_max = FIX_MAX;
   19008             :                 return 1;
   19009           1 :         case 47:
   19010           1 :                 *AType = 0;
   19011           1 :                 *QType = 0;
   19012           1 :                 *b_min = FIX_MIN;
   19013           1 :                 *b_max = FIX_MAX;
   19014             :                 return 1;
   19015           1 :         case 48:
   19016           1 :                 *AType = 0;
   19017           1 :                 *QType = 0;
   19018           1 :                 *b_min = FIX_MIN;
   19019           1 :                 *b_max = FIX_MAX;
   19020             :                 return 1;
   19021           1 :         case 49:
   19022           1 :                 *AType = 0;
   19023           1 :                 *QType = 0;
   19024           1 :                 *b_min = FIX_MIN;
   19025           1 :                 *b_max = FIX_MAX;
   19026             :                 return 1;
   19027           1 :         case 50:
   19028           1 :                 *AType = 0;
   19029           1 :                 *QType = 0;
   19030           1 :                 *b_min = FIX_MIN;
   19031           1 :                 *b_max = FIX_MAX;
   19032             :                 return 1;
   19033           1 :         case 51:
   19034           1 :                 *AType = 0;
   19035           1 :                 *QType = 0;
   19036           1 :                 *b_min = FIX_MIN;
   19037           1 :                 *b_max = FIX_MAX;
   19038             :                 return 1;
   19039           1 :         case 52:
   19040           1 :                 *AType = 0;
   19041           1 :                 *QType = 0;
   19042           1 :                 *b_min = FIX_MIN;
   19043           1 :                 *b_max = FIX_MAX;
   19044             :                 return 1;
   19045           1 :         case 53:
   19046           1 :                 *AType = 0;
   19047           1 :                 *QType = 0;
   19048           1 :                 *b_min = FIX_MIN;
   19049           1 :                 *b_max = FIX_MAX;
   19050             :                 return 1;
   19051           1 :         case 54:
   19052           1 :                 *AType = 0;
   19053           1 :                 *QType = 0;
   19054           1 :                 *b_min = FIX_MIN;
   19055           1 :                 *b_max = FIX_MAX;
   19056             :                 return 1;
   19057           1 :         case 55:
   19058           1 :                 *AType = 0;
   19059           1 :                 *QType = 0;
   19060           1 :                 *b_min = FIX_MIN;
   19061           1 :                 *b_max = FIX_MAX;
   19062             :                 return 1;
   19063           1 :         case 56:
   19064           1 :                 *AType = 0;
   19065           1 :                 *QType = 0;
   19066           1 :                 *b_min = FIX_MIN;
   19067           1 :                 *b_max = FIX_MAX;
   19068             :                 return 1;
   19069           1 :         case 57:
   19070           1 :                 *AType = 0;
   19071           1 :                 *QType = 0;
   19072           1 :                 *b_min = FIX_MIN;
   19073           1 :                 *b_max = FIX_MAX;
   19074             :                 return 1;
   19075           1 :         case 58:
   19076           1 :                 *AType = 0;
   19077           1 :                 *QType = 0;
   19078           1 :                 *b_min = FIX_MIN;
   19079           1 :                 *b_max = FIX_MAX;
   19080             :                 return 1;
   19081           1 :         case 59:
   19082           1 :                 *AType = 0;
   19083           1 :                 *QType = 0;
   19084           1 :                 *b_min = FIX_MIN;
   19085           1 :                 *b_max = FIX_MAX;
   19086             :                 return 1;
   19087           1 :         case 60:
   19088           1 :                 *AType = 0;
   19089           1 :                 *QType = 0;
   19090           1 :                 *b_min = FIX_MIN;
   19091           1 :                 *b_max = FIX_MAX;
   19092             :                 return 1;
   19093           1 :         case 61:
   19094           1 :                 *AType = 0;
   19095           1 :                 *QType = 0;
   19096           1 :                 *b_min = FIX_MIN;
   19097           1 :                 *b_max = FIX_MAX;
   19098             :                 return 1;
   19099           1 :         case 62:
   19100           1 :                 *AType = 0;
   19101           1 :                 *QType = 0;
   19102           1 :                 *b_min = FIX_MIN;
   19103           1 :                 *b_max = FIX_MAX;
   19104             :                 return 1;
   19105           1 :         case 63:
   19106           1 :                 *AType = 0;
   19107           1 :                 *QType = 0;
   19108           1 :                 *b_min = FIX_MIN;
   19109           1 :                 *b_max = FIX_MAX;
   19110             :                 return 1;
   19111           1 :         case 64:
   19112           1 :                 *AType = 0;
   19113           1 :                 *QType = 0;
   19114           1 :                 *b_min = FIX_MIN;
   19115           1 :                 *b_max = FIX_MAX;
   19116             :                 return 1;
   19117           1 :         case 65:
   19118           1 :                 *AType = 0;
   19119           1 :                 *QType = 0;
   19120           1 :                 *b_min = FIX_MIN;
   19121           1 :                 *b_max = FIX_MAX;
   19122             :                 return 1;
   19123           1 :         case 66:
   19124           1 :                 *AType = 0;
   19125           1 :                 *QType = 0;
   19126           1 :                 *b_min = FIX_MIN;
   19127           1 :                 *b_max = FIX_MAX;
   19128             :                 return 1;
   19129           1 :         case 67:
   19130           1 :                 *AType = 0;
   19131           1 :                 *QType = 0;
   19132           1 :                 *b_min = FIX_MIN;
   19133           1 :                 *b_max = FIX_MAX;
   19134             :                 return 1;
   19135           1 :         case 68:
   19136           1 :                 *AType = 0;
   19137           1 :                 *QType = 0;
   19138           1 :                 *b_min = FIX_MIN;
   19139           1 :                 *b_max = FIX_MAX;
   19140             :                 return 1;
   19141           1 :         case 69:
   19142           1 :                 *AType = 0;
   19143           1 :                 *QType = 0;
   19144           1 :                 *b_min = FIX_MIN;
   19145           1 :                 *b_max = FIX_MAX;
   19146             :                 return 1;
   19147           1 :         case 70:
   19148           1 :                 *AType = 0;
   19149           1 :                 *QType = 0;
   19150           1 :                 *b_min = FIX_MIN;
   19151           1 :                 *b_max = FIX_MAX;
   19152             :                 return 1;
   19153           1 :         case 71:
   19154           1 :                 *AType = 0;
   19155           1 :                 *QType = 0;
   19156           1 :                 *b_min = FIX_MIN;
   19157           1 :                 *b_max = FIX_MAX;
   19158             :                 return 1;
   19159           1 :         case 72:
   19160           1 :                 *AType = 0;
   19161           1 :                 *QType = 0;
   19162           1 :                 *b_min = FIX_MIN;
   19163           1 :                 *b_max = FIX_MAX;
   19164             :                 return 1;
   19165           1 :         case 73:
   19166           1 :                 *AType = 0;
   19167           1 :                 *QType = 0;
   19168           1 :                 *b_min = FIX_MIN;
   19169           1 :                 *b_max = FIX_MAX;
   19170             :                 return 1;
   19171           1 :         case 74:
   19172           1 :                 *AType = 0;
   19173           1 :                 *QType = 0;
   19174           1 :                 *b_min = FIX_MIN;
   19175           1 :                 *b_max = FIX_MAX;
   19176             :                 return 1;
   19177           1 :         case 75:
   19178           1 :                 *AType = 0;
   19179           1 :                 *QType = 0;
   19180           1 :                 *b_min = FIX_MIN;
   19181           1 :                 *b_max = FIX_MAX;
   19182             :                 return 1;
   19183           1 :         case 76:
   19184           1 :                 *AType = 0;
   19185           1 :                 *QType = 0;
   19186           1 :                 *b_min = FIX_MIN;
   19187           1 :                 *b_max = FIX_MAX;
   19188             :                 return 1;
   19189           1 :         case 77:
   19190           1 :                 *AType = 0;
   19191           1 :                 *QType = 0;
   19192           1 :                 *b_min = FIX_MIN;
   19193           1 :                 *b_max = FIX_MAX;
   19194             :                 return 1;
   19195           1 :         case 78:
   19196           1 :                 *AType = 0;
   19197           1 :                 *QType = 0;
   19198           1 :                 *b_min = FIX_MIN;
   19199           1 :                 *b_max = FIX_MAX;
   19200             :                 return 1;
   19201           1 :         case 79:
   19202           1 :                 *AType = 0;
   19203           1 :                 *QType = 0;
   19204           1 :                 *b_min = FIX_MIN;
   19205           1 :                 *b_max = FIX_MAX;
   19206             :                 return 1;
   19207           1 :         case 80:
   19208           1 :                 *AType = 0;
   19209           1 :                 *QType = 0;
   19210           1 :                 *b_min = FIX_MIN;
   19211           1 :                 *b_max = FIX_MAX;
   19212             :                 return 1;
   19213           1 :         case 81:
   19214           1 :                 *AType = 0;
   19215           1 :                 *QType = 0;
   19216           1 :                 *b_min = FIX_MIN;
   19217           1 :                 *b_max = FIX_MAX;
   19218             :                 return 1;
   19219           1 :         case 82:
   19220           1 :                 *AType = 0;
   19221           1 :                 *QType = 0;
   19222           1 :                 *b_min = FIX_MIN;
   19223           1 :                 *b_max = FIX_MAX;
   19224             :                 return 1;
   19225           1 :         case 83:
   19226           1 :                 *AType = 0;
   19227           1 :                 *QType = 0;
   19228           1 :                 *b_min = FIX_MIN;
   19229           1 :                 *b_max = FIX_MAX;
   19230             :                 return 1;
   19231           1 :         case 84:
   19232           1 :                 *AType = 0;
   19233           1 :                 *QType = 0;
   19234           1 :                 *b_min = FIX_MIN;
   19235           1 :                 *b_max = FIX_MAX;
   19236             :                 return 1;
   19237           1 :         case 85:
   19238           1 :                 *AType = 0;
   19239           1 :                 *QType = 0;
   19240           1 :                 *b_min = FIX_MIN;
   19241           1 :                 *b_max = FIX_MAX;
   19242             :                 return 1;
   19243           1 :         case 86:
   19244           1 :                 *AType = 0;
   19245           1 :                 *QType = 0;
   19246           1 :                 *b_min = FIX_MIN;
   19247           1 :                 *b_max = FIX_MAX;
   19248             :                 return 1;
   19249           1 :         case 87:
   19250           1 :                 *AType = 0;
   19251           1 :                 *QType = 0;
   19252           1 :                 *b_min = FIX_MIN;
   19253           1 :                 *b_max = FIX_MAX;
   19254             :                 return 1;
   19255           1 :         case 88:
   19256           1 :                 *AType = 0;
   19257           1 :                 *QType = 0;
   19258           1 :                 *b_min = FIX_MIN;
   19259           1 :                 *b_max = FIX_MAX;
   19260             :                 return 1;
   19261           1 :         case 89:
   19262           1 :                 *AType = 0;
   19263           1 :                 *QType = 0;
   19264           1 :                 *b_min = FIX_MIN;
   19265           1 :                 *b_max = FIX_MAX;
   19266             :                 return 1;
   19267           1 :         case 90:
   19268           1 :                 *AType = 0;
   19269           1 :                 *QType = 0;
   19270           1 :                 *b_min = FIX_MIN;
   19271           1 :                 *b_max = FIX_MAX;
   19272             :                 return 1;
   19273           1 :         case 91:
   19274           1 :                 *AType = 0;
   19275           1 :                 *QType = 0;
   19276           1 :                 *b_min = FIX_MIN;
   19277           1 :                 *b_max = FIX_MAX;
   19278             :                 return 1;
   19279           1 :         case 92:
   19280           1 :                 *AType = 0;
   19281           1 :                 *QType = 0;
   19282           1 :                 *b_min = FIX_MIN;
   19283           1 :                 *b_max = FIX_MAX;
   19284             :                 return 1;
   19285           1 :         case 93:
   19286           1 :                 *AType = 0;
   19287           1 :                 *QType = 0;
   19288           1 :                 *b_min = FIX_MIN;
   19289           1 :                 *b_max = FIX_MAX;
   19290             :                 return 1;
   19291           1 :         case 94:
   19292           1 :                 *AType = 0;
   19293           1 :                 *QType = 0;
   19294           1 :                 *b_min = FIX_MIN;
   19295           1 :                 *b_max = FIX_MAX;
   19296             :                 return 1;
   19297           1 :         case 95:
   19298           1 :                 *AType = 0;
   19299           1 :                 *QType = 0;
   19300           1 :                 *b_min = FIX_MIN;
   19301           1 :                 *b_max = FIX_MAX;
   19302             :                 return 1;
   19303           1 :         case 96:
   19304           1 :                 *AType = 0;
   19305           1 :                 *QType = 0;
   19306           1 :                 *b_min = FIX_MIN;
   19307           1 :                 *b_max = FIX_MAX;
   19308             :                 return 1;
   19309           1 :         case 97:
   19310           1 :                 *AType = 0;
   19311           1 :                 *QType = 0;
   19312           1 :                 *b_min = FIX_MIN;
   19313           1 :                 *b_max = FIX_MAX;
   19314             :                 return 1;
   19315           1 :         case 98:
   19316           1 :                 *AType = 0;
   19317           1 :                 *QType = 0;
   19318           1 :                 *b_min = FIX_MIN;
   19319           1 :                 *b_max = FIX_MAX;
   19320             :                 return 1;
   19321           1 :         case 99:
   19322           1 :                 *AType = 0;
   19323           1 :                 *QType = 0;
   19324           1 :                 *b_min = FIX_MIN;
   19325           1 :                 *b_max = FIX_MAX;
   19326             :                 return 1;
   19327           1 :         case 100:
   19328           1 :                 *AType = 0;
   19329           1 :                 *QType = 0;
   19330           1 :                 *b_min = FIX_MIN;
   19331           1 :                 *b_max = FIX_MAX;
   19332             :                 return 1;
   19333           1 :         case 101:
   19334           1 :                 *AType = 0;
   19335           1 :                 *QType = 0;
   19336           1 :                 *b_min = FIX_MIN;
   19337           1 :                 *b_max = FIX_MAX;
   19338             :                 return 1;
   19339           1 :         case 102:
   19340           1 :                 *AType = 0;
   19341           1 :                 *QType = 0;
   19342           1 :                 *b_min = FIX_MIN;
   19343           1 :                 *b_max = FIX_MAX;
   19344             :                 return 1;
   19345           1 :         case 103:
   19346           1 :                 *AType = 0;
   19347           1 :                 *QType = 0;
   19348           1 :                 *b_min = FIX_MIN;
   19349           1 :                 *b_max = FIX_MAX;
   19350             :                 return 1;
   19351           1 :         case 104:
   19352           1 :                 *AType = 0;
   19353           1 :                 *QType = 0;
   19354           1 :                 *b_min = FIX_MIN;
   19355           1 :                 *b_max = FIX_MAX;
   19356             :                 return 1;
   19357           1 :         case 105:
   19358           1 :                 *AType = 0;
   19359           1 :                 *QType = 0;
   19360           1 :                 *b_min = FIX_MIN;
   19361           1 :                 *b_max = FIX_MAX;
   19362             :                 return 1;
   19363           1 :         case 106:
   19364           1 :                 *AType = 0;
   19365           1 :                 *QType = 0;
   19366           1 :                 *b_min = FIX_MIN;
   19367           1 :                 *b_max = FIX_MAX;
   19368             :                 return 1;
   19369           1 :         case 107:
   19370           1 :                 *AType = 0;
   19371           1 :                 *QType = 0;
   19372           1 :                 *b_min = FIX_MIN;
   19373           1 :                 *b_max = FIX_MAX;
   19374             :                 return 1;
   19375           1 :         case 108:
   19376           1 :                 *AType = 0;
   19377           1 :                 *QType = 0;
   19378           1 :                 *b_min = FIX_MIN;
   19379           1 :                 *b_max = FIX_MAX;
   19380             :                 return 1;
   19381           1 :         case 109:
   19382           1 :                 *AType = 0;
   19383           1 :                 *QType = 0;
   19384           1 :                 *b_min = FIX_MIN;
   19385           1 :                 *b_max = FIX_MAX;
   19386             :                 return 1;
   19387           1 :         case 110:
   19388           1 :                 *AType = 0;
   19389           1 :                 *QType = 0;
   19390           1 :                 *b_min = FIX_MIN;
   19391           1 :                 *b_max = FIX_MAX;
   19392             :                 return 1;
   19393           1 :         case 111:
   19394           1 :                 *AType = 0;
   19395           1 :                 *QType = 0;
   19396           1 :                 *b_min = FIX_MIN;
   19397           1 :                 *b_max = FIX_MAX;
   19398             :                 return 1;
   19399           1 :         case 112:
   19400           1 :                 *AType = 0;
   19401           1 :                 *QType = 0;
   19402           1 :                 *b_min = FIX_MIN;
   19403           1 :                 *b_max = FIX_MAX;
   19404             :                 return 1;
   19405           1 :         case 113:
   19406           1 :                 *AType = 0;
   19407           1 :                 *QType = 0;
   19408           1 :                 *b_min = FIX_MIN;
   19409           1 :                 *b_max = FIX_MAX;
   19410             :                 return 1;
   19411           1 :         case 114:
   19412           1 :                 *AType = 0;
   19413           1 :                 *QType = 0;
   19414           1 :                 *b_min = FIX_MIN;
   19415           1 :                 *b_max = FIX_MAX;
   19416             :                 return 1;
   19417           1 :         case 115:
   19418           1 :                 *AType = 0;
   19419           1 :                 *QType = 0;
   19420           1 :                 *b_min = FIX_MIN;
   19421           1 :                 *b_max = FIX_MAX;
   19422             :                 return 1;
   19423           1 :         case 116:
   19424           1 :                 *AType = 0;
   19425           1 :                 *QType = 0;
   19426           1 :                 *b_min = FIX_MIN;
   19427           1 :                 *b_max = FIX_MAX;
   19428             :                 return 1;
   19429           1 :         case 117:
   19430           1 :                 *AType = 0;
   19431           1 :                 *QType = 0;
   19432           1 :                 *b_min = FIX_MIN;
   19433           1 :                 *b_max = FIX_MAX;
   19434             :                 return 1;
   19435           1 :         case 118:
   19436           1 :                 *AType = 0;
   19437           1 :                 *QType = 0;
   19438           1 :                 *b_min = FIX_MIN;
   19439           1 :                 *b_max = FIX_MAX;
   19440             :                 return 1;
   19441           1 :         case 119:
   19442           1 :                 *AType = 0;
   19443           1 :                 *QType = 0;
   19444           1 :                 *b_min = FIX_MIN;
   19445           1 :                 *b_max = FIX_MAX;
   19446             :                 return 1;
   19447           1 :         case 120:
   19448           1 :                 *AType = 0;
   19449           1 :                 *QType = 0;
   19450           1 :                 *b_min = FIX_MIN;
   19451           1 :                 *b_max = FIX_MAX;
   19452             :                 return 1;
   19453           1 :         case 121:
   19454           1 :                 *AType = 0;
   19455           1 :                 *QType = 0;
   19456           1 :                 *b_min = FIX_MIN;
   19457           1 :                 *b_max = FIX_MAX;
   19458             :                 return 1;
   19459           1 :         case 122:
   19460           1 :                 *AType = 0;
   19461           1 :                 *QType = 0;
   19462           1 :                 *b_min = FIX_MIN;
   19463           1 :                 *b_max = FIX_MAX;
   19464             :                 return 1;
   19465           1 :         case 123:
   19466           1 :                 *AType = 0;
   19467           1 :                 *QType = 0;
   19468           1 :                 *b_min = FIX_MIN;
   19469           1 :                 *b_max = FIX_MAX;
   19470             :                 return 1;
   19471           1 :         case 124:
   19472           1 :                 *AType = 0;
   19473           1 :                 *QType = 0;
   19474           1 :                 *b_min = FIX_MIN;
   19475           1 :                 *b_max = FIX_MAX;
   19476             :                 return 1;
   19477           1 :         case 125:
   19478           1 :                 *AType = 0;
   19479           1 :                 *QType = 0;
   19480           1 :                 *b_min = FIX_MIN;
   19481           1 :                 *b_max = FIX_MAX;
   19482             :                 return 1;
   19483           1 :         case 126:
   19484           1 :                 *AType = 0;
   19485           1 :                 *QType = 0;
   19486           1 :                 *b_min = FIX_MIN;
   19487           1 :                 *b_max = FIX_MAX;
   19488             :                 return 1;
   19489           1 :         case 127:
   19490           1 :                 *AType = 0;
   19491           1 :                 *QType = 0;
   19492           1 :                 *b_min = FIX_MIN;
   19493           1 :                 *b_max = FIX_MAX;
   19494             :                 return 1;
   19495           1 :         case 128:
   19496           1 :                 *AType = 0;
   19497           1 :                 *QType = 0;
   19498           1 :                 *b_min = FIX_MIN;
   19499           1 :                 *b_max = FIX_MAX;
   19500             :                 return 1;
   19501           1 :         case 129:
   19502           1 :                 *AType = 0;
   19503           1 :                 *QType = 0;
   19504           1 :                 *b_min = FIX_MIN;
   19505           1 :                 *b_max = FIX_MAX;
   19506             :                 return 1;
   19507           1 :         case 130:
   19508           1 :                 *AType = 0;
   19509           1 :                 *QType = 0;
   19510           1 :                 *b_min = FIX_MIN;
   19511           1 :                 *b_max = FIX_MAX;
   19512             :                 return 1;
   19513           1 :         case 131:
   19514           1 :                 *AType = 0;
   19515           1 :                 *QType = 0;
   19516           1 :                 *b_min = FIX_MIN;
   19517           1 :                 *b_max = FIX_MAX;
   19518             :                 return 1;
   19519           1 :         case 132:
   19520           1 :                 *AType = 0;
   19521           1 :                 *QType = 0;
   19522           1 :                 *b_min = FIX_MIN;
   19523           1 :                 *b_max = FIX_MAX;
   19524             :                 return 1;
   19525           1 :         case 133:
   19526           1 :                 *AType = 0;
   19527           1 :                 *QType = 0;
   19528           1 :                 *b_min = FIX_MIN;
   19529           1 :                 *b_max = FIX_MAX;
   19530             :                 return 1;
   19531           1 :         case 134:
   19532           1 :                 *AType = 0;
   19533           1 :                 *QType = 0;
   19534           1 :                 *b_min = FIX_MIN;
   19535           1 :                 *b_max = FIX_MAX;
   19536             :                 return 1;
   19537           1 :         case 135:
   19538           1 :                 *AType = 0;
   19539           1 :                 *QType = 0;
   19540           1 :                 *b_min = FIX_MIN;
   19541           1 :                 *b_max = FIX_MAX;
   19542             :                 return 1;
   19543           1 :         case 136:
   19544           1 :                 *AType = 0;
   19545           1 :                 *QType = 0;
   19546           1 :                 *b_min = FIX_MIN;
   19547           1 :                 *b_max = FIX_MAX;
   19548             :                 return 1;
   19549           1 :         case 137:
   19550           1 :                 *AType = 0;
   19551           1 :                 *QType = 0;
   19552           1 :                 *b_min = FIX_MIN;
   19553           1 :                 *b_max = FIX_MAX;
   19554             :                 return 1;
   19555           1 :         case 138:
   19556           1 :                 *AType = 0;
   19557           1 :                 *QType = 0;
   19558           1 :                 *b_min = FIX_MIN;
   19559           1 :                 *b_max = FIX_MAX;
   19560             :                 return 1;
   19561           1 :         case 139:
   19562           1 :                 *AType = 0;
   19563           1 :                 *QType = 0;
   19564           1 :                 *b_min = FIX_MIN;
   19565           1 :                 *b_max = FIX_MAX;
   19566             :                 return 1;
   19567           1 :         case 140:
   19568           1 :                 *AType = 0;
   19569           1 :                 *QType = 0;
   19570           1 :                 *b_min = FIX_MIN;
   19571           1 :                 *b_max = FIX_MAX;
   19572             :                 return 1;
   19573           1 :         case 141:
   19574           1 :                 *AType = 0;
   19575           1 :                 *QType = 0;
   19576           1 :                 *b_min = FIX_MIN;
   19577           1 :                 *b_max = FIX_MAX;
   19578             :                 return 1;
   19579           1 :         case 142:
   19580           1 :                 *AType = 0;
   19581           1 :                 *QType = 0;
   19582           1 :                 *b_min = FIX_MIN;
   19583           1 :                 *b_max = FIX_MAX;
   19584             :                 return 1;
   19585           1 :         case 143:
   19586           1 :                 *AType = 0;
   19587           1 :                 *QType = 0;
   19588           1 :                 *b_min = FIX_MIN;
   19589           1 :                 *b_max = FIX_MAX;
   19590             :                 return 1;
   19591           1 :         case 144:
   19592           1 :                 *AType = 0;
   19593           1 :                 *QType = 0;
   19594           1 :                 *b_min = FIX_MIN;
   19595           1 :                 *b_max = FIX_MAX;
   19596             :                 return 1;
   19597           1 :         case 145:
   19598           1 :                 *AType = 0;
   19599           1 :                 *QType = 0;
   19600           1 :                 *b_min = FIX_MIN;
   19601           1 :                 *b_max = FIX_MAX;
   19602             :                 return 1;
   19603           1 :         case 146:
   19604           1 :                 *AType = 0;
   19605           1 :                 *QType = 0;
   19606           1 :                 *b_min = FIX_MIN;
   19607           1 :                 *b_max = FIX_MAX;
   19608             :                 return 1;
   19609           1 :         case 147:
   19610           1 :                 *AType = 0;
   19611           1 :                 *QType = 0;
   19612           1 :                 *b_min = FIX_MIN;
   19613           1 :                 *b_max = FIX_MAX;
   19614             :                 return 1;
   19615           1 :         case 148:
   19616           1 :                 *AType = 0;
   19617           1 :                 *QType = 0;
   19618           1 :                 *b_min = FIX_MIN;
   19619           1 :                 *b_max = FIX_MAX;
   19620             :                 return 1;
   19621           1 :         case 149:
   19622           1 :                 *AType = 0;
   19623           1 :                 *QType = 0;
   19624           1 :                 *b_min = FIX_MIN;
   19625           1 :                 *b_max = FIX_MAX;
   19626             :                 return 1;
   19627           1 :         case 150:
   19628           1 :                 *AType = 0;
   19629           1 :                 *QType = 0;
   19630           1 :                 *b_min = FIX_MIN;
   19631           1 :                 *b_max = FIX_MAX;
   19632             :                 return 1;
   19633           1 :         case 151:
   19634           1 :                 *AType = 0;
   19635           1 :                 *QType = 0;
   19636           1 :                 *b_min = FIX_MIN;
   19637           1 :                 *b_max = FIX_MAX;
   19638             :                 return 1;
   19639           1 :         case 152:
   19640           1 :                 *AType = 0;
   19641           1 :                 *QType = 0;
   19642           1 :                 *b_min = FIX_MIN;
   19643           1 :                 *b_max = FIX_MAX;
   19644             :                 return 1;
   19645           1 :         case 153:
   19646           1 :                 *AType = 0;
   19647           1 :                 *QType = 0;
   19648           1 :                 *b_min = FIX_MIN;
   19649           1 :                 *b_max = FIX_MAX;
   19650             :                 return 1;
   19651           1 :         case 154:
   19652           1 :                 *AType = 0;
   19653           1 :                 *QType = 0;
   19654           1 :                 *b_min = FIX_MIN;
   19655           1 :                 *b_max = FIX_MAX;
   19656             :                 return 1;
   19657           1 :         case 155:
   19658           1 :                 *AType = 0;
   19659           1 :                 *QType = 0;
   19660           1 :                 *b_min = FIX_MIN;
   19661           1 :                 *b_max = FIX_MAX;
   19662             :                 return 1;
   19663           1 :         case 156:
   19664           1 :                 *AType = 0;
   19665           1 :                 *QType = 0;
   19666           1 :                 *b_min = FIX_MIN;
   19667           1 :                 *b_max = FIX_MAX;
   19668             :                 return 1;
   19669           1 :         case 157:
   19670           1 :                 *AType = 0;
   19671           1 :                 *QType = 0;
   19672           1 :                 *b_min = FIX_MIN;
   19673           1 :                 *b_max = FIX_MAX;
   19674             :                 return 1;
   19675           1 :         case 158:
   19676           1 :                 *AType = 0;
   19677           1 :                 *QType = 0;
   19678           1 :                 *b_min = FIX_MIN;
   19679           1 :                 *b_max = FIX_MAX;
   19680             :                 return 1;
   19681           1 :         case 159:
   19682           1 :                 *AType = 0;
   19683           1 :                 *QType = 0;
   19684           1 :                 *b_min = FIX_MIN;
   19685           1 :                 *b_max = FIX_MAX;
   19686             :                 return 1;
   19687           1 :         case 160:
   19688           1 :                 *AType = 0;
   19689           1 :                 *QType = 0;
   19690           1 :                 *b_min = FIX_MIN;
   19691           1 :                 *b_max = FIX_MAX;
   19692             :                 return 1;
   19693           1 :         case 161:
   19694           1 :                 *AType = 0;
   19695           1 :                 *QType = 0;
   19696           1 :                 *b_min = FIX_MIN;
   19697           1 :                 *b_max = FIX_MAX;
   19698             :                 return 1;
   19699           1 :         case 162:
   19700           1 :                 *AType = 0;
   19701           1 :                 *QType = 0;
   19702           1 :                 *b_min = FIX_MIN;
   19703           1 :                 *b_max = FIX_MAX;
   19704             :                 return 1;
   19705           1 :         case 163:
   19706           1 :                 *AType = 0;
   19707           1 :                 *QType = 0;
   19708           1 :                 *b_min = FIX_MIN;
   19709           1 :                 *b_max = FIX_MAX;
   19710             :                 return 1;
   19711           1 :         case 164:
   19712           1 :                 *AType = 0;
   19713           1 :                 *QType = 0;
   19714           1 :                 *b_min = FIX_MIN;
   19715           1 :                 *b_max = FIX_MAX;
   19716             :                 return 1;
   19717           1 :         case 165:
   19718           1 :                 *AType = 0;
   19719           1 :                 *QType = 0;
   19720           1 :                 *b_min = FIX_MIN;
   19721           1 :                 *b_max = FIX_MAX;
   19722             :                 return 1;
   19723           1 :         case 166:
   19724           1 :                 *AType = 0;
   19725           1 :                 *QType = 0;
   19726           1 :                 *b_min = FIX_MIN;
   19727           1 :                 *b_max = FIX_MAX;
   19728             :                 return 1;
   19729           1 :         case 167:
   19730           1 :                 *AType = 0;
   19731           1 :                 *QType = 0;
   19732           1 :                 *b_min = FIX_MIN;
   19733           1 :                 *b_max = FIX_MAX;
   19734             :                 return 1;
   19735           1 :         case 168:
   19736           1 :                 *AType = 0;
   19737           1 :                 *QType = 0;
   19738           1 :                 *b_min = FIX_MIN;
   19739           1 :                 *b_max = FIX_MAX;
   19740             :                 return 1;
   19741           1 :         case 169:
   19742           1 :                 *AType = 0;
   19743           1 :                 *QType = 0;
   19744           1 :                 *b_min = FIX_MIN;
   19745           1 :                 *b_max = FIX_MAX;
   19746             :                 return 1;
   19747           1 :         case 170:
   19748           1 :                 *AType = 0;
   19749           1 :                 *QType = 0;
   19750           1 :                 *b_min = FIX_MIN;
   19751           1 :                 *b_max = FIX_MAX;
   19752             :                 return 1;
   19753           1 :         case 171:
   19754           1 :                 *AType = 0;
   19755           1 :                 *QType = 0;
   19756           1 :                 *b_min = FIX_MIN;
   19757           1 :                 *b_max = FIX_MAX;
   19758             :                 return 1;
   19759           1 :         case 172:
   19760           1 :                 *AType = 0;
   19761           1 :                 *QType = 0;
   19762           1 :                 *b_min = FIX_MIN;
   19763           1 :                 *b_max = FIX_MAX;
   19764             :                 return 1;
   19765           1 :         case 173:
   19766           1 :                 *AType = 0;
   19767           1 :                 *QType = 0;
   19768           1 :                 *b_min = FIX_MIN;
   19769           1 :                 *b_max = FIX_MAX;
   19770             :                 return 1;
   19771           1 :         case 174:
   19772           1 :                 *AType = 0;
   19773           1 :                 *QType = 0;
   19774           1 :                 *b_min = FIX_MIN;
   19775           1 :                 *b_max = FIX_MAX;
   19776             :                 return 1;
   19777           1 :         case 175:
   19778           1 :                 *AType = 0;
   19779           1 :                 *QType = 0;
   19780           1 :                 *b_min = FIX_MIN;
   19781           1 :                 *b_max = FIX_MAX;
   19782             :                 return 1;
   19783           1 :         case 176:
   19784           1 :                 *AType = 0;
   19785           1 :                 *QType = 0;
   19786           1 :                 *b_min = FIX_MIN;
   19787           1 :                 *b_max = FIX_MAX;
   19788             :                 return 1;
   19789           1 :         case 177:
   19790           1 :                 *AType = 0;
   19791           1 :                 *QType = 0;
   19792           1 :                 *b_min = FIX_MIN;
   19793           1 :                 *b_max = FIX_MAX;
   19794             :                 return 1;
   19795           1 :         case 178:
   19796           1 :                 *AType = 0;
   19797           1 :                 *QType = 0;
   19798           1 :                 *b_min = FIX_MIN;
   19799           1 :                 *b_max = FIX_MAX;
   19800             :                 return 1;
   19801           1 :         case 179:
   19802           1 :                 *AType = 0;
   19803           1 :                 *QType = 0;
   19804           1 :                 *b_min = FIX_MIN;
   19805           1 :                 *b_max = FIX_MAX;
   19806             :                 return 1;
   19807           1 :         case 180:
   19808           1 :                 *AType = 0;
   19809           1 :                 *QType = 0;
   19810           1 :                 *b_min = FIX_MIN;
   19811           1 :                 *b_max = FIX_MAX;
   19812             :                 return 1;
   19813           1 :         case 181:
   19814           1 :                 *AType = 0;
   19815           1 :                 *QType = 0;
   19816           1 :                 *b_min = FIX_MIN;
   19817           1 :                 *b_max = FIX_MAX;
   19818             :                 return 1;
   19819           1 :         case 182:
   19820           1 :                 *AType = 0;
   19821           1 :                 *QType = 0;
   19822           1 :                 *b_min = FIX_MIN;
   19823           1 :                 *b_max = FIX_MAX;
   19824             :                 return 1;
   19825           1 :         case 183:
   19826           1 :                 *AType = 0;
   19827           1 :                 *QType = 0;
   19828           1 :                 *b_min = FIX_MIN;
   19829           1 :                 *b_max = FIX_MAX;
   19830             :                 return 1;
   19831           1 :         case 184:
   19832           1 :                 *AType = 0;
   19833           1 :                 *QType = 0;
   19834           1 :                 *b_min = FIX_MIN;
   19835           1 :                 *b_max = FIX_MAX;
   19836             :                 return 1;
   19837           1 :         case 185:
   19838           1 :                 *AType = 0;
   19839           1 :                 *QType = 0;
   19840           1 :                 *b_min = FIX_MIN;
   19841           1 :                 *b_max = FIX_MAX;
   19842             :                 return 1;
   19843           1 :         case 186:
   19844           1 :                 *AType = 0;
   19845           1 :                 *QType = 0;
   19846           1 :                 *b_min = FIX_MIN;
   19847           1 :                 *b_max = FIX_MAX;
   19848             :                 return 1;
   19849           1 :         case 187:
   19850           1 :                 *AType = 0;
   19851           1 :                 *QType = 0;
   19852           1 :                 *b_min = FIX_MIN;
   19853           1 :                 *b_max = FIX_MAX;
   19854             :                 return 1;
   19855           1 :         case 188:
   19856           1 :                 *AType = 0;
   19857           1 :                 *QType = 0;
   19858           1 :                 *b_min = FIX_MIN;
   19859           1 :                 *b_max = FIX_MAX;
   19860             :                 return 1;
   19861           1 :         case 189:
   19862           1 :                 *AType = 0;
   19863           1 :                 *QType = 0;
   19864           1 :                 *b_min = FIX_MIN;
   19865           1 :                 *b_max = FIX_MAX;
   19866             :                 return 1;
   19867           1 :         case 190:
   19868           1 :                 *AType = 0;
   19869           1 :                 *QType = 0;
   19870           1 :                 *b_min = FIX_MIN;
   19871           1 :                 *b_max = FIX_MAX;
   19872             :                 return 1;
   19873           1 :         case 191:
   19874           1 :                 *AType = 0;
   19875           1 :                 *QType = 0;
   19876           1 :                 *b_min = FIX_MIN;
   19877           1 :                 *b_max = FIX_MAX;
   19878             :                 return 1;
   19879           1 :         case 192:
   19880           1 :                 *AType = 0;
   19881           1 :                 *QType = 0;
   19882           1 :                 *b_min = FIX_MIN;
   19883           1 :                 *b_max = FIX_MAX;
   19884             :                 return 1;
   19885           1 :         case 193:
   19886           1 :                 *AType = 0;
   19887           1 :                 *QType = 0;
   19888           1 :                 *b_min = FIX_MIN;
   19889           1 :                 *b_max = FIX_MAX;
   19890             :                 return 1;
   19891           1 :         case 194:
   19892           1 :                 *AType = 0;
   19893           1 :                 *QType = 0;
   19894           1 :                 *b_min = FIX_MIN;
   19895           1 :                 *b_max = FIX_MAX;
   19896             :                 return 1;
   19897           1 :         case 195:
   19898           1 :                 *AType = 0;
   19899           1 :                 *QType = 0;
   19900           1 :                 *b_min = FIX_MIN;
   19901           1 :                 *b_max = FIX_MAX;
   19902             :                 return 1;
   19903           1 :         case 196:
   19904           1 :                 *AType = 0;
   19905           1 :                 *QType = 0;
   19906           1 :                 *b_min = FIX_MIN;
   19907           1 :                 *b_max = FIX_MAX;
   19908             :                 return 1;
   19909           1 :         case 197:
   19910           1 :                 *AType = 0;
   19911           1 :                 *QType = 0;
   19912           1 :                 *b_min = FIX_MIN;
   19913           1 :                 *b_max = FIX_MAX;
   19914             :                 return 1;
   19915           1 :         case 198:
   19916           1 :                 *AType = 0;
   19917           1 :                 *QType = 0;
   19918           1 :                 *b_min = FIX_MIN;
   19919           1 :                 *b_max = FIX_MAX;
   19920             :                 return 1;
   19921           1 :         case 199:
   19922           1 :                 *AType = 0;
   19923           1 :                 *QType = 0;
   19924           1 :                 *b_min = FIX_MIN;
   19925           1 :                 *b_max = FIX_MAX;
   19926             :                 return 1;
   19927           1 :         case 200:
   19928           1 :                 *AType = 0;
   19929           1 :                 *QType = 0;
   19930           1 :                 *b_min = FIX_MIN;
   19931           1 :                 *b_max = FIX_MAX;
   19932             :                 return 1;
   19933           1 :         case 201:
   19934           1 :                 *AType = 0;
   19935           1 :                 *QType = 0;
   19936           1 :                 *b_min = FIX_MIN;
   19937           1 :                 *b_max = FIX_MAX;
   19938             :                 return 1;
   19939           1 :         case 202:
   19940           1 :                 *AType = 0;
   19941           1 :                 *QType = 0;
   19942           1 :                 *b_min = FIX_MIN;
   19943           1 :                 *b_max = FIX_MAX;
   19944             :                 return 1;
   19945           1 :         case 203:
   19946           1 :                 *AType = 0;
   19947           1 :                 *QType = 0;
   19948           1 :                 *b_min = FIX_MIN;
   19949           1 :                 *b_max = FIX_MAX;
   19950             :                 return 1;
   19951           1 :         case 204:
   19952           1 :                 *AType = 0;
   19953           1 :                 *QType = 0;
   19954           1 :                 *b_min = FIX_MIN;
   19955           1 :                 *b_max = FIX_MAX;
   19956             :                 return 1;
   19957           1 :         case 205:
   19958           1 :                 *AType = 0;
   19959           1 :                 *QType = 0;
   19960           1 :                 *b_min = FIX_MIN;
   19961           1 :                 *b_max = FIX_MAX;
   19962             :                 return 1;
   19963           1 :         case 206:
   19964           1 :                 *AType = 0;
   19965           1 :                 *QType = 0;
   19966           1 :                 *b_min = FIX_MIN;
   19967           1 :                 *b_max = FIX_MAX;
   19968             :                 return 1;
   19969           1 :         case 207:
   19970           1 :                 *AType = 0;
   19971           1 :                 *QType = 0;
   19972           1 :                 *b_min = FIX_MIN;
   19973           1 :                 *b_max = FIX_MAX;
   19974             :                 return 1;
   19975           1 :         case 208:
   19976           1 :                 *AType = 0;
   19977           1 :                 *QType = 0;
   19978           1 :                 *b_min = FIX_MIN;
   19979           1 :                 *b_max = FIX_MAX;
   19980             :                 return 1;
   19981           1 :         case 209:
   19982           1 :                 *AType = 0;
   19983           1 :                 *QType = 0;
   19984           1 :                 *b_min = FIX_MIN;
   19985           1 :                 *b_max = FIX_MAX;
   19986             :                 return 1;
   19987           1 :         case 210:
   19988           1 :                 *AType = 0;
   19989           1 :                 *QType = 0;
   19990           1 :                 *b_min = FIX_MIN;
   19991           1 :                 *b_max = FIX_MAX;
   19992             :                 return 1;
   19993           1 :         case 211:
   19994           1 :                 *AType = 0;
   19995           1 :                 *QType = 0;
   19996           1 :                 *b_min = FIX_MIN;
   19997           1 :                 *b_max = FIX_MAX;
   19998             :                 return 1;
   19999           1 :         case 212:
   20000           1 :                 *AType = 0;
   20001           1 :                 *QType = 0;
   20002           1 :                 *b_min = FIX_MIN;
   20003           1 :                 *b_max = FIX_MAX;
   20004             :                 return 1;
   20005           1 :         case 213:
   20006           1 :                 *AType = 0;
   20007           1 :                 *QType = 0;
   20008           1 :                 *b_min = FIX_MIN;
   20009           1 :                 *b_max = FIX_MAX;
   20010             :                 return 1;
   20011           1 :         case 214:
   20012           1 :                 *AType = 0;
   20013           1 :                 *QType = 0;
   20014           1 :                 *b_min = FIX_MIN;
   20015           1 :                 *b_max = FIX_MAX;
   20016             :                 return 1;
   20017           1 :         case 215:
   20018           1 :                 *AType = 0;
   20019           1 :                 *QType = 0;
   20020           1 :                 *b_min = FIX_MIN;
   20021           1 :                 *b_max = FIX_MAX;
   20022             :                 return 1;
   20023           1 :         case 216:
   20024           1 :                 *AType = 0;
   20025           1 :                 *QType = 0;
   20026           1 :                 *b_min = FIX_MIN;
   20027           1 :                 *b_max = FIX_MAX;
   20028             :                 return 1;
   20029           1 :         case 217:
   20030           1 :                 *AType = 0;
   20031           1 :                 *QType = 0;
   20032           1 :                 *b_min = FIX_MIN;
   20033           1 :                 *b_max = FIX_MAX;
   20034             :                 return 1;
   20035           1 :         case 218:
   20036           1 :                 *AType = 0;
   20037           1 :                 *QType = 0;
   20038           1 :                 *b_min = FIX_MIN;
   20039           1 :                 *b_max = FIX_MAX;
   20040             :                 return 1;
   20041           1 :         case 219:
   20042           1 :                 *AType = 0;
   20043           1 :                 *QType = 0;
   20044           1 :                 *b_min = FIX_MIN;
   20045           1 :                 *b_max = FIX_MAX;
   20046             :                 return 1;
   20047           1 :         case 220:
   20048           1 :                 *AType = 0;
   20049           1 :                 *QType = 0;
   20050           1 :                 *b_min = FIX_MIN;
   20051           1 :                 *b_max = FIX_MAX;
   20052             :                 return 1;
   20053           1 :         case 221:
   20054           1 :                 *AType = 0;
   20055           1 :                 *QType = 0;
   20056           1 :                 *b_min = FIX_MIN;
   20057           1 :                 *b_max = FIX_MAX;
   20058             :                 return 1;
   20059           1 :         case 222:
   20060           1 :                 *AType = 0;
   20061           1 :                 *QType = 0;
   20062           1 :                 *b_min = FIX_MIN;
   20063           1 :                 *b_max = FIX_MAX;
   20064             :                 return 1;
   20065           1 :         case 223:
   20066           1 :                 *AType = 0;
   20067           1 :                 *QType = 0;
   20068           1 :                 *b_min = FIX_MIN;
   20069           1 :                 *b_max = FIX_MAX;
   20070             :                 return 1;
   20071           1 :         case 224:
   20072           1 :                 *AType = 0;
   20073           1 :                 *QType = 0;
   20074           1 :                 *b_min = FIX_MIN;
   20075           1 :                 *b_max = FIX_MAX;
   20076             :                 return 1;
   20077           1 :         case 225:
   20078           1 :                 *AType = 0;
   20079           1 :                 *QType = 0;
   20080           1 :                 *b_min = FIX_MIN;
   20081           1 :                 *b_max = FIX_MAX;
   20082             :                 return 1;
   20083           1 :         case 226:
   20084           1 :                 *AType = 0;
   20085           1 :                 *QType = 0;
   20086           1 :                 *b_min = FIX_MIN;
   20087           1 :                 *b_max = FIX_MAX;
   20088             :                 return 1;
   20089           1 :         case 227:
   20090           1 :                 *AType = 0;
   20091           1 :                 *QType = 0;
   20092           1 :                 *b_min = FIX_MIN;
   20093           1 :                 *b_max = FIX_MAX;
   20094             :                 return 1;
   20095           1 :         case 228:
   20096           1 :                 *AType = 0;
   20097           1 :                 *QType = 0;
   20098           1 :                 *b_min = FIX_MIN;
   20099           1 :                 *b_max = FIX_MAX;
   20100             :                 return 1;
   20101           1 :         case 229:
   20102           1 :                 *AType = 0;
   20103           1 :                 *QType = 0;
   20104           1 :                 *b_min = FIX_MIN;
   20105           1 :                 *b_max = FIX_MAX;
   20106             :                 return 1;
   20107           1 :         case 230:
   20108           1 :                 *AType = 0;
   20109           1 :                 *QType = 0;
   20110           1 :                 *b_min = FIX_MIN;
   20111           1 :                 *b_max = FIX_MAX;
   20112             :                 return 1;
   20113           1 :         case 231:
   20114           1 :                 *AType = 0;
   20115           1 :                 *QType = 0;
   20116           1 :                 *b_min = FIX_MIN;
   20117           1 :                 *b_max = FIX_MAX;
   20118             :                 return 1;
   20119           1 :         case 232:
   20120           1 :                 *AType = 0;
   20121           1 :                 *QType = 0;
   20122           1 :                 *b_min = FIX_MIN;
   20123           1 :                 *b_max = FIX_MAX;
   20124             :                 return 1;
   20125           1 :         case 233:
   20126           1 :                 *AType = 0;
   20127           1 :                 *QType = 0;
   20128           1 :                 *b_min = FIX_MIN;
   20129           1 :                 *b_max = FIX_MAX;
   20130             :                 return 1;
   20131           1 :         case 234:
   20132           1 :                 *AType = 0;
   20133           1 :                 *QType = 0;
   20134           1 :                 *b_min = FIX_MIN;
   20135           1 :                 *b_max = FIX_MAX;
   20136             :                 return 1;
   20137           1 :         case 235:
   20138           1 :                 *AType = 0;
   20139           1 :                 *QType = 0;
   20140           1 :                 *b_min = FIX_MIN;
   20141           1 :                 *b_max = FIX_MAX;
   20142             :                 return 1;
   20143           1 :         case 236:
   20144           1 :                 *AType = 0;
   20145           1 :                 *QType = 0;
   20146           1 :                 *b_min = FIX_MIN;
   20147           1 :                 *b_max = FIX_MAX;
   20148             :                 return 1;
   20149           1 :         case 237:
   20150           1 :                 *AType = 0;
   20151           1 :                 *QType = 0;
   20152           1 :                 *b_min = FIX_MIN;
   20153           1 :                 *b_max = FIX_MAX;
   20154             :                 return 1;
   20155           1 :         case 238:
   20156           1 :                 *AType = 0;
   20157           1 :                 *QType = 0;
   20158           1 :                 *b_min = FIX_MIN;
   20159           1 :                 *b_max = FIX_MAX;
   20160             :                 return 1;
   20161           1 :         case 239:
   20162           1 :                 *AType = 0;
   20163           1 :                 *QType = 0;
   20164           1 :                 *b_min = FIX_MIN;
   20165           1 :                 *b_max = FIX_MAX;
   20166             :                 return 1;
   20167           1 :         case 240:
   20168           1 :                 *AType = 0;
   20169           1 :                 *QType = 0;
   20170           1 :                 *b_min = FIX_MIN;
   20171           1 :                 *b_max = FIX_MAX;
   20172             :                 return 1;
   20173           1 :         case 241:
   20174           1 :                 *AType = 0;
   20175           1 :                 *QType = 0;
   20176           1 :                 *b_min = FIX_MIN;
   20177           1 :                 *b_max = FIX_MAX;
   20178             :                 return 1;
   20179           1 :         case 242:
   20180           1 :                 *AType = 0;
   20181           1 :                 *QType = 0;
   20182           1 :                 *b_min = FIX_MIN;
   20183           1 :                 *b_max = FIX_MAX;
   20184             :                 return 1;
   20185           1 :         case 243:
   20186           1 :                 *AType = 0;
   20187           1 :                 *QType = 0;
   20188           1 :                 *b_min = FIX_MIN;
   20189           1 :                 *b_max = FIX_MAX;
   20190             :                 return 1;
   20191           1 :         case 244:
   20192           1 :                 *AType = 0;
   20193           1 :                 *QType = 0;
   20194           1 :                 *b_min = FIX_MIN;
   20195           1 :                 *b_max = FIX_MAX;
   20196             :                 return 1;
   20197           1 :         case 245:
   20198           1 :                 *AType = 0;
   20199           1 :                 *QType = 0;
   20200           1 :                 *b_min = FIX_MIN;
   20201           1 :                 *b_max = FIX_MAX;
   20202             :                 return 1;
   20203           1 :         case 246:
   20204           1 :                 *AType = 0;
   20205           1 :                 *QType = 0;
   20206           1 :                 *b_min = FIX_MIN;
   20207           1 :                 *b_max = FIX_MAX;
   20208             :                 return 1;
   20209           1 :         case 247:
   20210           1 :                 *AType = 0;
   20211           1 :                 *QType = 0;
   20212           1 :                 *b_min = FIX_MIN;
   20213           1 :                 *b_max = FIX_MAX;
   20214             :                 return 1;
   20215           1 :         case 248:
   20216           1 :                 *AType = 0;
   20217           1 :                 *QType = 0;
   20218           1 :                 *b_min = FIX_MIN;
   20219           1 :                 *b_max = FIX_MAX;
   20220             :                 return 1;
   20221           1 :         case 249:
   20222           1 :                 *AType = 0;
   20223           1 :                 *QType = 0;
   20224           1 :                 *b_min = FIX_MIN;
   20225           1 :                 *b_max = FIX_MAX;
   20226             :                 return 1;
   20227           1 :         case 250:
   20228           1 :                 *AType = 0;
   20229           1 :                 *QType = 0;
   20230           1 :                 *b_min = FIX_MIN;
   20231           1 :                 *b_max = FIX_MAX;
   20232             :                 return 1;
   20233           1 :         case 251:
   20234           1 :                 *AType = 0;
   20235           1 :                 *QType = 0;
   20236           1 :                 *b_min = FIX_MIN;
   20237           1 :                 *b_max = FIX_MAX;
   20238             :                 return 1;
   20239           1 :         case 252:
   20240           1 :                 *AType = 0;
   20241           1 :                 *QType = 0;
   20242           1 :                 *b_min = FIX_MIN;
   20243           1 :                 *b_max = FIX_MAX;
   20244             :                 return 1;
   20245           1 :         case 253:
   20246           1 :                 *AType = 0;
   20247           1 :                 *QType = 0;
   20248           1 :                 *b_min = FIX_MIN;
   20249           1 :                 *b_max = FIX_MAX;
   20250             :                 return 1;
   20251           1 :         case 254:
   20252           1 :                 *AType = 0;
   20253           1 :                 *QType = 0;
   20254           1 :                 *b_min = FIX_MIN;
   20255           1 :                 *b_max = FIX_MAX;
   20256             :                 return 1;
   20257           1 :         case 255:
   20258           1 :                 *AType = 0;
   20259           1 :                 *QType = 0;
   20260           1 :                 *b_min = FIX_MIN;
   20261           1 :                 *b_max = FIX_MAX;
   20262             :                 return 1;
   20263           1 :         case 256:
   20264           1 :                 *AType = 0;
   20265           1 :                 *QType = 0;
   20266           1 :                 *b_min = FIX_MIN;
   20267           1 :                 *b_max = FIX_MAX;
   20268             :                 return 1;
   20269           1 :         case 257:
   20270           1 :                 *AType = 0;
   20271           1 :                 *QType = 0;
   20272           1 :                 *b_min = FIX_MIN;
   20273           1 :                 *b_max = FIX_MAX;
   20274             :                 return 1;
   20275           1 :         case 258:
   20276           1 :                 *AType = 0;
   20277           1 :                 *QType = 0;
   20278           1 :                 *b_min = FIX_MIN;
   20279           1 :                 *b_max = FIX_MAX;
   20280             :                 return 1;
   20281           1 :         case 259:
   20282           1 :                 *AType = 0;
   20283           1 :                 *QType = 0;
   20284           1 :                 *b_min = FIX_MIN;
   20285           1 :                 *b_max = FIX_MAX;
   20286             :                 return 1;
   20287           1 :         case 260:
   20288           1 :                 *AType = 0;
   20289           1 :                 *QType = 0;
   20290           1 :                 *b_min = FIX_MIN;
   20291           1 :                 *b_max = FIX_MAX;
   20292             :                 return 1;
   20293           1 :         case 261:
   20294           1 :                 *AType = 0;
   20295           1 :                 *QType = 0;
   20296           1 :                 *b_min = FIX_MIN;
   20297           1 :                 *b_max = FIX_MAX;
   20298             :                 return 1;
   20299           1 :         case 262:
   20300           1 :                 *AType = 0;
   20301           1 :                 *QType = 0;
   20302           1 :                 *b_min = FIX_MIN;
   20303           1 :                 *b_max = FIX_MAX;
   20304             :                 return 1;
   20305           1 :         case 263:
   20306           1 :                 *AType = 0;
   20307           1 :                 *QType = 0;
   20308           1 :                 *b_min = FIX_MIN;
   20309           1 :                 *b_max = FIX_MAX;
   20310             :                 return 1;
   20311           1 :         case 264:
   20312           1 :                 *AType = 0;
   20313           1 :                 *QType = 0;
   20314           1 :                 *b_min = FIX_MIN;
   20315           1 :                 *b_max = FIX_MAX;
   20316             :                 return 1;
   20317           1 :         case 265:
   20318           1 :                 *AType = 0;
   20319           1 :                 *QType = 0;
   20320           1 :                 *b_min = FIX_MIN;
   20321           1 :                 *b_max = FIX_MAX;
   20322             :                 return 1;
   20323           1 :         case 266:
   20324           1 :                 *AType = 0;
   20325           1 :                 *QType = 0;
   20326           1 :                 *b_min = FIX_MIN;
   20327           1 :                 *b_max = FIX_MAX;
   20328             :                 return 1;
   20329           1 :         case 267:
   20330           1 :                 *AType = 0;
   20331           1 :                 *QType = 0;
   20332           1 :                 *b_min = FIX_MIN;
   20333           1 :                 *b_max = FIX_MAX;
   20334             :                 return 1;
   20335           1 :         case 268:
   20336           1 :                 *AType = 0;
   20337           1 :                 *QType = 0;
   20338           1 :                 *b_min = FIX_MIN;
   20339           1 :                 *b_max = FIX_MAX;
   20340             :                 return 1;
   20341           1 :         case 269:
   20342           1 :                 *AType = 0;
   20343           1 :                 *QType = 0;
   20344           1 :                 *b_min = FIX_MIN;
   20345           1 :                 *b_max = FIX_MAX;
   20346             :                 return 1;
   20347           1 :         case 270:
   20348           1 :                 *AType = 0;
   20349           1 :                 *QType = 0;
   20350           1 :                 *b_min = FIX_MIN;
   20351           1 :                 *b_max = FIX_MAX;
   20352             :                 return 1;
   20353           1 :         case 271:
   20354           1 :                 *AType = 0;
   20355           1 :                 *QType = 0;
   20356           1 :                 *b_min = FIX_MIN;
   20357           1 :                 *b_max = FIX_MAX;
   20358             :                 return 1;
   20359           1 :         case 272:
   20360           1 :                 *AType = 0;
   20361           1 :                 *QType = 0;
   20362           1 :                 *b_min = FIX_MIN;
   20363           1 :                 *b_max = FIX_MAX;
   20364             :                 return 1;
   20365           1 :         case 273:
   20366           1 :                 *AType = 0;
   20367           1 :                 *QType = 0;
   20368           1 :                 *b_min = FIX_MIN;
   20369           1 :                 *b_max = FIX_MAX;
   20370             :                 return 1;
   20371           1 :         case 274:
   20372           1 :                 *AType = 0;
   20373           1 :                 *QType = 0;
   20374           1 :                 *b_min = FIX_MIN;
   20375           1 :                 *b_max = FIX_MAX;
   20376             :                 return 1;
   20377           1 :         case 275:
   20378           1 :                 *AType = 0;
   20379           1 :                 *QType = 0;
   20380           1 :                 *b_min = FIX_MIN;
   20381           1 :                 *b_max = FIX_MAX;
   20382             :                 return 1;
   20383           1 :         case 276:
   20384           1 :                 *AType = 0;
   20385           1 :                 *QType = 0;
   20386           1 :                 *b_min = FIX_MIN;
   20387           1 :                 *b_max = FIX_MAX;
   20388             :                 return 1;
   20389           1 :         case 277:
   20390           1 :                 *AType = 0;
   20391           1 :                 *QType = 0;
   20392           1 :                 *b_min = FIX_MIN;
   20393           1 :                 *b_max = FIX_MAX;
   20394             :                 return 1;
   20395           1 :         case 278:
   20396           1 :                 *AType = 0;
   20397           1 :                 *QType = 0;
   20398           1 :                 *b_min = FIX_MIN;
   20399           1 :                 *b_max = FIX_MAX;
   20400             :                 return 1;
   20401           1 :         case 279:
   20402           1 :                 *AType = 0;
   20403           1 :                 *QType = 0;
   20404           1 :                 *b_min = FIX_MIN;
   20405           1 :                 *b_max = FIX_MAX;
   20406             :                 return 1;
   20407           1 :         case 280:
   20408           1 :                 *AType = 0;
   20409           1 :                 *QType = 0;
   20410           1 :                 *b_min = FIX_MIN;
   20411           1 :                 *b_max = FIX_MAX;
   20412             :                 return 1;
   20413           1 :         case 281:
   20414           1 :                 *AType = 0;
   20415           1 :                 *QType = 0;
   20416           1 :                 *b_min = FIX_MIN;
   20417           1 :                 *b_max = FIX_MAX;
   20418             :                 return 1;
   20419           1 :         case 282:
   20420           1 :                 *AType = 0;
   20421           1 :                 *QType = 0;
   20422           1 :                 *b_min = FIX_MIN;
   20423           1 :                 *b_max = FIX_MAX;
   20424             :                 return 1;
   20425           1 :         case 283:
   20426           1 :                 *AType = 0;
   20427           1 :                 *QType = 0;
   20428           1 :                 *b_min = FIX_MIN;
   20429           1 :                 *b_max = FIX_MAX;
   20430             :                 return 1;
   20431           1 :         case 284:
   20432           1 :                 *AType = 0;
   20433           1 :                 *QType = 0;
   20434           1 :                 *b_min = FIX_MIN;
   20435           1 :                 *b_max = FIX_MAX;
   20436             :                 return 1;
   20437           1 :         case 285:
   20438           1 :                 *AType = 0;
   20439           1 :                 *QType = 0;
   20440           1 :                 *b_min = FIX_MIN;
   20441           1 :                 *b_max = FIX_MAX;
   20442             :                 return 1;
   20443           1 :         case 286:
   20444           1 :                 *AType = 0;
   20445           1 :                 *QType = 0;
   20446           1 :                 *b_min = FIX_MIN;
   20447           1 :                 *b_max = FIX_MAX;
   20448             :                 return 1;
   20449           1 :         case 287:
   20450           1 :                 *AType = 0;
   20451           1 :                 *QType = 0;
   20452           1 :                 *b_min = FIX_MIN;
   20453           1 :                 *b_max = FIX_MAX;
   20454             :                 return 1;
   20455           1 :         case 288:
   20456           1 :                 *AType = 0;
   20457           1 :                 *QType = 0;
   20458           1 :                 *b_min = FIX_MIN;
   20459           1 :                 *b_max = FIX_MAX;
   20460             :                 return 1;
   20461           1 :         case 289:
   20462           1 :                 *AType = 0;
   20463           1 :                 *QType = 0;
   20464           1 :                 *b_min = FIX_MIN;
   20465           1 :                 *b_max = FIX_MAX;
   20466             :                 return 1;
   20467           1 :         case 290:
   20468           1 :                 *AType = 0;
   20469           1 :                 *QType = 0;
   20470           1 :                 *b_min = FIX_MIN;
   20471           1 :                 *b_max = FIX_MAX;
   20472             :                 return 1;
   20473           1 :         case 291:
   20474           1 :                 *AType = 0;
   20475           1 :                 *QType = 0;
   20476           1 :                 *b_min = FIX_MIN;
   20477           1 :                 *b_max = FIX_MAX;
   20478             :                 return 1;
   20479           1 :         case 292:
   20480           1 :                 *AType = 0;
   20481           1 :                 *QType = 0;
   20482           1 :                 *b_min = FIX_MIN;
   20483           1 :                 *b_max = FIX_MAX;
   20484             :                 return 1;
   20485           1 :         case 293:
   20486           1 :                 *AType = 0;
   20487           1 :                 *QType = 0;
   20488           1 :                 *b_min = FIX_MIN;
   20489           1 :                 *b_max = FIX_MAX;
   20490             :                 return 1;
   20491           1 :         case 294:
   20492           1 :                 *AType = 0;
   20493           1 :                 *QType = 0;
   20494           1 :                 *b_min = FIX_MIN;
   20495           1 :                 *b_max = FIX_MAX;
   20496             :                 return 1;
   20497           1 :         case 295:
   20498           1 :                 *AType = 0;
   20499           1 :                 *QType = 0;
   20500           1 :                 *b_min = FIX_MIN;
   20501           1 :                 *b_max = FIX_MAX;
   20502             :                 return 1;
   20503             :         default:
   20504             :                 return 0;
   20505             :         }
   20506             : }
   20507             : 
   20508             : 
   20509             : 
   20510           1 : GF_Node *BAP_Create()
   20511             : {
   20512             :         M_BAP *p;
   20513           1 :         GF_SAFEALLOC(p, M_BAP);
   20514           1 :         if(!p) return NULL;
   20515           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BAP);
   20516             : 
   20517             :         /*default field values*/
   20518           1 :         p->sacroiliac_tilt = 0x80000000;
   20519           1 :         p->sacroiliac_torsion = 0x80000000;
   20520           1 :         p->sacroiliac_roll = 0x80000000;
   20521           1 :         p->l_hip_flexion = 0x80000000;
   20522           1 :         p->r_hip_flexion = 0x80000000;
   20523           1 :         p->l_hip_abduct = 0x80000000;
   20524           1 :         p->r_hip_abduct = 0x80000000;
   20525           1 :         p->l_hip_twisting = 0x80000000;
   20526           1 :         p->r_hip_twisting = 0x80000000;
   20527           1 :         p->l_knee_flexion = 0x80000000;
   20528           1 :         p->r_knee_flexion = 0x80000000;
   20529           1 :         p->l_knee_twisting = 0x80000000;
   20530           1 :         p->r_knee_twisting = 0x80000000;
   20531           1 :         p->l_ankle_flexion = 0x80000000;
   20532           1 :         p->r_ankle_flexion = 0x80000000;
   20533           1 :         p->l_ankle_twisting = 0x80000000;
   20534           1 :         p->r_ankle_twisting = 0x80000000;
   20535           1 :         p->l_subtalar_flexion = 0x80000000;
   20536           1 :         p->r_subtalar_flexion = 0x80000000;
   20537           1 :         p->l_midtarsal_flexion = 0x80000000;
   20538           1 :         p->r_midtarsal_flexion = 0x80000000;
   20539           1 :         p->l_metatarsal_flexion = 0x80000000;
   20540           1 :         p->r_metatarsal_flexion = 0x80000000;
   20541           1 :         p->l_sternoclavicular_abduct = 0x80000000;
   20542           1 :         p->r_sternoclavicular_abduct = 0x80000000;
   20543           1 :         p->l_sternoclavicular_rotate = 0x80000000;
   20544           1 :         p->r_sternoclavicular_rotate = 0x80000000;
   20545           1 :         p->l_acromioclavicular_abduct = 0x80000000;
   20546           1 :         p->r_acromioclavicular_abduct = 0x80000000;
   20547           1 :         p->l_acromioclavicular_rotate = 0x80000000;
   20548           1 :         p->r_acromioclavicular_rotate = 0x80000000;
   20549           1 :         p->l_shoulder_flexion = 0x80000000;
   20550           1 :         p->r_shoulder_flexion = 0x80000000;
   20551           1 :         p->l_shoulder_abduct = 0x80000000;
   20552           1 :         p->r_shoulder_abduct = 0x80000000;
   20553           1 :         p->l_shoulder_twisting = 0x80000000;
   20554           1 :         p->r_shoulder_twisting = 0x80000000;
   20555           1 :         p->l_elbow_flexion = 0x80000000;
   20556           1 :         p->r_elbow_flexion = 0x80000000;
   20557           1 :         p->l_elbow_twisting = 0x80000000;
   20558           1 :         p->r_elbow_twisting = 0x80000000;
   20559           1 :         p->l_wrist_flexion = 0x80000000;
   20560           1 :         p->r_wrist_flexion = 0x80000000;
   20561           1 :         p->l_wrist_pivot = 0x80000000;
   20562           1 :         p->r_wrist_pivot = 0x80000000;
   20563           1 :         p->l_wrist_twisting = 0x80000000;
   20564           1 :         p->r_wrist_twisting = 0x80000000;
   20565           1 :         p->skullbase_roll = 0x80000000;
   20566           1 :         p->skullbase_torsion = 0x80000000;
   20567           1 :         p->skullbase_tilt = 0x80000000;
   20568           1 :         p->vc1roll = 0x80000000;
   20569           1 :         p->vc1torsion = 0x80000000;
   20570           1 :         p->vc1tilt = 0x80000000;
   20571           1 :         p->vc2roll = 0x80000000;
   20572           1 :         p->vc2torsion = 0x80000000;
   20573           1 :         p->vc2tilt = 0x80000000;
   20574           1 :         p->vc3roll = 0x80000000;
   20575           1 :         p->vc3torsion = 0x80000000;
   20576           1 :         p->vc3tilt = 0x80000000;
   20577           1 :         p->vc4roll = 0x80000000;
   20578           1 :         p->vc4torsion = 0x80000000;
   20579           1 :         p->vc4tilt = 0x80000000;
   20580           1 :         p->vc5roll = 0x80000000;
   20581           1 :         p->vc5torsion = 0x80000000;
   20582           1 :         p->vc5tilt = 0x80000000;
   20583           1 :         p->vc6roll = 0x80000000;
   20584           1 :         p->vc6torsion = 0x80000000;
   20585           1 :         p->vc6tilt = 0x80000000;
   20586           1 :         p->vc7roll = 0x80000000;
   20587           1 :         p->vc7torsion = 0x80000000;
   20588           1 :         p->vc7tilt = 0x80000000;
   20589           1 :         p->vt1roll = 0x80000000;
   20590           1 :         p->vt1torsion = 0x80000000;
   20591           1 :         p->vt1tilt = 0x80000000;
   20592           1 :         p->vt2roll = 0x80000000;
   20593           1 :         p->vt2torsion = 0x80000000;
   20594           1 :         p->vt2tilt = 0x80000000;
   20595           1 :         p->vt3roll = 0x80000000;
   20596           1 :         p->vt3torsion = 0x80000000;
   20597           1 :         p->vt3tilt = 0x80000000;
   20598           1 :         p->vt4roll = 0x80000000;
   20599           1 :         p->vt4torsion = 0x80000000;
   20600           1 :         p->vt4tilt = 0x80000000;
   20601           1 :         p->vt5roll = 0x80000000;
   20602           1 :         p->vt5torsion = 0x80000000;
   20603           1 :         p->vt5tilt = 0x80000000;
   20604           1 :         p->vt6roll = 0x80000000;
   20605           1 :         p->vt6torsion = 0x80000000;
   20606           1 :         p->vt6tilt = 0x80000000;
   20607           1 :         p->vt7roll = 0x80000000;
   20608           1 :         p->vt7torsion = 0x80000000;
   20609           1 :         p->vt7tilt = 0x80000000;
   20610           1 :         p->vt8roll = 0x80000000;
   20611           1 :         p->vt8torsion = 0x80000000;
   20612           1 :         p->vt8tilt = 0x80000000;
   20613           1 :         p->vt9roll = 0x80000000;
   20614           1 :         p->vt9torsion = 0x80000000;
   20615           1 :         p->vt9tilt = 0x80000000;
   20616           1 :         p->vt10roll = 0x80000000;
   20617           1 :         p->vt10torsion = 0x80000000;
   20618           1 :         p->vt10tilt = 0x80000000;
   20619           1 :         p->vt11roll = 0x80000000;
   20620           1 :         p->vt11torsion = 0x80000000;
   20621           1 :         p->vt11tilt = 0x80000000;
   20622           1 :         p->vt12roll = 0x80000000;
   20623           1 :         p->vt12torsion = 0x80000000;
   20624           1 :         p->vt12tilt = 0x80000000;
   20625           1 :         p->vl1roll = 0x80000000;
   20626           1 :         p->vl1torsion = 0x80000000;
   20627           1 :         p->vl1tilt = 0x80000000;
   20628           1 :         p->vl2roll = 0x80000000;
   20629           1 :         p->vl2torsion = 0x80000000;
   20630           1 :         p->vl2tilt = 0x80000000;
   20631           1 :         p->vl3roll = 0x80000000;
   20632           1 :         p->vl3torsion = 0x80000000;
   20633           1 :         p->vl3tilt = 0x80000000;
   20634           1 :         p->vl4roll = 0x80000000;
   20635           1 :         p->vl4torsion = 0x80000000;
   20636           1 :         p->vl4tilt = 0x80000000;
   20637           1 :         p->vl5roll = 0x80000000;
   20638           1 :         p->vl5torsion = 0x80000000;
   20639           1 :         p->vl5tilt = 0x80000000;
   20640           1 :         p->l_pinky0_flexion = 0x80000000;
   20641           1 :         p->r_pinky0_flexion = 0x80000000;
   20642           1 :         p->l_pinky1_flexion = 0x80000000;
   20643           1 :         p->r_pinky1_flexion = 0x80000000;
   20644           1 :         p->l_pinky1_pivot = 0x80000000;
   20645           1 :         p->r_pinky1_pivot = 0x80000000;
   20646           1 :         p->l_pinky1_twisting = 0x80000000;
   20647           1 :         p->r_pinky1_twisting = 0x80000000;
   20648           1 :         p->l_pinky2_flexion = 0x80000000;
   20649           1 :         p->r_pinky2_flexion = 0x80000000;
   20650           1 :         p->l_pinky3_flexion = 0x80000000;
   20651           1 :         p->r_pinky3_flexion = 0x80000000;
   20652           1 :         p->l_ring0_flexion = 0x80000000;
   20653           1 :         p->r_ring0_flexion = 0x80000000;
   20654           1 :         p->l_ring1_flexion = 0x80000000;
   20655           1 :         p->r_ring1_flexion = 0x80000000;
   20656           1 :         p->l_ring1_pivot = 0x80000000;
   20657           1 :         p->r_ring1_pivot = 0x80000000;
   20658           1 :         p->l_ring1_twisting = 0x80000000;
   20659           1 :         p->r_ring1_twisting = 0x80000000;
   20660           1 :         p->l_ring2_flexion = 0x80000000;
   20661           1 :         p->r_ring2_flexion = 0x80000000;
   20662           1 :         p->l_ring3_flexion = 0x80000000;
   20663           1 :         p->r_ring3_flexion = 0x80000000;
   20664           1 :         p->l_middle0_flexion = 0x80000000;
   20665           1 :         p->r_middle0_flexion = 0x80000000;
   20666           1 :         p->l_middle1_flexion = 0x80000000;
   20667           1 :         p->r_middle1_flexion = 0x80000000;
   20668           1 :         p->l_middle1_pivot = 0x80000000;
   20669           1 :         p->r_middle1_pivot = 0x80000000;
   20670           1 :         p->l_middle1_twisting = 0x80000000;
   20671           1 :         p->r_middle1_twisting = 0x80000000;
   20672           1 :         p->l_middle2_flexion = 0x80000000;
   20673           1 :         p->r_middle2_flexion = 0x80000000;
   20674           1 :         p->l_middle3_flexion = 0x80000000;
   20675           1 :         p->r_middle3_flexion = 0x80000000;
   20676           1 :         p->l_index0_flexion = 0x80000000;
   20677           1 :         p->r_index0_flexion = 0x80000000;
   20678           1 :         p->l_index1_flexion = 0x80000000;
   20679           1 :         p->r_index1_flexion = 0x80000000;
   20680           1 :         p->l_index1_pivot = 0x80000000;
   20681           1 :         p->r_index1_pivot = 0x80000000;
   20682           1 :         p->l_index1_twisting = 0x80000000;
   20683           1 :         p->r_index1_twisting = 0x80000000;
   20684           1 :         p->l_index2_flexion = 0x80000000;
   20685           1 :         p->r_index2_flexion = 0x80000000;
   20686           1 :         p->l_index3_flexion = 0x80000000;
   20687           1 :         p->r_index3_flexion = 0x80000000;
   20688           1 :         p->l_thumb1_flexion = 0x80000000;
   20689           1 :         p->r_thumb1_flexion = 0x80000000;
   20690           1 :         p->l_thumb1_pivot = 0x80000000;
   20691           1 :         p->r_thumb1_pivot = 0x80000000;
   20692           1 :         p->l_thumb1_twisting = 0x80000000;
   20693           1 :         p->r_thumb1_twisting = 0x80000000;
   20694           1 :         p->l_thumb2_flexion = 0x80000000;
   20695           1 :         p->r_thumb2_flexion = 0x80000000;
   20696           1 :         p->l_thumb3_flexion = 0x80000000;
   20697           1 :         p->r_thumb3_flexion = 0x80000000;
   20698           1 :         p->HumanoidRoot_tr_vertical = 0x80000000;
   20699           1 :         p->HumanoidRoot_tr_lateral = 0x80000000;
   20700           1 :         p->HumanoidRoot_tr_frontal = 0x80000000;
   20701           1 :         p->HumanoidRoot_rt_body_turn = 0x80000000;
   20702           1 :         p->HumanoidRoot_rt_body_roll = 0x80000000;
   20703           1 :         p->HumanoidRoot_rt_body_tilt = 0x80000000;
   20704           1 :         p->extensionBap187 = 0x80000000;
   20705           1 :         p->extensionBap188 = 0x80000000;
   20706           1 :         p->extensionBap189 = 0x80000000;
   20707           1 :         p->extensionBap190 = 0x80000000;
   20708           1 :         p->extensionBap191 = 0x80000000;
   20709           1 :         p->extensionBap192 = 0x80000000;
   20710           1 :         p->extensionBap193 = 0x80000000;
   20711           1 :         p->extensionBap194 = 0x80000000;
   20712           1 :         p->extensionBap195 = 0x80000000;
   20713           1 :         p->extensionBap196 = 0x80000000;
   20714           1 :         p->extensionBap197 = 0x80000000;
   20715           1 :         p->extensionBap198 = 0x80000000;
   20716           1 :         p->extensionBap199 = 0x80000000;
   20717           1 :         p->extensionBap200 = 0x80000000;
   20718           1 :         p->extensionBap201 = 0x80000000;
   20719           1 :         p->extensionBap202 = 0x80000000;
   20720           1 :         p->extensionBap203 = 0x80000000;
   20721           1 :         p->extensionBap204 = 0x80000000;
   20722           1 :         p->extensionBap205 = 0x80000000;
   20723           1 :         p->extensionBap206 = 0x80000000;
   20724           1 :         p->extensionBap207 = 0x80000000;
   20725           1 :         p->extensionBap208 = 0x80000000;
   20726           1 :         p->extensionBap209 = 0x80000000;
   20727           1 :         p->extensionBap210 = 0x80000000;
   20728           1 :         p->extensionBap211 = 0x80000000;
   20729           1 :         p->extensionBap212 = 0x80000000;
   20730           1 :         p->extensionBap213 = 0x80000000;
   20731           1 :         p->extensionBap214 = 0x80000000;
   20732           1 :         p->extensionBap215 = 0x80000000;
   20733           1 :         p->extensionBap216 = 0x80000000;
   20734           1 :         p->extensionBap217 = 0x80000000;
   20735           1 :         p->extensionBap218 = 0x80000000;
   20736           1 :         p->extensionBap219 = 0x80000000;
   20737           1 :         p->extensionBap220 = 0x80000000;
   20738           1 :         p->extensionBap221 = 0x80000000;
   20739           1 :         p->extensionBap222 = 0x80000000;
   20740           1 :         p->extensionBap223 = 0x80000000;
   20741           1 :         p->extensionBap224 = 0x80000000;
   20742           1 :         p->extensionBap225 = 0x80000000;
   20743           1 :         p->extensionBap226 = 0x80000000;
   20744           1 :         p->extensionBap227 = 0x80000000;
   20745           1 :         p->extensionBap228 = 0x80000000;
   20746           1 :         p->extensionBap229 = 0x80000000;
   20747           1 :         p->extensionBap230 = 0x80000000;
   20748           1 :         p->extensionBap231 = 0x80000000;
   20749           1 :         p->extensionBap232 = 0x80000000;
   20750           1 :         p->extensionBap233 = 0x80000000;
   20751           1 :         p->extensionBap234 = 0x80000000;
   20752           1 :         p->extensionBap235 = 0x80000000;
   20753           1 :         p->extensionBap236 = 0x80000000;
   20754           1 :         p->extensionBap237 = 0x80000000;
   20755           1 :         p->extensionBap238 = 0x80000000;
   20756           1 :         p->extensionBap239 = 0x80000000;
   20757           1 :         p->extensionBap240 = 0x80000000;
   20758           1 :         p->extensionBap241 = 0x80000000;
   20759           1 :         p->extensionBap242 = 0x80000000;
   20760           1 :         p->extensionBap243 = 0x80000000;
   20761           1 :         p->extensionBap244 = 0x80000000;
   20762           1 :         p->extensionBap245 = 0x80000000;
   20763           1 :         p->extensionBap246 = 0x80000000;
   20764           1 :         p->extensionBap247 = 0x80000000;
   20765           1 :         p->extensionBap248 = 0x80000000;
   20766           1 :         p->extensionBap249 = 0x80000000;
   20767           1 :         p->extensionBap250 = 0x80000000;
   20768           1 :         p->extensionBap251 = 0x80000000;
   20769           1 :         p->extensionBap252 = 0x80000000;
   20770           1 :         p->extensionBap253 = 0x80000000;
   20771           1 :         p->extensionBap254 = 0x80000000;
   20772           1 :         p->extensionBap255 = 0x80000000;
   20773           1 :         p->extensionBap256 = 0x80000000;
   20774           1 :         p->extensionBap257 = 0x80000000;
   20775           1 :         p->extensionBap258 = 0x80000000;
   20776           1 :         p->extensionBap259 = 0x80000000;
   20777           1 :         p->extensionBap260 = 0x80000000;
   20778           1 :         p->extensionBap261 = 0x80000000;
   20779           1 :         p->extensionBap262 = 0x80000000;
   20780           1 :         p->extensionBap263 = 0x80000000;
   20781           1 :         p->extensionBap264 = 0x80000000;
   20782           1 :         p->extensionBap265 = 0x80000000;
   20783           1 :         p->extensionBap266 = 0x80000000;
   20784           1 :         p->extensionBap267 = 0x80000000;
   20785           1 :         p->extensionBap268 = 0x80000000;
   20786           1 :         p->extensionBap269 = 0x80000000;
   20787           1 :         p->extensionBap270 = 0x80000000;
   20788           1 :         p->extensionBap271 = 0x80000000;
   20789           1 :         p->extensionBap272 = 0x80000000;
   20790           1 :         p->extensionBap273 = 0x80000000;
   20791           1 :         p->extensionBap274 = 0x80000000;
   20792           1 :         p->extensionBap275 = 0x80000000;
   20793           1 :         p->extensionBap276 = 0x80000000;
   20794           1 :         p->extensionBap277 = 0x80000000;
   20795           1 :         p->extensionBap278 = 0x80000000;
   20796           1 :         p->extensionBap279 = 0x80000000;
   20797           1 :         p->extensionBap280 = 0x80000000;
   20798           1 :         p->extensionBap281 = 0x80000000;
   20799           1 :         p->extensionBap282 = 0x80000000;
   20800           1 :         p->extensionBap283 = 0x80000000;
   20801           1 :         p->extensionBap284 = 0x80000000;
   20802           1 :         p->extensionBap285 = 0x80000000;
   20803           1 :         p->extensionBap286 = 0x80000000;
   20804           1 :         p->extensionBap287 = 0x80000000;
   20805           1 :         p->extensionBap288 = 0x80000000;
   20806           1 :         p->extensionBap289 = 0x80000000;
   20807           1 :         p->extensionBap290 = 0x80000000;
   20808           1 :         p->extensionBap291 = 0x80000000;
   20809           1 :         p->extensionBap292 = 0x80000000;
   20810           1 :         p->extensionBap293 = 0x80000000;
   20811           1 :         p->extensionBap294 = 0x80000000;
   20812           1 :         p->extensionBap295 = 0x80000000;
   20813           1 :         p->extensionBap296 = 0x80000000;
   20814           1 :         return (GF_Node *)p;
   20815             : }
   20816             : 
   20817             : 
   20818             : /*
   20819             :         BDP Node deletion
   20820             : */
   20821             : 
   20822           1 : static void BDP_Del(GF_Node *node)
   20823             : {
   20824             :         M_BDP *p = (M_BDP *) node;
   20825           1 :         gf_node_unregister_children((GF_Node *) p, p->bodyDefTables);
   20826           1 :         gf_node_unregister_children((GF_Node *) p, p->bodySceneGraph);
   20827           1 :         gf_node_free((GF_Node *) p);
   20828           1 : }
   20829             : 
   20830             : static const u16 BDP_Def2All[] = { 0, 1};
   20831             : static const u16 BDP_In2All[] = { 0, 1};
   20832             : static const u16 BDP_Out2All[] = { 0, 1};
   20833             : 
   20834             : static u32 BDP_get_field_count(GF_Node *node, u8 IndexMode)
   20835             : {
   20836           6 :         switch(IndexMode) {
   20837             :         case GF_SG_FIELD_CODING_IN:
   20838             :                 return 2;
   20839             :         case GF_SG_FIELD_CODING_DEF:
   20840             :                 return 2;
   20841             :         case GF_SG_FIELD_CODING_OUT:
   20842             :                 return 2;
   20843           1 :         case GF_SG_FIELD_CODING_DYN:
   20844             :                 return 0;
   20845             :         default:
   20846             :                 return 2;
   20847             :         }
   20848             : }
   20849             : 
   20850             : static GF_Err BDP_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   20851             : {
   20852           2 :         switch(IndexMode) {
   20853           0 :         case GF_SG_FIELD_CODING_IN:
   20854           0 :                 *allField = BDP_In2All[inField];
   20855             :                 return GF_OK;
   20856           0 :         case GF_SG_FIELD_CODING_DEF:
   20857           0 :                 *allField = BDP_Def2All[inField];
   20858             :                 return GF_OK;
   20859           0 :         case GF_SG_FIELD_CODING_OUT:
   20860           0 :                 *allField = BDP_Out2All[inField];
   20861             :                 return GF_OK;
   20862             :         default:
   20863             :                 return GF_BAD_PARAM;
   20864             :         }
   20865             : }
   20866             : static GF_Err BDP_get_field(GF_Node *node, GF_FieldInfo *info)
   20867             : {
   20868           4 :         switch (info->fieldIndex) {
   20869           2 :         case 0:
   20870           2 :                 info->name = "bodyDefTables";
   20871           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20872           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   20873           2 :                 info->NDTtype = NDT_SFBodyDefTableNode;
   20874           2 :                 info->far_ptr = & ((M_BDP *)node)->bodyDefTables;
   20875             :                 return GF_OK;
   20876           2 :         case 1:
   20877           2 :                 info->name = "bodySceneGraph";
   20878           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20879           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   20880           2 :                 info->NDTtype = NDT_SF3DNode;
   20881           2 :                 info->far_ptr = & ((M_BDP *)node)->bodySceneGraph;
   20882             :                 return GF_OK;
   20883             :         default:
   20884             :                 return GF_BAD_PARAM;
   20885             :         }
   20886             : }
   20887             : 
   20888             : 
   20889           2 : static s32 BDP_get_field_index_by_name(char *name)
   20890             : {
   20891           2 :         if (!strcmp("bodyDefTables", name)) return 0;
   20892           1 :         if (!strcmp("bodySceneGraph", name)) return 1;
   20893           0 :         return -1;
   20894             : }
   20895             : static Bool BDP_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   20896             : {
   20897             :         switch (FieldIndex) {
   20898             :         default:
   20899             :                 return 0;
   20900             :         }
   20901             : }
   20902             : 
   20903             : 
   20904             : 
   20905           1 : GF_Node *BDP_Create()
   20906             : {
   20907             :         M_BDP *p;
   20908           1 :         GF_SAFEALLOC(p, M_BDP);
   20909           1 :         if(!p) return NULL;
   20910           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BDP);
   20911             : 
   20912             :         /*default field values*/
   20913           1 :         return (GF_Node *)p;
   20914             : }
   20915             : 
   20916             : 
   20917             : /*
   20918             :         Body Node deletion
   20919             : */
   20920             : 
   20921           1 : static void Body_Del(GF_Node *node)
   20922             : {
   20923             :         M_Body *p = (M_Body *) node;
   20924           1 :         gf_node_unregister((GF_Node *) p->bdp, (GF_Node *) p);
   20925           1 :         gf_node_unregister((GF_Node *) p->bap, (GF_Node *) p);
   20926           1 :         gf_node_unregister_children((GF_Node *) p, p->renderedBody);
   20927           1 :         gf_node_free((GF_Node *) p);
   20928           1 : }
   20929             : 
   20930             : static const u16 Body_Def2All[] = { 0, 1, 2};
   20931             : static const u16 Body_In2All[] = { 0, 1, 2};
   20932             : static const u16 Body_Out2All[] = { 0, 1, 2};
   20933             : 
   20934             : static u32 Body_get_field_count(GF_Node *node, u8 IndexMode)
   20935             : {
   20936           6 :         switch(IndexMode) {
   20937             :         case GF_SG_FIELD_CODING_IN:
   20938             :                 return 3;
   20939             :         case GF_SG_FIELD_CODING_DEF:
   20940             :                 return 3;
   20941             :         case GF_SG_FIELD_CODING_OUT:
   20942             :                 return 3;
   20943           1 :         case GF_SG_FIELD_CODING_DYN:
   20944             :                 return 0;
   20945             :         default:
   20946             :                 return 3;
   20947             :         }
   20948             : }
   20949             : 
   20950             : static GF_Err Body_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   20951             : {
   20952           3 :         switch(IndexMode) {
   20953           0 :         case GF_SG_FIELD_CODING_IN:
   20954           0 :                 *allField = Body_In2All[inField];
   20955             :                 return GF_OK;
   20956           0 :         case GF_SG_FIELD_CODING_DEF:
   20957           0 :                 *allField = Body_Def2All[inField];
   20958             :                 return GF_OK;
   20959           0 :         case GF_SG_FIELD_CODING_OUT:
   20960           0 :                 *allField = Body_Out2All[inField];
   20961             :                 return GF_OK;
   20962             :         default:
   20963             :                 return GF_BAD_PARAM;
   20964             :         }
   20965             : }
   20966             : static GF_Err Body_get_field(GF_Node *node, GF_FieldInfo *info)
   20967             : {
   20968           6 :         switch (info->fieldIndex) {
   20969           2 :         case 0:
   20970           2 :                 info->name = "bdp";
   20971           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20972           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   20973           2 :                 info->NDTtype = NDT_SFBDPNode;
   20974           2 :                 info->far_ptr = & ((M_Body *)node)->bdp;
   20975             :                 return GF_OK;
   20976           2 :         case 1:
   20977           2 :                 info->name = "bap";
   20978           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20979           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   20980           2 :                 info->NDTtype = NDT_SFBAPNode;
   20981           2 :                 info->far_ptr = & ((M_Body *)node)->bap;
   20982             :                 return GF_OK;
   20983           2 :         case 2:
   20984           2 :                 info->name = "renderedBody";
   20985           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   20986           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   20987           2 :                 info->NDTtype = NDT_SF3DNode;
   20988           2 :                 info->far_ptr = & ((M_Body *)node)->renderedBody;
   20989             :                 return GF_OK;
   20990             :         default:
   20991             :                 return GF_BAD_PARAM;
   20992             :         }
   20993             : }
   20994             : 
   20995             : 
   20996           3 : static s32 Body_get_field_index_by_name(char *name)
   20997             : {
   20998           3 :         if (!strcmp("bdp", name)) return 0;
   20999           2 :         if (!strcmp("bap", name)) return 1;
   21000           1 :         if (!strcmp("renderedBody", name)) return 2;
   21001           0 :         return -1;
   21002             : }
   21003             : static Bool Body_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21004             : {
   21005             :         switch (FieldIndex) {
   21006             :         default:
   21007             :                 return 0;
   21008             :         }
   21009             : }
   21010             : 
   21011             : 
   21012             : 
   21013           1 : GF_Node *Body_Create()
   21014             : {
   21015             :         M_Body *p;
   21016           1 :         GF_SAFEALLOC(p, M_Body);
   21017           1 :         if(!p) return NULL;
   21018           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Body);
   21019             : 
   21020             :         /*default field values*/
   21021           1 :         return (GF_Node *)p;
   21022             : }
   21023             : 
   21024             : 
   21025             : /*
   21026             :         BodyDefTable Node deletion
   21027             : */
   21028             : 
   21029           1 : static void BodyDefTable_Del(GF_Node *node)
   21030             : {
   21031             :         M_BodyDefTable *p = (M_BodyDefTable *) node;
   21032           1 :         gf_sg_sfstring_del(p->bodySceneGraphNodeName);
   21033           1 :         gf_sg_mfint32_del(p->bapIDs);
   21034           1 :         gf_sg_mfint32_del(p->vertexIds);
   21035           1 :         gf_sg_mfint32_del(p->bapCombinations);
   21036           1 :         gf_sg_mfvec3f_del(p->displacements);
   21037           1 :         gf_node_free((GF_Node *) p);
   21038           1 : }
   21039             : 
   21040             : static const u16 BodyDefTable_Def2All[] = { 0, 1, 2, 3, 4, 5};
   21041             : static const u16 BodyDefTable_In2All[] = { 0, 1, 2, 3, 4, 5};
   21042             : static const u16 BodyDefTable_Out2All[] = { 0, 1, 2, 3, 4, 5};
   21043             : 
   21044             : static u32 BodyDefTable_get_field_count(GF_Node *node, u8 IndexMode)
   21045             : {
   21046           6 :         switch(IndexMode) {
   21047             :         case GF_SG_FIELD_CODING_IN:
   21048             :                 return 6;
   21049             :         case GF_SG_FIELD_CODING_DEF:
   21050             :                 return 6;
   21051             :         case GF_SG_FIELD_CODING_OUT:
   21052             :                 return 6;
   21053           1 :         case GF_SG_FIELD_CODING_DYN:
   21054             :                 return 0;
   21055             :         default:
   21056             :                 return 6;
   21057             :         }
   21058             : }
   21059             : 
   21060             : static GF_Err BodyDefTable_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21061             : {
   21062           6 :         switch(IndexMode) {
   21063           0 :         case GF_SG_FIELD_CODING_IN:
   21064           0 :                 *allField = BodyDefTable_In2All[inField];
   21065             :                 return GF_OK;
   21066           0 :         case GF_SG_FIELD_CODING_DEF:
   21067           0 :                 *allField = BodyDefTable_Def2All[inField];
   21068             :                 return GF_OK;
   21069           0 :         case GF_SG_FIELD_CODING_OUT:
   21070           0 :                 *allField = BodyDefTable_Out2All[inField];
   21071             :                 return GF_OK;
   21072             :         default:
   21073             :                 return GF_BAD_PARAM;
   21074             :         }
   21075             : }
   21076          12 : static GF_Err BodyDefTable_get_field(GF_Node *node, GF_FieldInfo *info)
   21077             : {
   21078          12 :         switch (info->fieldIndex) {
   21079           2 :         case 0:
   21080           2 :                 info->name = "bodySceneGraphNodeName";
   21081           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21082           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   21083           2 :                 info->far_ptr = & ((M_BodyDefTable *) node)->bodySceneGraphNodeName;
   21084           2 :                 return GF_OK;
   21085           2 :         case 1:
   21086           2 :                 info->name = "bapIDs";
   21087           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21088           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21089           2 :                 info->far_ptr = & ((M_BodyDefTable *) node)->bapIDs;
   21090           2 :                 return GF_OK;
   21091           2 :         case 2:
   21092           2 :                 info->name = "vertexIds";
   21093           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21094           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21095           2 :                 info->far_ptr = & ((M_BodyDefTable *) node)->vertexIds;
   21096           2 :                 return GF_OK;
   21097           2 :         case 3:
   21098           2 :                 info->name = "bapCombinations";
   21099           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21100           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21101           2 :                 info->far_ptr = & ((M_BodyDefTable *) node)->bapCombinations;
   21102           2 :                 return GF_OK;
   21103           2 :         case 4:
   21104           2 :                 info->name = "displacements";
   21105           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21106           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   21107           2 :                 info->far_ptr = & ((M_BodyDefTable *) node)->displacements;
   21108           2 :                 return GF_OK;
   21109           2 :         case 5:
   21110           2 :                 info->name = "numInterpolateKeys";
   21111           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21112           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   21113           2 :                 info->far_ptr = & ((M_BodyDefTable *) node)->numInterpolateKeys;
   21114           2 :                 return GF_OK;
   21115             :         default:
   21116             :                 return GF_BAD_PARAM;
   21117             :         }
   21118             : }
   21119             : 
   21120             : 
   21121           6 : static s32 BodyDefTable_get_field_index_by_name(char *name)
   21122             : {
   21123           6 :         if (!strcmp("bodySceneGraphNodeName", name)) return 0;
   21124           5 :         if (!strcmp("bapIDs", name)) return 1;
   21125           4 :         if (!strcmp("vertexIds", name)) return 2;
   21126           3 :         if (!strcmp("bapCombinations", name)) return 3;
   21127           2 :         if (!strcmp("displacements", name)) return 4;
   21128           1 :         if (!strcmp("numInterpolateKeys", name)) return 5;
   21129           0 :         return -1;
   21130             : }
   21131             : static Bool BodyDefTable_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21132             : {
   21133           6 :         switch (FieldIndex) {
   21134           1 :         case 1:
   21135           1 :                 *AType = 0;
   21136           1 :                 *QType = 13;
   21137           1 :                 *QT13_bits = 9;
   21138           1 :                 *b_min = FLT2FIX(1);
   21139           1 :                 *b_max = FLT2FIX(296);
   21140             :                 return 1;
   21141           1 :         case 2:
   21142           1 :                 *AType = 0;
   21143           1 :                 *QType = 0;
   21144           1 :                 *b_min = FLT2FIX(0);
   21145           1 :                 *b_max = FIX_MAX;
   21146             :                 return 1;
   21147           1 :         case 3:
   21148           1 :                 *AType = 0;
   21149           1 :                 *QType = 0;
   21150           1 :                 *b_min = FIX_MIN;
   21151           1 :                 *b_max = FIX_MAX;
   21152             :                 return 1;
   21153           1 :         case 5:
   21154           1 :                 *AType = 0;
   21155           1 :                 *QType = 0;
   21156           1 :                 *b_min = FLT2FIX(2);
   21157           1 :                 *b_max = FIX_MAX;
   21158             :                 return 1;
   21159             :         default:
   21160             :                 return 0;
   21161             :         }
   21162             : }
   21163             : 
   21164             : 
   21165             : 
   21166           1 : GF_Node *BodyDefTable_Create()
   21167             : {
   21168             :         M_BodyDefTable *p;
   21169           1 :         GF_SAFEALLOC(p, M_BodyDefTable);
   21170           1 :         if(!p) return NULL;
   21171           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BodyDefTable);
   21172             : 
   21173             :         /*default field values*/
   21174           1 :         p->numInterpolateKeys = 2;
   21175           1 :         return (GF_Node *)p;
   21176             : }
   21177             : 
   21178             : 
   21179             : /*
   21180             :         BodySegmentConnectionHint Node deletion
   21181             : */
   21182             : 
   21183           1 : static void BodySegmentConnectionHint_Del(GF_Node *node)
   21184             : {
   21185             :         M_BodySegmentConnectionHint *p = (M_BodySegmentConnectionHint *) node;
   21186           1 :         gf_sg_sfstring_del(p->firstSegmentNodeName);
   21187           1 :         gf_sg_sfstring_del(p->secondSegmentNodeName);
   21188           1 :         gf_sg_mfint32_del(p->firstVertexIdList);
   21189           1 :         gf_sg_mfint32_del(p->secondVertexIdList);
   21190           1 :         gf_node_free((GF_Node *) p);
   21191           1 : }
   21192             : 
   21193             : static const u16 BodySegmentConnectionHint_Def2All[] = { 0, 1, 2, 3};
   21194             : static const u16 BodySegmentConnectionHint_In2All[] = { 0, 1, 2, 3};
   21195             : static const u16 BodySegmentConnectionHint_Out2All[] = { 0, 1, 2, 3};
   21196             : 
   21197             : static u32 BodySegmentConnectionHint_get_field_count(GF_Node *node, u8 IndexMode)
   21198             : {
   21199           6 :         switch(IndexMode) {
   21200             :         case GF_SG_FIELD_CODING_IN:
   21201             :                 return 4;
   21202             :         case GF_SG_FIELD_CODING_DEF:
   21203             :                 return 4;
   21204             :         case GF_SG_FIELD_CODING_OUT:
   21205             :                 return 4;
   21206           1 :         case GF_SG_FIELD_CODING_DYN:
   21207             :                 return 0;
   21208             :         default:
   21209             :                 return 4;
   21210             :         }
   21211             : }
   21212             : 
   21213             : static GF_Err BodySegmentConnectionHint_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21214             : {
   21215           4 :         switch(IndexMode) {
   21216           0 :         case GF_SG_FIELD_CODING_IN:
   21217           0 :                 *allField = BodySegmentConnectionHint_In2All[inField];
   21218             :                 return GF_OK;
   21219           0 :         case GF_SG_FIELD_CODING_DEF:
   21220           0 :                 *allField = BodySegmentConnectionHint_Def2All[inField];
   21221             :                 return GF_OK;
   21222           0 :         case GF_SG_FIELD_CODING_OUT:
   21223           0 :                 *allField = BodySegmentConnectionHint_Out2All[inField];
   21224             :                 return GF_OK;
   21225             :         default:
   21226             :                 return GF_BAD_PARAM;
   21227             :         }
   21228             : }
   21229           8 : static GF_Err BodySegmentConnectionHint_get_field(GF_Node *node, GF_FieldInfo *info)
   21230             : {
   21231           8 :         switch (info->fieldIndex) {
   21232           2 :         case 0:
   21233           2 :                 info->name = "firstSegmentNodeName";
   21234           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21235           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   21236           2 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->firstSegmentNodeName;
   21237           2 :                 return GF_OK;
   21238           2 :         case 1:
   21239           2 :                 info->name = "secondSegmentNodeName";
   21240           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21241           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   21242           2 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->secondSegmentNodeName;
   21243           2 :                 return GF_OK;
   21244           2 :         case 2:
   21245           2 :                 info->name = "firstVertexIdList";
   21246           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21247           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21248           2 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->firstVertexIdList;
   21249           2 :                 return GF_OK;
   21250           2 :         case 3:
   21251           2 :                 info->name = "secondVertexIdList";
   21252           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21253           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   21254           2 :                 info->far_ptr = & ((M_BodySegmentConnectionHint *) node)->secondVertexIdList;
   21255           2 :                 return GF_OK;
   21256             :         default:
   21257             :                 return GF_BAD_PARAM;
   21258             :         }
   21259             : }
   21260             : 
   21261             : 
   21262           4 : static s32 BodySegmentConnectionHint_get_field_index_by_name(char *name)
   21263             : {
   21264           4 :         if (!strcmp("firstSegmentNodeName", name)) return 0;
   21265           3 :         if (!strcmp("secondSegmentNodeName", name)) return 1;
   21266           2 :         if (!strcmp("firstVertexIdList", name)) return 2;
   21267           1 :         if (!strcmp("secondVertexIdList", name)) return 3;
   21268           0 :         return -1;
   21269             : }
   21270             : static Bool BodySegmentConnectionHint_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21271             : {
   21272           4 :         switch (FieldIndex) {
   21273           1 :         case 2:
   21274           1 :                 *AType = 0;
   21275           1 :                 *QType = 0;
   21276           1 :                 *b_min = FLT2FIX(0);
   21277           1 :                 *b_max = FIX_MAX;
   21278             :                 return 1;
   21279           1 :         case 3:
   21280           1 :                 *AType = 0;
   21281           1 :                 *QType = 0;
   21282           1 :                 *b_min = FLT2FIX(0);
   21283           1 :                 *b_max = FIX_MAX;
   21284             :                 return 1;
   21285             :         default:
   21286             :                 return 0;
   21287             :         }
   21288             : }
   21289             : 
   21290             : 
   21291             : 
   21292           1 : GF_Node *BodySegmentConnectionHint_Create()
   21293             : {
   21294             :         M_BodySegmentConnectionHint *p;
   21295           1 :         GF_SAFEALLOC(p, M_BodySegmentConnectionHint);
   21296           1 :         if(!p) return NULL;
   21297           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BodySegmentConnectionHint);
   21298             : 
   21299             :         /*default field values*/
   21300           1 :         return (GF_Node *)p;
   21301             : }
   21302             : 
   21303             : 
   21304             : /*
   21305             :         DirectiveSound Node deletion
   21306             : */
   21307             : 
   21308           1 : static void DirectiveSound_Del(GF_Node *node)
   21309             : {
   21310             :         M_DirectiveSound *p = (M_DirectiveSound *) node;
   21311           1 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   21312           1 :         gf_node_unregister((GF_Node *) p->perceptualParameters, (GF_Node *) p);
   21313           1 :         gf_sg_mffloat_del(p->directivity);
   21314           1 :         gf_sg_mffloat_del(p->angles);
   21315           1 :         gf_sg_mffloat_del(p->frequency);
   21316           1 :         gf_node_free((GF_Node *) p);
   21317           1 : }
   21318             : 
   21319             : static const u16 DirectiveSound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   21320             : static const u16 DirectiveSound_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   21321             : static const u16 DirectiveSound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   21322             : static const u16 DirectiveSound_Dyn2All[] = { 0, 1, 2};
   21323             : 
   21324             : static u32 DirectiveSound_get_field_count(GF_Node *node, u8 IndexMode)
   21325             : {
   21326             :         switch(IndexMode) {
   21327             :         case GF_SG_FIELD_CODING_IN:
   21328             :                 return 7;
   21329             :         case GF_SG_FIELD_CODING_DEF:
   21330             :                 return 13;
   21331             :         case GF_SG_FIELD_CODING_OUT:
   21332             :                 return 7;
   21333             :         case GF_SG_FIELD_CODING_DYN:
   21334             :                 return 3;
   21335             :         default:
   21336             :                 return 13;
   21337             :         }
   21338             : }
   21339             : 
   21340             : static GF_Err DirectiveSound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21341             : {
   21342          13 :         switch(IndexMode) {
   21343           0 :         case GF_SG_FIELD_CODING_IN:
   21344           0 :                 *allField = DirectiveSound_In2All[inField];
   21345             :                 return GF_OK;
   21346           0 :         case GF_SG_FIELD_CODING_DEF:
   21347           0 :                 *allField = DirectiveSound_Def2All[inField];
   21348             :                 return GF_OK;
   21349           0 :         case GF_SG_FIELD_CODING_OUT:
   21350           0 :                 *allField = DirectiveSound_Out2All[inField];
   21351             :                 return GF_OK;
   21352           0 :         case GF_SG_FIELD_CODING_DYN:
   21353           0 :                 *allField = DirectiveSound_Dyn2All[inField];
   21354             :                 return GF_OK;
   21355             :         default:
   21356             :                 return GF_BAD_PARAM;
   21357             :         }
   21358             : }
   21359          26 : static GF_Err DirectiveSound_get_field(GF_Node *node, GF_FieldInfo *info)
   21360             : {
   21361          26 :         switch (info->fieldIndex) {
   21362           2 :         case 0:
   21363           2 :                 info->name = "direction";
   21364           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21365           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   21366           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->direction;
   21367           2 :                 return GF_OK;
   21368           2 :         case 1:
   21369           2 :                 info->name = "intensity";
   21370           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21371           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21372           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->intensity;
   21373           2 :                 return GF_OK;
   21374           2 :         case 2:
   21375           2 :                 info->name = "location";
   21376           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21377           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   21378           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->location;
   21379           2 :                 return GF_OK;
   21380           2 :         case 3:
   21381           2 :                 info->name = "source";
   21382           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21383           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   21384           2 :                 info->NDTtype = NDT_SFAudioNode;
   21385           2 :                 info->far_ptr = & ((M_DirectiveSound *)node)->source;
   21386           2 :                 return GF_OK;
   21387           2 :         case 4:
   21388           2 :                 info->name = "perceptualParameters";
   21389           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21390           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   21391           2 :                 info->NDTtype = NDT_SFPerceptualParameterNode;
   21392           2 :                 info->far_ptr = & ((M_DirectiveSound *)node)->perceptualParameters;
   21393           2 :                 return GF_OK;
   21394           2 :         case 5:
   21395           2 :                 info->name = "roomEffect";
   21396           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21397           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21398           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->roomEffect;
   21399           2 :                 return GF_OK;
   21400           2 :         case 6:
   21401           2 :                 info->name = "spatialize";
   21402           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21403           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21404           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->spatialize;
   21405           2 :                 return GF_OK;
   21406           2 :         case 7:
   21407           2 :                 info->name = "directivity";
   21408           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21409           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21410           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->directivity;
   21411           2 :                 return GF_OK;
   21412           2 :         case 8:
   21413           2 :                 info->name = "angles";
   21414           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21415           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21416           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->angles;
   21417           2 :                 return GF_OK;
   21418           2 :         case 9:
   21419           2 :                 info->name = "frequency";
   21420           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21421           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21422           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->frequency;
   21423           2 :                 return GF_OK;
   21424           2 :         case 10:
   21425           2 :                 info->name = "speedOfSound";
   21426           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21427           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21428           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->speedOfSound;
   21429           2 :                 return GF_OK;
   21430           2 :         case 11:
   21431           2 :                 info->name = "distance";
   21432           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21433           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21434           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->distance;
   21435           2 :                 return GF_OK;
   21436           2 :         case 12:
   21437           2 :                 info->name = "useAirabs";
   21438           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21439           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21440           2 :                 info->far_ptr = & ((M_DirectiveSound *) node)->useAirabs;
   21441           2 :                 return GF_OK;
   21442             :         default:
   21443             :                 return GF_BAD_PARAM;
   21444             :         }
   21445             : }
   21446             : 
   21447             : 
   21448          13 : static s32 DirectiveSound_get_field_index_by_name(char *name)
   21449             : {
   21450          13 :         if (!strcmp("direction", name)) return 0;
   21451          12 :         if (!strcmp("intensity", name)) return 1;
   21452          11 :         if (!strcmp("location", name)) return 2;
   21453          10 :         if (!strcmp("source", name)) return 3;
   21454           9 :         if (!strcmp("perceptualParameters", name)) return 4;
   21455           8 :         if (!strcmp("roomEffect", name)) return 5;
   21456           7 :         if (!strcmp("spatialize", name)) return 6;
   21457           6 :         if (!strcmp("directivity", name)) return 7;
   21458           5 :         if (!strcmp("angles", name)) return 8;
   21459           4 :         if (!strcmp("frequency", name)) return 9;
   21460           3 :         if (!strcmp("speedOfSound", name)) return 10;
   21461           2 :         if (!strcmp("distance", name)) return 11;
   21462           1 :         if (!strcmp("useAirabs", name)) return 12;
   21463           0 :         return -1;
   21464             : }
   21465          13 : static Bool DirectiveSound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21466             : {
   21467          13 :         switch (FieldIndex) {
   21468           1 :         case 0:
   21469           1 :                 *AType = 9;
   21470           1 :                 *QType = 9;
   21471           1 :                 *b_min = FIX_MIN;
   21472           1 :                 *b_max = FIX_MAX;
   21473             :                 return 1;
   21474           1 :         case 1:
   21475           1 :                 *AType = 7;
   21476           1 :                 *QType = 0;
   21477           1 :                 *b_min = FLT2FIX(0);
   21478           1 :                 *b_max = FIX_MAX;
   21479             :                 return 1;
   21480           1 :         case 2:
   21481           1 :                 *AType = 1;
   21482           1 :                 *QType = 1;
   21483           1 :                 *b_min = FIX_MIN;
   21484           1 :                 *b_max = FIX_MAX;
   21485             :                 return 1;
   21486           1 :         case 7:
   21487           1 :                 *AType = 0;
   21488           1 :                 *QType = 0;
   21489           1 :                 *b_min = FIX_MIN;
   21490           1 :                 *b_max = FIX_MAX;
   21491             :                 return 1;
   21492           1 :         case 8:
   21493           1 :                 *AType = 0;
   21494           1 :                 *QType = 6;
   21495           1 :                 *b_min = FLT2FIX(0);
   21496           1 :                 *b_max = FLT2FIX(3.14159265);
   21497             :                 return 1;
   21498           1 :         case 9:
   21499           1 :                 *AType = 0;
   21500           1 :                 *QType = 0;
   21501           1 :                 *b_min = FLT2FIX(0);
   21502           1 :                 *b_max = FIX_MAX;
   21503             :                 return 1;
   21504           1 :         case 10:
   21505           1 :                 *AType = 0;
   21506           1 :                 *QType = 1;
   21507           1 :                 *b_min = FLT2FIX(0);
   21508           1 :                 *b_max = FIX_MAX;
   21509             :                 return 1;
   21510           1 :         case 11:
   21511           1 :                 *AType = 0;
   21512           1 :                 *QType = 0;
   21513           1 :                 *b_min = FLT2FIX(0);
   21514           1 :                 *b_max = FIX_MAX;
   21515             :                 return 1;
   21516             :         default:
   21517             :                 return 0;
   21518             :         }
   21519             : }
   21520             : 
   21521             : 
   21522             : 
   21523           1 : GF_Node *DirectiveSound_Create()
   21524             : {
   21525             :         M_DirectiveSound *p;
   21526           1 :         GF_SAFEALLOC(p, M_DirectiveSound);
   21527           1 :         if(!p) return NULL;
   21528           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DirectiveSound);
   21529             : 
   21530             :         /*default field values*/
   21531           1 :         p->direction.x = FLT2FIX(0);
   21532           1 :         p->direction.y = FLT2FIX(0);
   21533           1 :         p->direction.z = FLT2FIX(-1);
   21534           1 :         p->intensity = FLT2FIX(1);
   21535           1 :         p->location.x = FLT2FIX(0);
   21536           1 :         p->location.y = FLT2FIX(0);
   21537           1 :         p->location.z = FLT2FIX(0);
   21538           1 :         p->spatialize = 1;
   21539           1 :         p->directivity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   21540           1 :         p->directivity.count = 1;
   21541           1 :         p->directivity.vals[0] = FLT2FIX(1);
   21542           1 :         p->angles.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   21543           1 :         p->angles.count = 1;
   21544           1 :         p->angles.vals[0] = FLT2FIX(1);
   21545           1 :         p->speedOfSound = FLT2FIX(340);
   21546           1 :         p->distance = FLT2FIX(100);
   21547           1 :         return (GF_Node *)p;
   21548             : }
   21549             : 
   21550             : 
   21551             : /*
   21552             :         Hierarchical3DMesh Node deletion
   21553             : */
   21554             : 
   21555             : static void Hierarchical3DMesh_Del(GF_Node *node)
   21556             : {
   21557             :         M_Hierarchical3DMesh *p = (M_Hierarchical3DMesh *) node;
   21558           1 :         gf_sg_mfurl_del(p->url);
   21559           1 :         gf_node_free((GF_Node *) p);
   21560             : }
   21561             : 
   21562             : static const u16 Hierarchical3DMesh_Def2All[] = { 1, 2};
   21563             : static const u16 Hierarchical3DMesh_In2All[] = { 0, 1};
   21564             : static const u16 Hierarchical3DMesh_Out2All[] = { 1, 3};
   21565             : 
   21566             : static u32 Hierarchical3DMesh_get_field_count(GF_Node *node, u8 IndexMode)
   21567             : {
   21568           6 :         switch(IndexMode) {
   21569             :         case GF_SG_FIELD_CODING_IN:
   21570             :                 return 2;
   21571             :         case GF_SG_FIELD_CODING_DEF:
   21572             :                 return 2;
   21573             :         case GF_SG_FIELD_CODING_OUT:
   21574             :                 return 2;
   21575           1 :         case GF_SG_FIELD_CODING_DYN:
   21576             :                 return 0;
   21577           2 :         default:
   21578             :                 return 4;
   21579             :         }
   21580             : }
   21581             : 
   21582             : static GF_Err Hierarchical3DMesh_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21583             : {
   21584           4 :         switch(IndexMode) {
   21585           0 :         case GF_SG_FIELD_CODING_IN:
   21586           0 :                 *allField = Hierarchical3DMesh_In2All[inField];
   21587             :                 return GF_OK;
   21588           0 :         case GF_SG_FIELD_CODING_DEF:
   21589           0 :                 *allField = Hierarchical3DMesh_Def2All[inField];
   21590             :                 return GF_OK;
   21591           0 :         case GF_SG_FIELD_CODING_OUT:
   21592           0 :                 *allField = Hierarchical3DMesh_Out2All[inField];
   21593             :                 return GF_OK;
   21594             :         default:
   21595             :                 return GF_BAD_PARAM;
   21596             :         }
   21597             : }
   21598           8 : static GF_Err Hierarchical3DMesh_get_field(GF_Node *node, GF_FieldInfo *info)
   21599             : {
   21600           8 :         switch (info->fieldIndex) {
   21601           2 :         case 0:
   21602           2 :                 info->name = "triangleBudget";
   21603           2 :                 info->eventType = GF_SG_EVENT_IN;
   21604           2 :                 info->on_event_in = ((M_Hierarchical3DMesh *)node)->on_triangleBudget;
   21605           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   21606           2 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->triangleBudget;
   21607           2 :                 return GF_OK;
   21608           2 :         case 1:
   21609           2 :                 info->name = "level";
   21610           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21611           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21612           2 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->level;
   21613           2 :                 return GF_OK;
   21614           2 :         case 2:
   21615           2 :                 info->name = "url";
   21616           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   21617           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   21618           2 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->url;
   21619           2 :                 return GF_OK;
   21620           2 :         case 3:
   21621           2 :                 info->name = "doneLoading";
   21622           2 :                 info->eventType = GF_SG_EVENT_OUT;
   21623           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21624           2 :                 info->far_ptr = & ((M_Hierarchical3DMesh *) node)->doneLoading;
   21625           2 :                 return GF_OK;
   21626             :         default:
   21627             :                 return GF_BAD_PARAM;
   21628             :         }
   21629             : }
   21630             : 
   21631             : 
   21632           4 : static s32 Hierarchical3DMesh_get_field_index_by_name(char *name)
   21633             : {
   21634           4 :         if (!strcmp("triangleBudget", name)) return 0;
   21635           3 :         if (!strcmp("level", name)) return 1;
   21636           2 :         if (!strcmp("url", name)) return 2;
   21637           1 :         if (!strcmp("doneLoading", name)) return 3;
   21638           0 :         return -1;
   21639             : }
   21640             : static Bool Hierarchical3DMesh_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21641             : {
   21642           4 :         switch (FieldIndex) {
   21643           1 :         case 0:
   21644           1 :                 *AType = 0;
   21645           1 :                 *QType = 0;
   21646           1 :                 *b_min = FLT2FIX(-1);
   21647           1 :                 *b_max = FIX_MAX;
   21648             :                 return 1;
   21649           1 :         case 1:
   21650           1 :                 *AType = 0;
   21651           1 :                 *QType = 0;
   21652           1 :                 *b_min = FLT2FIX(-1);
   21653           1 :                 *b_max = FIX_MAX;
   21654             :                 return 1;
   21655             :         default:
   21656             :                 return 0;
   21657             :         }
   21658             : }
   21659             : 
   21660             : 
   21661             : 
   21662           1 : GF_Node *Hierarchical3DMesh_Create()
   21663             : {
   21664             :         M_Hierarchical3DMesh *p;
   21665           1 :         GF_SAFEALLOC(p, M_Hierarchical3DMesh);
   21666           1 :         if(!p) return NULL;
   21667           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Hierarchical3DMesh);
   21668             : 
   21669             :         /*default field values*/
   21670           1 :         p->level = FLT2FIX(1);
   21671           1 :         return (GF_Node *)p;
   21672             : }
   21673             : 
   21674             : 
   21675             : /*
   21676             :         MaterialKey Node deletion
   21677             : */
   21678             : 
   21679             : static void MaterialKey_Del(GF_Node *node)
   21680             : {
   21681             :         M_MaterialKey *p = (M_MaterialKey *) node;
   21682          24 :         gf_node_free((GF_Node *) p);
   21683             : }
   21684             : 
   21685             : static const u16 MaterialKey_Def2All[] = { 0, 1, 2, 3, 4, 5};
   21686             : static const u16 MaterialKey_In2All[] = { 0, 1, 2, 3, 4, 5};
   21687             : static const u16 MaterialKey_Out2All[] = { 0, 1, 2, 3, 4, 5};
   21688             : static const u16 MaterialKey_Dyn2All[] = { 2, 3, 4, 5};
   21689             : 
   21690             : static u32 MaterialKey_get_field_count(GF_Node *node, u8 IndexMode)
   21691             : {
   21692          31 :         switch(IndexMode) {
   21693             :         case GF_SG_FIELD_CODING_IN:
   21694             :                 return 6;
   21695             :         case GF_SG_FIELD_CODING_DEF:
   21696             :                 return 6;
   21697             :         case GF_SG_FIELD_CODING_OUT:
   21698             :                 return 6;
   21699           1 :         case GF_SG_FIELD_CODING_DYN:
   21700             :                 return 4;
   21701             :         default:
   21702             :                 return 6;
   21703             :         }
   21704             : }
   21705             : 
   21706             : static GF_Err MaterialKey_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21707             : {
   21708          48 :         switch(IndexMode) {
   21709           0 :         case GF_SG_FIELD_CODING_IN:
   21710           0 :                 *allField = MaterialKey_In2All[inField];
   21711             :                 return GF_OK;
   21712          42 :         case GF_SG_FIELD_CODING_DEF:
   21713          42 :                 *allField = MaterialKey_Def2All[inField];
   21714             :                 return GF_OK;
   21715           0 :         case GF_SG_FIELD_CODING_OUT:
   21716           0 :                 *allField = MaterialKey_Out2All[inField];
   21717             :                 return GF_OK;
   21718           0 :         case GF_SG_FIELD_CODING_DYN:
   21719           0 :                 *allField = MaterialKey_Dyn2All[inField];
   21720             :                 return GF_OK;
   21721             :         default:
   21722             :                 return GF_BAD_PARAM;
   21723             :         }
   21724             : }
   21725         167 : static GF_Err MaterialKey_get_field(GF_Node *node, GF_FieldInfo *info)
   21726             : {
   21727         167 :         switch (info->fieldIndex) {
   21728          28 :         case 0:
   21729          28 :                 info->name = "isKeyed";
   21730          28 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21731          28 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21732          28 :                 info->far_ptr = & ((M_MaterialKey *) node)->isKeyed;
   21733          28 :                 return GF_OK;
   21734          27 :         case 1:
   21735          27 :                 info->name = "isRGB";
   21736          27 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21737          27 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   21738          27 :                 info->far_ptr = & ((M_MaterialKey *) node)->isRGB;
   21739          27 :                 return GF_OK;
   21740          28 :         case 2:
   21741          28 :                 info->name = "keyColor";
   21742          28 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21743          28 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   21744          28 :                 info->far_ptr = & ((M_MaterialKey *) node)->keyColor;
   21745          28 :                 return GF_OK;
   21746          28 :         case 3:
   21747          28 :                 info->name = "lowThreshold";
   21748          28 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21749          28 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21750          28 :                 info->far_ptr = & ((M_MaterialKey *) node)->lowThreshold;
   21751          28 :                 return GF_OK;
   21752          28 :         case 4:
   21753          28 :                 info->name = "highThreshold";
   21754          28 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21755          28 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21756          28 :                 info->far_ptr = & ((M_MaterialKey *) node)->highThreshold;
   21757          28 :                 return GF_OK;
   21758          28 :         case 5:
   21759          28 :                 info->name = "transparency";
   21760          28 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21761          28 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21762          28 :                 info->far_ptr = & ((M_MaterialKey *) node)->transparency;
   21763          28 :                 return GF_OK;
   21764             :         default:
   21765             :                 return GF_BAD_PARAM;
   21766             :         }
   21767             : }
   21768             : 
   21769             : 
   21770          11 : static s32 MaterialKey_get_field_index_by_name(char *name)
   21771             : {
   21772          11 :         if (!strcmp("isKeyed", name)) return 0;
   21773           9 :         if (!strcmp("isRGB", name)) return 1;
   21774           8 :         if (!strcmp("keyColor", name)) return 2;
   21775           6 :         if (!strcmp("lowThreshold", name)) return 3;
   21776           4 :         if (!strcmp("highThreshold", name)) return 4;
   21777           2 :         if (!strcmp("transparency", name)) return 5;
   21778           0 :         return -1;
   21779             : }
   21780             : static Bool MaterialKey_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   21781             : {
   21782           6 :         switch (FieldIndex) {
   21783           1 :         case 2:
   21784           1 :                 *AType = 4;
   21785           1 :                 *QType = 4;
   21786           1 :                 *b_min = FLT2FIX(0);
   21787           1 :                 *b_max = FLT2FIX(1);
   21788             :                 return 1;
   21789           1 :         case 3:
   21790           1 :                 *AType = 8;
   21791           1 :                 *QType = 4;
   21792           1 :                 *b_min = FLT2FIX(0);
   21793           1 :                 *b_max = FLT2FIX(1);
   21794             :                 return 1;
   21795           1 :         case 4:
   21796           1 :                 *AType = 8;
   21797           1 :                 *QType = 4;
   21798           1 :                 *b_min = FLT2FIX(0);
   21799           1 :                 *b_max = FLT2FIX(1);
   21800             :                 return 1;
   21801           1 :         case 5:
   21802           1 :                 *AType = 8;
   21803           1 :                 *QType = 4;
   21804           1 :                 *b_min = FLT2FIX(0);
   21805           1 :                 *b_max = FLT2FIX(1);
   21806             :                 return 1;
   21807             :         default:
   21808             :                 return 0;
   21809             :         }
   21810             : }
   21811             : 
   21812             : 
   21813             : 
   21814          24 : GF_Node *MaterialKey_Create()
   21815             : {
   21816             :         M_MaterialKey *p;
   21817          24 :         GF_SAFEALLOC(p, M_MaterialKey);
   21818          24 :         if(!p) return NULL;
   21819          24 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MaterialKey);
   21820             : 
   21821             :         /*default field values*/
   21822          24 :         p->isKeyed = 1;
   21823          24 :         p->isRGB = 1;
   21824          24 :         p->keyColor.red = FLT2FIX(0);
   21825          24 :         p->keyColor.green = FLT2FIX(0);
   21826          24 :         p->keyColor.blue = FLT2FIX(0);
   21827          24 :         p->lowThreshold = FLT2FIX(0);
   21828          24 :         p->highThreshold = FLT2FIX(0);
   21829          24 :         p->transparency = FLT2FIX(0);
   21830          24 :         return (GF_Node *)p;
   21831             : }
   21832             : 
   21833             : 
   21834             : /*
   21835             :         PerceptualParameters Node deletion
   21836             : */
   21837             : 
   21838           1 : static void PerceptualParameters_Del(GF_Node *node)
   21839             : {
   21840             :         M_PerceptualParameters *p = (M_PerceptualParameters *) node;
   21841           1 :         gf_sg_mffloat_del(p->omniDirectivity);
   21842           1 :         gf_sg_mffloat_del(p->directFilterGains);
   21843           1 :         gf_sg_mffloat_del(p->inputFilterGains);
   21844           1 :         gf_node_free((GF_Node *) p);
   21845           1 : }
   21846             : 
   21847             : static const u16 PerceptualParameters_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   21848             : static const u16 PerceptualParameters_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   21849             : static const u16 PerceptualParameters_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   21850             : static const u16 PerceptualParameters_Dyn2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   21851             : 
   21852             : static u32 PerceptualParameters_get_field_count(GF_Node *node, u8 IndexMode)
   21853             : {
   21854           6 :         switch(IndexMode) {
   21855             :         case GF_SG_FIELD_CODING_IN:
   21856             :                 return 19;
   21857             :         case GF_SG_FIELD_CODING_DEF:
   21858             :                 return 19;
   21859             :         case GF_SG_FIELD_CODING_OUT:
   21860             :                 return 19;
   21861           1 :         case GF_SG_FIELD_CODING_DYN:
   21862             :                 return 15;
   21863             :         default:
   21864             :                 return 19;
   21865             :         }
   21866             : }
   21867             : 
   21868             : static GF_Err PerceptualParameters_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   21869             : {
   21870          19 :         switch(IndexMode) {
   21871           0 :         case GF_SG_FIELD_CODING_IN:
   21872           0 :                 *allField = PerceptualParameters_In2All[inField];
   21873             :                 return GF_OK;
   21874           0 :         case GF_SG_FIELD_CODING_DEF:
   21875           0 :                 *allField = PerceptualParameters_Def2All[inField];
   21876             :                 return GF_OK;
   21877           0 :         case GF_SG_FIELD_CODING_OUT:
   21878           0 :                 *allField = PerceptualParameters_Out2All[inField];
   21879             :                 return GF_OK;
   21880           0 :         case GF_SG_FIELD_CODING_DYN:
   21881           0 :                 *allField = PerceptualParameters_Dyn2All[inField];
   21882             :                 return GF_OK;
   21883             :         default:
   21884             :                 return GF_BAD_PARAM;
   21885             :         }
   21886             : }
   21887          38 : static GF_Err PerceptualParameters_get_field(GF_Node *node, GF_FieldInfo *info)
   21888             : {
   21889          38 :         switch (info->fieldIndex) {
   21890           2 :         case 0:
   21891           2 :                 info->name = "sourcePresence";
   21892           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21893           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21894           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->sourcePresence;
   21895           2 :                 return GF_OK;
   21896           2 :         case 1:
   21897           2 :                 info->name = "sourceWarmth";
   21898           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21899           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21900           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->sourceWarmth;
   21901           2 :                 return GF_OK;
   21902           2 :         case 2:
   21903           2 :                 info->name = "sourceBrilliance";
   21904           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21905           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21906           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->sourceBrilliance;
   21907           2 :                 return GF_OK;
   21908           2 :         case 3:
   21909           2 :                 info->name = "roomPresence";
   21910           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21911           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21912           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->roomPresence;
   21913           2 :                 return GF_OK;
   21914           2 :         case 4:
   21915           2 :                 info->name = "runningReverberance";
   21916           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21917           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21918           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->runningReverberance;
   21919           2 :                 return GF_OK;
   21920           2 :         case 5:
   21921           2 :                 info->name = "envelopment";
   21922           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21923           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21924           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->envelopment;
   21925           2 :                 return GF_OK;
   21926           2 :         case 6:
   21927           2 :                 info->name = "lateReverberance";
   21928           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21929           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21930           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->lateReverberance;
   21931           2 :                 return GF_OK;
   21932           2 :         case 7:
   21933           2 :                 info->name = "heavyness";
   21934           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21935           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21936           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->heavyness;
   21937           2 :                 return GF_OK;
   21938           2 :         case 8:
   21939           2 :                 info->name = "liveness";
   21940           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21941           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21942           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->liveness;
   21943           2 :                 return GF_OK;
   21944           2 :         case 9:
   21945           2 :                 info->name = "omniDirectivity";
   21946           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21947           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21948           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->omniDirectivity;
   21949           2 :                 return GF_OK;
   21950           2 :         case 10:
   21951           2 :                 info->name = "directFilterGains";
   21952           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21953           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21954           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->directFilterGains;
   21955           2 :                 return GF_OK;
   21956           2 :         case 11:
   21957           2 :                 info->name = "inputFilterGains";
   21958           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21959           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   21960           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->inputFilterGains;
   21961           2 :                 return GF_OK;
   21962           2 :         case 12:
   21963           2 :                 info->name = "refDistance";
   21964           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21965           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21966           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->refDistance;
   21967           2 :                 return GF_OK;
   21968           2 :         case 13:
   21969           2 :                 info->name = "freqLow";
   21970           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21971           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21972           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->freqLow;
   21973           2 :                 return GF_OK;
   21974           2 :         case 14:
   21975           2 :                 info->name = "freqHigh";
   21976           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21977           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   21978           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->freqHigh;
   21979           2 :                 return GF_OK;
   21980           2 :         case 15:
   21981           2 :                 info->name = "timeLimit1";
   21982           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21983           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   21984           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->timeLimit1;
   21985           2 :                 return GF_OK;
   21986           2 :         case 16:
   21987           2 :                 info->name = "timeLimit2";
   21988           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21989           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   21990           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->timeLimit2;
   21991           2 :                 return GF_OK;
   21992           2 :         case 17:
   21993           2 :                 info->name = "timeLimit3";
   21994           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   21995           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   21996           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->timeLimit3;
   21997           2 :                 return GF_OK;
   21998           2 :         case 18:
   21999           2 :                 info->name = "modalDensity";
   22000           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22001           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22002           2 :                 info->far_ptr = & ((M_PerceptualParameters *) node)->modalDensity;
   22003           2 :                 return GF_OK;
   22004             :         default:
   22005             :                 return GF_BAD_PARAM;
   22006             :         }
   22007             : }
   22008             : 
   22009             : 
   22010          19 : static s32 PerceptualParameters_get_field_index_by_name(char *name)
   22011             : {
   22012          19 :         if (!strcmp("sourcePresence", name)) return 0;
   22013          18 :         if (!strcmp("sourceWarmth", name)) return 1;
   22014          17 :         if (!strcmp("sourceBrilliance", name)) return 2;
   22015          16 :         if (!strcmp("roomPresence", name)) return 3;
   22016          15 :         if (!strcmp("runningReverberance", name)) return 4;
   22017          14 :         if (!strcmp("envelopment", name)) return 5;
   22018          13 :         if (!strcmp("lateReverberance", name)) return 6;
   22019          12 :         if (!strcmp("heavyness", name)) return 7;
   22020          11 :         if (!strcmp("liveness", name)) return 8;
   22021          10 :         if (!strcmp("omniDirectivity", name)) return 9;
   22022           9 :         if (!strcmp("directFilterGains", name)) return 10;
   22023           8 :         if (!strcmp("inputFilterGains", name)) return 11;
   22024           7 :         if (!strcmp("refDistance", name)) return 12;
   22025           6 :         if (!strcmp("freqLow", name)) return 13;
   22026           5 :         if (!strcmp("freqHigh", name)) return 14;
   22027           4 :         if (!strcmp("timeLimit1", name)) return 15;
   22028           3 :         if (!strcmp("timeLimit2", name)) return 16;
   22029           2 :         if (!strcmp("timeLimit3", name)) return 17;
   22030           1 :         if (!strcmp("modalDensity", name)) return 18;
   22031           0 :         return -1;
   22032             : }
   22033          19 : static Bool PerceptualParameters_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22034             : {
   22035          19 :         switch (FieldIndex) {
   22036           1 :         case 0:
   22037           1 :                 *AType = 7;
   22038           1 :                 *QType = 0;
   22039           1 :                 *b_min = FIX_MIN;
   22040           1 :                 *b_max = FIX_MAX;
   22041             :                 return 1;
   22042           1 :         case 1:
   22043           1 :                 *AType = 7;
   22044           1 :                 *QType = 0;
   22045           1 :                 *b_min = FIX_MIN;
   22046           1 :                 *b_max = FIX_MAX;
   22047             :                 return 1;
   22048           1 :         case 2:
   22049           1 :                 *AType = 7;
   22050           1 :                 *QType = 0;
   22051           1 :                 *b_min = FIX_MIN;
   22052           1 :                 *b_max = FIX_MAX;
   22053             :                 return 1;
   22054           1 :         case 3:
   22055           1 :                 *AType = 7;
   22056           1 :                 *QType = 0;
   22057           1 :                 *b_min = FIX_MIN;
   22058           1 :                 *b_max = FIX_MAX;
   22059             :                 return 1;
   22060           1 :         case 4:
   22061           1 :                 *AType = 7;
   22062           1 :                 *QType = 0;
   22063           1 :                 *b_min = FIX_MIN;
   22064           1 :                 *b_max = FIX_MAX;
   22065             :                 return 1;
   22066           1 :         case 5:
   22067           1 :                 *AType = 7;
   22068           1 :                 *QType = 0;
   22069           1 :                 *b_min = FIX_MIN;
   22070           1 :                 *b_max = FIX_MAX;
   22071             :                 return 1;
   22072           1 :         case 6:
   22073           1 :                 *AType = 7;
   22074           1 :                 *QType = 0;
   22075           1 :                 *b_min = FIX_MIN;
   22076           1 :                 *b_max = FIX_MAX;
   22077             :                 return 1;
   22078           1 :         case 7:
   22079           1 :                 *AType = 7;
   22080           1 :                 *QType = 0;
   22081           1 :                 *b_min = FIX_MIN;
   22082           1 :                 *b_max = FIX_MAX;
   22083             :                 return 1;
   22084           1 :         case 8:
   22085           1 :                 *AType = 7;
   22086           1 :                 *QType = 0;
   22087           1 :                 *b_min = FIX_MIN;
   22088           1 :                 *b_max = FIX_MAX;
   22089             :                 return 1;
   22090           1 :         case 9:
   22091           1 :                 *AType = 7;
   22092           1 :                 *QType = 0;
   22093           1 :                 *b_min = FIX_MIN;
   22094           1 :                 *b_max = FIX_MAX;
   22095             :                 return 1;
   22096           1 :         case 10:
   22097           1 :                 *AType = 7;
   22098           1 :                 *QType = 0;
   22099           1 :                 *b_min = FIX_MIN;
   22100           1 :                 *b_max = FIX_MAX;
   22101             :                 return 1;
   22102           1 :         case 11:
   22103           1 :                 *AType = 7;
   22104           1 :                 *QType = 0;
   22105           1 :                 *b_min = FIX_MIN;
   22106           1 :                 *b_max = FIX_MAX;
   22107             :                 return 1;
   22108           1 :         case 12:
   22109           1 :                 *AType = 7;
   22110           1 :                 *QType = 0;
   22111           1 :                 *b_min = FIX_MIN;
   22112           1 :                 *b_max = FIX_MAX;
   22113             :                 return 1;
   22114           1 :         case 13:
   22115           1 :                 *AType = 7;
   22116           1 :                 *QType = 0;
   22117           1 :                 *b_min = FIX_MIN;
   22118           1 :                 *b_max = FIX_MAX;
   22119             :                 return 1;
   22120           1 :         case 14:
   22121           1 :                 *AType = 7;
   22122           1 :                 *QType = 0;
   22123           1 :                 *b_min = FIX_MIN;
   22124           1 :                 *b_max = FIX_MAX;
   22125             :                 return 1;
   22126           1 :         case 15:
   22127           1 :                 *AType = 0;
   22128           1 :                 *QType = 0;
   22129           1 :                 *b_min = FIX_MIN;
   22130           1 :                 *b_max = FIX_MAX;
   22131             :                 return 1;
   22132           1 :         case 16:
   22133           1 :                 *AType = 0;
   22134           1 :                 *QType = 0;
   22135           1 :                 *b_min = FIX_MIN;
   22136           1 :                 *b_max = FIX_MAX;
   22137             :                 return 1;
   22138           1 :         case 17:
   22139           1 :                 *AType = 0;
   22140           1 :                 *QType = 0;
   22141           1 :                 *b_min = FIX_MIN;
   22142           1 :                 *b_max = FIX_MAX;
   22143             :                 return 1;
   22144           1 :         case 18:
   22145           1 :                 *AType = 0;
   22146           1 :                 *QType = 0;
   22147           1 :                 *b_min = FIX_MIN;
   22148           1 :                 *b_max = FIX_MAX;
   22149             :                 return 1;
   22150             :         default:
   22151             :                 return 0;
   22152             :         }
   22153             : }
   22154             : 
   22155             : 
   22156             : 
   22157           1 : GF_Node *PerceptualParameters_Create()
   22158             : {
   22159             :         M_PerceptualParameters *p;
   22160           1 :         GF_SAFEALLOC(p, M_PerceptualParameters);
   22161           1 :         if(!p) return NULL;
   22162           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PerceptualParameters);
   22163             : 
   22164             :         /*default field values*/
   22165           1 :         p->sourcePresence = FLT2FIX(1.0);
   22166           1 :         p->sourceWarmth = FLT2FIX(1.0);
   22167           1 :         p->sourceBrilliance = FLT2FIX(1.0);
   22168           1 :         p->roomPresence = FLT2FIX(1.0);
   22169           1 :         p->runningReverberance = FLT2FIX(1.0);
   22170           1 :         p->envelopment = FLT2FIX(0.0);
   22171           1 :         p->lateReverberance = FLT2FIX(1.0);
   22172           1 :         p->heavyness = FLT2FIX(1.0);
   22173           1 :         p->liveness = FLT2FIX(1.0);
   22174           1 :         p->omniDirectivity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   22175           1 :         p->omniDirectivity.count = 1;
   22176           1 :         p->omniDirectivity.vals[0] = FLT2FIX(1.0);
   22177           1 :         p->directFilterGains.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*3);
   22178           1 :         p->directFilterGains.count = 3;
   22179           1 :         p->directFilterGains.vals[0] = FLT2FIX(1.0);
   22180           1 :         p->directFilterGains.vals[1] = FLT2FIX(1.0);
   22181           1 :         p->directFilterGains.vals[2] = FLT2FIX(1.0);
   22182           1 :         p->inputFilterGains.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*3);
   22183           1 :         p->inputFilterGains.count = 3;
   22184           1 :         p->inputFilterGains.vals[0] = FLT2FIX(1.0);
   22185           1 :         p->inputFilterGains.vals[1] = FLT2FIX(1.0);
   22186           1 :         p->inputFilterGains.vals[2] = FLT2FIX(1.0);
   22187           1 :         p->refDistance = FLT2FIX(1.0);
   22188           1 :         p->freqLow = FLT2FIX(250.0);
   22189           1 :         p->freqHigh = FLT2FIX(4000.0);
   22190           1 :         p->timeLimit1 = 0.02;
   22191           1 :         p->timeLimit2 = 0.04;
   22192           1 :         p->timeLimit3 = 0.1;
   22193           1 :         p->modalDensity = 0.8;
   22194           1 :         return (GF_Node *)p;
   22195             : }
   22196             : 
   22197             : 
   22198             : /*
   22199             :         TemporalTransform Node deletion
   22200             : */
   22201             : 
   22202           1 : static void TemporalTransform_Del(GF_Node *node)
   22203             : {
   22204             :         M_TemporalTransform *p = (M_TemporalTransform *) node;
   22205           1 :         gf_sg_mfurl_del(p->url);
   22206           1 :         gf_sg_mfint32_del(p->stretchMode);
   22207           1 :         gf_sg_mfint32_del(p->shrinkMode);
   22208           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   22209           1 :         gf_node_free((GF_Node *) p);
   22210           1 : }
   22211             : 
   22212             : static const u16 TemporalTransform_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   22213             : static const u16 TemporalTransform_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   22214             : static const u16 TemporalTransform_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   22215             : static const u16 TemporalTransform_Dyn2All[] = { 7, 8};
   22216             : 
   22217             : static u32 TemporalTransform_get_field_count(GF_Node *node, u8 IndexMode)
   22218             : {
   22219             :         switch(IndexMode) {
   22220             :         case GF_SG_FIELD_CODING_IN:
   22221             :                 return 12;
   22222             :         case GF_SG_FIELD_CODING_DEF:
   22223             :                 return 10;
   22224             :         case GF_SG_FIELD_CODING_OUT:
   22225             :                 return 11;
   22226             :         case GF_SG_FIELD_CODING_DYN:
   22227             :                 return 2;
   22228             :         default:
   22229             :                 return 13;
   22230             :         }
   22231             : }
   22232             : 
   22233             : static GF_Err TemporalTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22234             : {
   22235          13 :         switch(IndexMode) {
   22236           0 :         case GF_SG_FIELD_CODING_IN:
   22237           0 :                 *allField = TemporalTransform_In2All[inField];
   22238             :                 return GF_OK;
   22239           0 :         case GF_SG_FIELD_CODING_DEF:
   22240           0 :                 *allField = TemporalTransform_Def2All[inField];
   22241             :                 return GF_OK;
   22242           0 :         case GF_SG_FIELD_CODING_OUT:
   22243           0 :                 *allField = TemporalTransform_Out2All[inField];
   22244             :                 return GF_OK;
   22245           0 :         case GF_SG_FIELD_CODING_DYN:
   22246           0 :                 *allField = TemporalTransform_Dyn2All[inField];
   22247             :                 return GF_OK;
   22248             :         default:
   22249             :                 return GF_BAD_PARAM;
   22250             :         }
   22251             : }
   22252          26 : static GF_Err TemporalTransform_get_field(GF_Node *node, GF_FieldInfo *info)
   22253             : {
   22254          26 :         switch (info->fieldIndex) {
   22255           2 :         case 0:
   22256           2 :                 info->name = "addChildren";
   22257           2 :                 info->eventType = GF_SG_EVENT_IN;
   22258           2 :                 info->on_event_in = ((M_TemporalTransform *)node)->on_addChildren;
   22259           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22260           2 :                 info->NDTtype = NDT_SF3DNode;
   22261           2 :                 info->far_ptr = & ((M_TemporalTransform *)node)->addChildren;
   22262           2 :                 return GF_OK;
   22263           2 :         case 1:
   22264           2 :                 info->name = "removeChildren";
   22265           2 :                 info->eventType = GF_SG_EVENT_IN;
   22266           2 :                 info->on_event_in = ((M_TemporalTransform *)node)->on_removeChildren;
   22267           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22268           2 :                 info->NDTtype = NDT_SF3DNode;
   22269           2 :                 info->far_ptr = & ((M_TemporalTransform *)node)->removeChildren;
   22270           2 :                 return GF_OK;
   22271           2 :         case 2:
   22272           2 :                 info->name = "children";
   22273           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22274           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22275           2 :                 info->NDTtype = NDT_SF3DNode;
   22276           2 :                 info->far_ptr = & ((M_TemporalTransform *)node)->children;
   22277           2 :                 return GF_OK;
   22278           2 :         case 3:
   22279           2 :                 info->name = "url";
   22280           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22281           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   22282           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->url;
   22283           2 :                 return GF_OK;
   22284           2 :         case 4:
   22285           2 :                 info->name = "startTime";
   22286           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22287           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22288           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->startTime;
   22289           2 :                 return GF_OK;
   22290           2 :         case 5:
   22291           2 :                 info->name = "optimalDuration";
   22292           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22293           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22294           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->optimalDuration;
   22295           2 :                 return GF_OK;
   22296           2 :         case 6:
   22297           2 :                 info->name = "active";
   22298           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22299           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22300           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->active;
   22301           2 :                 return GF_OK;
   22302           2 :         case 7:
   22303           2 :                 info->name = "speed";
   22304           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22305           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   22306           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->speed;
   22307           2 :                 return GF_OK;
   22308           2 :         case 8:
   22309           2 :                 info->name = "scalability";
   22310           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22311           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   22312           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->scalability;
   22313           2 :                 return GF_OK;
   22314           2 :         case 9:
   22315           2 :                 info->name = "stretchMode";
   22316           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22317           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   22318           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->stretchMode;
   22319           2 :                 return GF_OK;
   22320           2 :         case 10:
   22321           2 :                 info->name = "shrinkMode";
   22322           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22323           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   22324           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->shrinkMode;
   22325           2 :                 return GF_OK;
   22326           2 :         case 11:
   22327           2 :                 info->name = "maxDelay";
   22328           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22329           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22330           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->maxDelay;
   22331           2 :                 return GF_OK;
   22332           2 :         case 12:
   22333           2 :                 info->name = "actualDuration";
   22334           2 :                 info->eventType = GF_SG_EVENT_OUT;
   22335           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22336           2 :                 info->far_ptr = & ((M_TemporalTransform *) node)->actualDuration;
   22337           2 :                 return GF_OK;
   22338             :         default:
   22339             :                 return GF_BAD_PARAM;
   22340             :         }
   22341             : }
   22342             : 
   22343             : 
   22344          13 : static s32 TemporalTransform_get_field_index_by_name(char *name)
   22345             : {
   22346          13 :         if (!strcmp("addChildren", name)) return 0;
   22347          12 :         if (!strcmp("removeChildren", name)) return 1;
   22348          11 :         if (!strcmp("children", name)) return 2;
   22349          10 :         if (!strcmp("url", name)) return 3;
   22350           9 :         if (!strcmp("startTime", name)) return 4;
   22351           8 :         if (!strcmp("optimalDuration", name)) return 5;
   22352           7 :         if (!strcmp("active", name)) return 6;
   22353           6 :         if (!strcmp("speed", name)) return 7;
   22354           5 :         if (!strcmp("scalability", name)) return 8;
   22355           4 :         if (!strcmp("stretchMode", name)) return 9;
   22356           3 :         if (!strcmp("shrinkMode", name)) return 10;
   22357           2 :         if (!strcmp("maxDelay", name)) return 11;
   22358           1 :         if (!strcmp("actualDuration", name)) return 12;
   22359           0 :         return -1;
   22360             : }
   22361             : static Bool TemporalTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22362             : {
   22363          13 :         switch (FieldIndex) {
   22364           1 :         case 7:
   22365           1 :                 *AType = 7;
   22366           1 :                 *QType = 0;
   22367           1 :                 *b_min = FIX_MIN;
   22368           1 :                 *b_max = FIX_MAX;
   22369             :                 return 1;
   22370           1 :         case 8:
   22371           1 :                 *AType = 12;
   22372           1 :                 *QType = 12;
   22373           1 :                 *b_min = FLT2FIX(-1);
   22374           1 :                 *b_max = FIX_MAX;
   22375             :                 return 1;
   22376           1 :         case 9:
   22377           1 :                 *AType = 0;
   22378           1 :                 *QType = 13;
   22379           1 :                 *QT13_bits = 2;
   22380           1 :                 *b_min = FLT2FIX(0);
   22381           1 :                 *b_max = FLT2FIX(2);
   22382             :                 return 1;
   22383           1 :         case 10:
   22384           1 :                 *AType = 0;
   22385           1 :                 *QType = 13;
   22386           1 :                 *QT13_bits = 1;
   22387           1 :                 *b_min = FLT2FIX(0);
   22388           1 :                 *b_max = FLT2FIX(1);
   22389             :                 return 1;
   22390             :         default:
   22391             :                 return 0;
   22392             :         }
   22393             : }
   22394             : 
   22395             : 
   22396             : 
   22397           1 : GF_Node *TemporalTransform_Create()
   22398             : {
   22399             :         M_TemporalTransform *p;
   22400           1 :         GF_SAFEALLOC(p, M_TemporalTransform);
   22401           1 :         if(!p) return NULL;
   22402           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TemporalTransform);
   22403           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   22404             : 
   22405             :         /*default field values*/
   22406           1 :         p->startTime = -1.0;
   22407           1 :         p->optimalDuration = -1.0;
   22408           1 :         p->speed = FLT2FIX(1.0);
   22409           1 :         p->scalability.x = FLT2FIX(1.0);
   22410           1 :         p->scalability.y = FLT2FIX(1.0);
   22411           1 :         p->stretchMode.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   22412           1 :         p->stretchMode.count = 1;
   22413           1 :         p->stretchMode.vals[0] = 0;
   22414           1 :         p->shrinkMode.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   22415           1 :         p->shrinkMode.count = 1;
   22416           1 :         p->shrinkMode.vals[0] = 0;
   22417           1 :         p->maxDelay = 0;
   22418           1 :         return (GF_Node *)p;
   22419             : }
   22420             : 
   22421             : 
   22422             : /*
   22423             :         TemporalGroup Node deletion
   22424             : */
   22425             : 
   22426           1 : static void TemporalGroup_Del(GF_Node *node)
   22427             : {
   22428             :         M_TemporalGroup *p = (M_TemporalGroup *) node;
   22429           1 :         gf_sg_mffloat_del(p->priority);
   22430           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   22431           1 :         gf_node_free((GF_Node *) p);
   22432           1 : }
   22433             : 
   22434             : static const u16 TemporalGroup_Def2All[] = { 2, 3, 4, 5, 6};
   22435             : static const u16 TemporalGroup_In2All[] = { 0, 1, 2, 6};
   22436             : static const u16 TemporalGroup_Out2All[] = { 2, 6, 7, 8};
   22437             : 
   22438             : static u32 TemporalGroup_get_field_count(GF_Node *node, u8 IndexMode)
   22439             : {
   22440             :         switch(IndexMode) {
   22441             :         case GF_SG_FIELD_CODING_IN:
   22442             :                 return 4;
   22443             :         case GF_SG_FIELD_CODING_DEF:
   22444             :                 return 5;
   22445             :         case GF_SG_FIELD_CODING_OUT:
   22446             :                 return 4;
   22447             :         case GF_SG_FIELD_CODING_DYN:
   22448             :                 return 0;
   22449             :         default:
   22450             :                 return 9;
   22451             :         }
   22452             : }
   22453             : 
   22454             : static GF_Err TemporalGroup_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22455             : {
   22456           9 :         switch(IndexMode) {
   22457           0 :         case GF_SG_FIELD_CODING_IN:
   22458           0 :                 *allField = TemporalGroup_In2All[inField];
   22459             :                 return GF_OK;
   22460           0 :         case GF_SG_FIELD_CODING_DEF:
   22461           0 :                 *allField = TemporalGroup_Def2All[inField];
   22462             :                 return GF_OK;
   22463           0 :         case GF_SG_FIELD_CODING_OUT:
   22464           0 :                 *allField = TemporalGroup_Out2All[inField];
   22465             :                 return GF_OK;
   22466             :         default:
   22467             :                 return GF_BAD_PARAM;
   22468             :         }
   22469             : }
   22470          18 : static GF_Err TemporalGroup_get_field(GF_Node *node, GF_FieldInfo *info)
   22471             : {
   22472          18 :         switch (info->fieldIndex) {
   22473           2 :         case 0:
   22474           2 :                 info->name = "addChildren";
   22475           2 :                 info->eventType = GF_SG_EVENT_IN;
   22476           2 :                 info->on_event_in = ((M_TemporalGroup *)node)->on_addChildren;
   22477           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22478           2 :                 info->NDTtype = NDT_SFTemporalNode;
   22479           2 :                 info->far_ptr = & ((M_TemporalGroup *)node)->addChildren;
   22480           2 :                 return GF_OK;
   22481           2 :         case 1:
   22482           2 :                 info->name = "removeChildren";
   22483           2 :                 info->eventType = GF_SG_EVENT_IN;
   22484           2 :                 info->on_event_in = ((M_TemporalGroup *)node)->on_removeChildren;
   22485           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22486           2 :                 info->NDTtype = NDT_SFTemporalNode;
   22487           2 :                 info->far_ptr = & ((M_TemporalGroup *)node)->removeChildren;
   22488           2 :                 return GF_OK;
   22489           2 :         case 2:
   22490           2 :                 info->name = "children";
   22491           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22492           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   22493           2 :                 info->NDTtype = NDT_SFTemporalNode;
   22494           2 :                 info->far_ptr = & ((M_TemporalGroup *)node)->children;
   22495           2 :                 return GF_OK;
   22496           2 :         case 3:
   22497           2 :                 info->name = "costart";
   22498           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22499           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22500           2 :                 info->far_ptr = & ((M_TemporalGroup *) node)->costart;
   22501           2 :                 return GF_OK;
   22502           2 :         case 4:
   22503           2 :                 info->name = "coend";
   22504           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22505           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22506           2 :                 info->far_ptr = & ((M_TemporalGroup *) node)->coend;
   22507           2 :                 return GF_OK;
   22508           2 :         case 5:
   22509           2 :                 info->name = "meet";
   22510           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22511           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22512           2 :                 info->far_ptr = & ((M_TemporalGroup *) node)->meet;
   22513           2 :                 return GF_OK;
   22514           2 :         case 6:
   22515           2 :                 info->name = "priority";
   22516           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22517           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   22518           2 :                 info->far_ptr = & ((M_TemporalGroup *) node)->priority;
   22519           2 :                 return GF_OK;
   22520           2 :         case 7:
   22521           2 :                 info->name = "isActive";
   22522           2 :                 info->eventType = GF_SG_EVENT_OUT;
   22523           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22524           2 :                 info->far_ptr = & ((M_TemporalGroup *) node)->isActive;
   22525           2 :                 return GF_OK;
   22526           2 :         case 8:
   22527           2 :                 info->name = "activeChild";
   22528           2 :                 info->eventType = GF_SG_EVENT_OUT;
   22529           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   22530           2 :                 info->far_ptr = & ((M_TemporalGroup *) node)->activeChild;
   22531           2 :                 return GF_OK;
   22532             :         default:
   22533             :                 return GF_BAD_PARAM;
   22534             :         }
   22535             : }
   22536             : 
   22537             : 
   22538           9 : static s32 TemporalGroup_get_field_index_by_name(char *name)
   22539             : {
   22540           9 :         if (!strcmp("addChildren", name)) return 0;
   22541           8 :         if (!strcmp("removeChildren", name)) return 1;
   22542           7 :         if (!strcmp("children", name)) return 2;
   22543           6 :         if (!strcmp("costart", name)) return 3;
   22544           5 :         if (!strcmp("coend", name)) return 4;
   22545           4 :         if (!strcmp("meet", name)) return 5;
   22546           3 :         if (!strcmp("priority", name)) return 6;
   22547           2 :         if (!strcmp("isActive", name)) return 7;
   22548           1 :         if (!strcmp("activeChild", name)) return 8;
   22549           0 :         return -1;
   22550             : }
   22551             : static Bool TemporalGroup_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22552             : {
   22553           9 :         switch (FieldIndex) {
   22554           1 :         case 6:
   22555           1 :                 *AType = 0;
   22556           1 :                 *QType = 3;
   22557           1 :                 *b_min = FLT2FIX(0);
   22558           1 :                 *b_max = FIX_MAX;
   22559             :                 return 1;
   22560             :         default:
   22561             :                 return 0;
   22562             :         }
   22563             : }
   22564             : 
   22565             : 
   22566             : 
   22567           1 : GF_Node *TemporalGroup_Create()
   22568             : {
   22569             :         M_TemporalGroup *p;
   22570           1 :         GF_SAFEALLOC(p, M_TemporalGroup);
   22571           1 :         if(!p) return NULL;
   22572           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TemporalGroup);
   22573           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   22574             : 
   22575             :         /*default field values*/
   22576           1 :         p->costart = 1;
   22577           1 :         return (GF_Node *)p;
   22578             : }
   22579             : 
   22580             : 
   22581             : /*
   22582             :         ServerCommand Node deletion
   22583             : */
   22584             : 
   22585          23 : static void ServerCommand_Del(GF_Node *node)
   22586             : {
   22587             :         M_ServerCommand *p = (M_ServerCommand *) node;
   22588          23 :         gf_sg_mfurl_del(p->url);
   22589          23 :         gf_sg_sfstring_del(p->command);
   22590          23 :         gf_node_free((GF_Node *) p);
   22591          23 : }
   22592             : 
   22593             : static const u16 ServerCommand_Def2All[] = { 1, 2, 3};
   22594             : static const u16 ServerCommand_In2All[] = { 0, 1, 2, 3};
   22595             : static const u16 ServerCommand_Out2All[] = { 1, 2, 3};
   22596             : 
   22597             : static u32 ServerCommand_get_field_count(GF_Node *node, u8 IndexMode)
   22598             : {
   22599             :         switch(IndexMode) {
   22600             :         case GF_SG_FIELD_CODING_IN:
   22601             :                 return 4;
   22602             :         case GF_SG_FIELD_CODING_DEF:
   22603             :                 return 3;
   22604             :         case GF_SG_FIELD_CODING_OUT:
   22605             :                 return 3;
   22606             :         case GF_SG_FIELD_CODING_DYN:
   22607             :                 return 0;
   22608             :         default:
   22609             :                 return 4;
   22610             :         }
   22611             : }
   22612             : 
   22613             : static GF_Err ServerCommand_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22614             : {
   22615          25 :         switch(IndexMode) {
   22616           0 :         case GF_SG_FIELD_CODING_IN:
   22617           0 :                 *allField = ServerCommand_In2All[inField];
   22618             :                 return GF_OK;
   22619          21 :         case GF_SG_FIELD_CODING_DEF:
   22620          21 :                 *allField = ServerCommand_Def2All[inField];
   22621             :                 return GF_OK;
   22622           0 :         case GF_SG_FIELD_CODING_OUT:
   22623           0 :                 *allField = ServerCommand_Out2All[inField];
   22624             :                 return GF_OK;
   22625             :         default:
   22626             :                 return GF_BAD_PARAM;
   22627             :         }
   22628             : }
   22629          85 : static GF_Err ServerCommand_get_field(GF_Node *node, GF_FieldInfo *info)
   22630             : {
   22631          85 :         switch (info->fieldIndex) {
   22632           7 :         case 0:
   22633           7 :                 info->name = "trigger";
   22634           7 :                 info->eventType = GF_SG_EVENT_IN;
   22635           7 :                 info->on_event_in = ((M_ServerCommand *)node)->on_trigger;
   22636           7 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22637           7 :                 info->far_ptr = & ((M_ServerCommand *) node)->trigger;
   22638           7 :                 return GF_OK;
   22639          26 :         case 1:
   22640          26 :                 info->name = "enable";
   22641          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22642          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22643          26 :                 info->far_ptr = & ((M_ServerCommand *) node)->enable;
   22644          26 :                 return GF_OK;
   22645          26 :         case 2:
   22646          26 :                 info->name = "url";
   22647          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22648          26 :                 info->fieldType = GF_SG_VRML_MFURL;
   22649          26 :                 info->far_ptr = & ((M_ServerCommand *) node)->url;
   22650          26 :                 return GF_OK;
   22651          26 :         case 3:
   22652          26 :                 info->name = "command";
   22653          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22654          26 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   22655          26 :                 info->far_ptr = & ((M_ServerCommand *) node)->command;
   22656          26 :                 return GF_OK;
   22657             :         default:
   22658             :                 return GF_BAD_PARAM;
   22659             :         }
   22660             : }
   22661             : 
   22662             : 
   22663           4 : static s32 ServerCommand_get_field_index_by_name(char *name)
   22664             : {
   22665           4 :         if (!strcmp("trigger", name)) return 0;
   22666           3 :         if (!strcmp("enable", name)) return 1;
   22667           2 :         if (!strcmp("url", name)) return 2;
   22668           1 :         if (!strcmp("command", name)) return 3;
   22669           0 :         return -1;
   22670             : }
   22671             : static Bool ServerCommand_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22672             : {
   22673             :         switch (FieldIndex) {
   22674             :         default:
   22675             :                 return 0;
   22676             :         }
   22677             : }
   22678             : 
   22679             : 
   22680             : 
   22681          23 : GF_Node *ServerCommand_Create()
   22682             : {
   22683             :         M_ServerCommand *p;
   22684          23 :         GF_SAFEALLOC(p, M_ServerCommand);
   22685          23 :         if(!p) return NULL;
   22686          23 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ServerCommand);
   22687             : 
   22688             :         /*default field values*/
   22689          23 :         return (GF_Node *)p;
   22690             : }
   22691             : 
   22692             : 
   22693             : /*
   22694             :         InputSensor Node deletion
   22695             : */
   22696             : 
   22697         134 : static void InputSensor_Del(GF_Node *node)
   22698             : {
   22699             :         M_InputSensor *p = (M_InputSensor *) node;
   22700         134 :         gf_sg_sfcommand_del(p->buffer);
   22701         134 :         gf_sg_mfurl_del(p->url);
   22702         134 :         gf_node_free((GF_Node *) p);
   22703         134 : }
   22704             : 
   22705             : static const u16 InputSensor_Def2All[] = { 0, 1, 2};
   22706             : static const u16 InputSensor_In2All[] = { 0, 1, 2};
   22707             : static const u16 InputSensor_Out2All[] = { 0, 1, 2, 3};
   22708             : 
   22709             : static u32 InputSensor_get_field_count(GF_Node *node, u8 IndexMode)
   22710             : {
   22711             :         switch(IndexMode) {
   22712             :         case GF_SG_FIELD_CODING_IN:
   22713             :                 return 3;
   22714             :         case GF_SG_FIELD_CODING_DEF:
   22715             :                 return 3;
   22716             :         case GF_SG_FIELD_CODING_OUT:
   22717             :                 return 4;
   22718             :         case GF_SG_FIELD_CODING_DYN:
   22719             :                 return 0;
   22720             :         default:
   22721             :                 return 4;
   22722             :         }
   22723             : }
   22724             : 
   22725             : static GF_Err InputSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22726             : {
   22727         184 :         switch(IndexMode) {
   22728           0 :         case GF_SG_FIELD_CODING_IN:
   22729           0 :                 *allField = InputSensor_In2All[inField];
   22730             :                 return GF_OK;
   22731         180 :         case GF_SG_FIELD_CODING_DEF:
   22732         180 :                 *allField = InputSensor_Def2All[inField];
   22733             :                 return GF_OK;
   22734           0 :         case GF_SG_FIELD_CODING_OUT:
   22735           0 :                 *allField = InputSensor_Out2All[inField];
   22736             :                 return GF_OK;
   22737             :         default:
   22738             :                 return GF_BAD_PARAM;
   22739             :         }
   22740             : }
   22741         642 : static GF_Err InputSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   22742             : {
   22743         642 :         switch (info->fieldIndex) {
   22744         142 :         case 0:
   22745         142 :                 info->name = "enabled";
   22746         142 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22747         142 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22748         142 :                 info->far_ptr = & ((M_InputSensor *) node)->enabled;
   22749         142 :                 return GF_OK;
   22750         205 :         case 1:
   22751         205 :                 info->name = "buffer";
   22752         205 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22753         205 :                 info->fieldType = GF_SG_VRML_SFCOMMANDBUFFER;
   22754         205 :                 info->far_ptr = & ((M_InputSensor *) node)->buffer;
   22755         205 :                 return GF_OK;
   22756         263 :         case 2:
   22757         263 :                 info->name = "url";
   22758         263 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22759         263 :                 info->fieldType = GF_SG_VRML_MFURL;
   22760         263 :                 info->far_ptr = & ((M_InputSensor *) node)->url;
   22761         263 :                 return GF_OK;
   22762          32 :         case 3:
   22763          32 :                 info->name = "eventTime";
   22764          32 :                 info->eventType = GF_SG_EVENT_OUT;
   22765          32 :                 info->fieldType = GF_SG_VRML_SFTIME;
   22766          32 :                 info->far_ptr = & ((M_InputSensor *) node)->eventTime;
   22767          32 :                 return GF_OK;
   22768             :         default:
   22769             :                 return GF_BAD_PARAM;
   22770             :         }
   22771             : }
   22772             : 
   22773             : 
   22774          70 : static s32 InputSensor_get_field_index_by_name(char *name)
   22775             : {
   22776          70 :         if (!strcmp("enabled", name)) return 0;
   22777          69 :         if (!strcmp("buffer", name)) return 1;
   22778          35 :         if (!strcmp("url", name)) return 2;
   22779           1 :         if (!strcmp("eventTime", name)) return 3;
   22780           0 :         return -1;
   22781             : }
   22782             : static Bool InputSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22783             : {
   22784             :         switch (FieldIndex) {
   22785             :         default:
   22786             :                 return 0;
   22787             :         }
   22788             : }
   22789             : 
   22790             : 
   22791             : 
   22792         134 : GF_Node *InputSensor_Create()
   22793             : {
   22794             :         M_InputSensor *p;
   22795         134 :         GF_SAFEALLOC(p, M_InputSensor);
   22796         134 :         if(!p) return NULL;
   22797         134 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_InputSensor);
   22798         134 :         p->buffer.commandList = gf_list_new();
   22799             : 
   22800             :         /*default field values*/
   22801         134 :         p->enabled = 1;
   22802         134 :         return (GF_Node *)p;
   22803             : }
   22804             : 
   22805             : 
   22806             : /*
   22807             :         MatteTexture Node deletion
   22808             : */
   22809             : 
   22810           1 : static void MatteTexture_Del(GF_Node *node)
   22811             : {
   22812             :         M_MatteTexture *p = (M_MatteTexture *) node;
   22813           1 :         gf_node_unregister((GF_Node *) p->surfaceA, (GF_Node *) p);
   22814           1 :         gf_node_unregister((GF_Node *) p->surfaceB, (GF_Node *) p);
   22815           1 :         gf_node_unregister((GF_Node *) p->alphaSurface, (GF_Node *) p);
   22816           1 :         gf_sg_sfstring_del(p->operation);
   22817           1 :         gf_sg_mffloat_del(p->parameter);
   22818           1 :         gf_node_free((GF_Node *) p);
   22819           1 : }
   22820             : 
   22821             : static const u16 MatteTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   22822             : static const u16 MatteTexture_In2All[] = { 3, 5, 6};
   22823             : static const u16 MatteTexture_Out2All[] = { 3, 5, 6};
   22824             : 
   22825             : static u32 MatteTexture_get_field_count(GF_Node *node, u8 IndexMode)
   22826             : {
   22827             :         switch(IndexMode) {
   22828             :         case GF_SG_FIELD_CODING_IN:
   22829             :                 return 3;
   22830             :         case GF_SG_FIELD_CODING_DEF:
   22831             :                 return 7;
   22832             :         case GF_SG_FIELD_CODING_OUT:
   22833             :                 return 3;
   22834             :         case GF_SG_FIELD_CODING_DYN:
   22835             :                 return 0;
   22836             :         default:
   22837             :                 return 7;
   22838             :         }
   22839             : }
   22840             : 
   22841             : static GF_Err MatteTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22842             : {
   22843           7 :         switch(IndexMode) {
   22844           0 :         case GF_SG_FIELD_CODING_IN:
   22845           0 :                 *allField = MatteTexture_In2All[inField];
   22846             :                 return GF_OK;
   22847           0 :         case GF_SG_FIELD_CODING_DEF:
   22848           0 :                 *allField = MatteTexture_Def2All[inField];
   22849             :                 return GF_OK;
   22850           0 :         case GF_SG_FIELD_CODING_OUT:
   22851           0 :                 *allField = MatteTexture_Out2All[inField];
   22852             :                 return GF_OK;
   22853             :         default:
   22854             :                 return GF_BAD_PARAM;
   22855             :         }
   22856             : }
   22857          14 : static GF_Err MatteTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   22858             : {
   22859          14 :         switch (info->fieldIndex) {
   22860           2 :         case 0:
   22861           2 :                 info->name = "surfaceA";
   22862           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22863           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   22864           2 :                 info->NDTtype = NDT_SFTextureNode;
   22865           2 :                 info->far_ptr = & ((M_MatteTexture *)node)->surfaceA;
   22866           2 :                 return GF_OK;
   22867           2 :         case 1:
   22868           2 :                 info->name = "surfaceB";
   22869           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22870           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   22871           2 :                 info->NDTtype = NDT_SFTextureNode;
   22872           2 :                 info->far_ptr = & ((M_MatteTexture *)node)->surfaceB;
   22873           2 :                 return GF_OK;
   22874           2 :         case 2:
   22875           2 :                 info->name = "alphaSurface";
   22876           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22877           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   22878           2 :                 info->NDTtype = NDT_SFTextureNode;
   22879           2 :                 info->far_ptr = & ((M_MatteTexture *)node)->alphaSurface;
   22880           2 :                 return GF_OK;
   22881           2 :         case 3:
   22882           2 :                 info->name = "operation";
   22883           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22884           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   22885           2 :                 info->far_ptr = & ((M_MatteTexture *) node)->operation;
   22886           2 :                 return GF_OK;
   22887           2 :         case 4:
   22888           2 :                 info->name = "overwrite";
   22889           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   22890           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   22891           2 :                 info->far_ptr = & ((M_MatteTexture *) node)->overwrite;
   22892           2 :                 return GF_OK;
   22893           2 :         case 5:
   22894           2 :                 info->name = "fraction";
   22895           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22896           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   22897           2 :                 info->far_ptr = & ((M_MatteTexture *) node)->fraction;
   22898           2 :                 return GF_OK;
   22899           2 :         case 6:
   22900           2 :                 info->name = "parameter";
   22901           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   22902           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   22903           2 :                 info->far_ptr = & ((M_MatteTexture *) node)->parameter;
   22904           2 :                 return GF_OK;
   22905             :         default:
   22906             :                 return GF_BAD_PARAM;
   22907             :         }
   22908             : }
   22909             : 
   22910             : 
   22911           7 : static s32 MatteTexture_get_field_index_by_name(char *name)
   22912             : {
   22913           7 :         if (!strcmp("surfaceA", name)) return 0;
   22914           6 :         if (!strcmp("surfaceB", name)) return 1;
   22915           5 :         if (!strcmp("alphaSurface", name)) return 2;
   22916           4 :         if (!strcmp("operation", name)) return 3;
   22917           3 :         if (!strcmp("overwrite", name)) return 4;
   22918           2 :         if (!strcmp("fraction", name)) return 5;
   22919           1 :         if (!strcmp("parameter", name)) return 6;
   22920           0 :         return -1;
   22921             : }
   22922             : static Bool MatteTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   22923             : {
   22924             :         switch (FieldIndex) {
   22925             :         default:
   22926             :                 return 0;
   22927             :         }
   22928             : }
   22929             : 
   22930             : 
   22931             : 
   22932           1 : GF_Node *MatteTexture_Create()
   22933             : {
   22934             :         M_MatteTexture *p;
   22935           1 :         GF_SAFEALLOC(p, M_MatteTexture);
   22936           1 :         if(!p) return NULL;
   22937           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MatteTexture);
   22938             : 
   22939             :         /*default field values*/
   22940           1 :         p->fraction = FLT2FIX(0);
   22941           1 :         p->parameter.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   22942           1 :         p->parameter.count = 1;
   22943           1 :         p->parameter.vals[0] = FLT2FIX(0);
   22944           1 :         return (GF_Node *)p;
   22945             : }
   22946             : 
   22947             : 
   22948             : /*
   22949             :         MediaBuffer Node deletion
   22950             : */
   22951             : 
   22952             : static void MediaBuffer_Del(GF_Node *node)
   22953             : {
   22954             :         M_MediaBuffer *p = (M_MediaBuffer *) node;
   22955           1 :         gf_sg_mfurl_del(p->url);
   22956           1 :         gf_node_free((GF_Node *) p);
   22957             : }
   22958             : 
   22959             : static const u16 MediaBuffer_Def2All[] = { 0, 1, 2, 3, 5};
   22960             : static const u16 MediaBuffer_In2All[] = { 0, 1, 2, 3, 5};
   22961             : static const u16 MediaBuffer_Out2All[] = { 0, 1, 2, 3, 4, 5};
   22962             : 
   22963             : static u32 MediaBuffer_get_field_count(GF_Node *node, u8 IndexMode)
   22964             : {
   22965             :         switch(IndexMode) {
   22966             :         case GF_SG_FIELD_CODING_IN:
   22967             :                 return 5;
   22968             :         case GF_SG_FIELD_CODING_DEF:
   22969             :                 return 5;
   22970             :         case GF_SG_FIELD_CODING_OUT:
   22971             :                 return 6;
   22972             :         case GF_SG_FIELD_CODING_DYN:
   22973             :                 return 0;
   22974             :         default:
   22975             :                 return 6;
   22976             :         }
   22977             : }
   22978             : 
   22979             : static GF_Err MediaBuffer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   22980             : {
   22981           6 :         switch(IndexMode) {
   22982           0 :         case GF_SG_FIELD_CODING_IN:
   22983           0 :                 *allField = MediaBuffer_In2All[inField];
   22984             :                 return GF_OK;
   22985           0 :         case GF_SG_FIELD_CODING_DEF:
   22986           0 :                 *allField = MediaBuffer_Def2All[inField];
   22987             :                 return GF_OK;
   22988           0 :         case GF_SG_FIELD_CODING_OUT:
   22989           0 :                 *allField = MediaBuffer_Out2All[inField];
   22990             :                 return GF_OK;
   22991             :         default:
   22992             :                 return GF_BAD_PARAM;
   22993             :         }
   22994             : }
   22995          12 : static GF_Err MediaBuffer_get_field(GF_Node *node, GF_FieldInfo *info)
   22996             : {
   22997          12 :         switch (info->fieldIndex) {
   22998           2 :         case 0:
   22999           2 :                 info->name = "bufferSize";
   23000           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23001           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23002           2 :                 info->far_ptr = & ((M_MediaBuffer *) node)->bufferSize;
   23003           2 :                 return GF_OK;
   23004           2 :         case 1:
   23005           2 :                 info->name = "url";
   23006           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23007           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   23008           2 :                 info->far_ptr = & ((M_MediaBuffer *) node)->url;
   23009           2 :                 return GF_OK;
   23010           2 :         case 2:
   23011           2 :                 info->name = "mediaStartTime";
   23012           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23013           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23014           2 :                 info->far_ptr = & ((M_MediaBuffer *) node)->mediaStartTime;
   23015           2 :                 return GF_OK;
   23016           2 :         case 3:
   23017           2 :                 info->name = "mediaStopTime";
   23018           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23019           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23020           2 :                 info->far_ptr = & ((M_MediaBuffer *) node)->mediaStopTime;
   23021           2 :                 return GF_OK;
   23022           2 :         case 4:
   23023           2 :                 info->name = "isBuffered";
   23024           2 :                 info->eventType = GF_SG_EVENT_OUT;
   23025           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23026           2 :                 info->far_ptr = & ((M_MediaBuffer *) node)->isBuffered;
   23027           2 :                 return GF_OK;
   23028           2 :         case 5:
   23029           2 :                 info->name = "enabled";
   23030           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23031           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23032           2 :                 info->far_ptr = & ((M_MediaBuffer *) node)->enabled;
   23033           2 :                 return GF_OK;
   23034             :         default:
   23035             :                 return GF_BAD_PARAM;
   23036             :         }
   23037             : }
   23038             : 
   23039             : 
   23040           6 : static s32 MediaBuffer_get_field_index_by_name(char *name)
   23041             : {
   23042           6 :         if (!strcmp("bufferSize", name)) return 0;
   23043           5 :         if (!strcmp("url", name)) return 1;
   23044           4 :         if (!strcmp("mediaStartTime", name)) return 2;
   23045           3 :         if (!strcmp("mediaStopTime", name)) return 3;
   23046           2 :         if (!strcmp("isBuffered", name)) return 4;
   23047           1 :         if (!strcmp("enabled", name)) return 5;
   23048           0 :         return -1;
   23049             : }
   23050             : static Bool MediaBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23051             : {
   23052             :         switch (FieldIndex) {
   23053             :         default:
   23054             :                 return 0;
   23055             :         }
   23056             : }
   23057             : 
   23058             : 
   23059             : 
   23060           1 : GF_Node *MediaBuffer_Create()
   23061             : {
   23062             :         M_MediaBuffer *p;
   23063           1 :         GF_SAFEALLOC(p, M_MediaBuffer);
   23064           1 :         if(!p) return NULL;
   23065           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MediaBuffer);
   23066             : 
   23067             :         /*default field values*/
   23068           1 :         p->bufferSize = FLT2FIX(0.0);
   23069           1 :         p->mediaStartTime = -1;
   23070           1 :         p->mediaStopTime = FIX_MAX;
   23071           1 :         p->enabled = 1;
   23072           1 :         return (GF_Node *)p;
   23073             : }
   23074             : 
   23075             : 
   23076             : /*
   23077             :         MediaControl Node deletion
   23078             : */
   23079             : 
   23080             : static void MediaControl_Del(GF_Node *node)
   23081             : {
   23082             :         M_MediaControl *p = (M_MediaControl *) node;
   23083          54 :         gf_sg_mfurl_del(p->url);
   23084          54 :         gf_node_free((GF_Node *) p);
   23085             : }
   23086             : 
   23087             : static const u16 MediaControl_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   23088             : static const u16 MediaControl_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   23089             : static const u16 MediaControl_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   23090             : 
   23091             : static u32 MediaControl_get_field_count(GF_Node *node, u8 IndexMode)
   23092             : {
   23093             :         switch(IndexMode) {
   23094             :         case GF_SG_FIELD_CODING_IN:
   23095             :                 return 8;
   23096             :         case GF_SG_FIELD_CODING_DEF:
   23097             :                 return 8;
   23098             :         case GF_SG_FIELD_CODING_OUT:
   23099             :                 return 9;
   23100             :         case GF_SG_FIELD_CODING_DYN:
   23101             :                 return 0;
   23102             :         default:
   23103             :                 return 9;
   23104             :         }
   23105             : }
   23106             : 
   23107             : static GF_Err MediaControl_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23108             : {
   23109         371 :         switch(IndexMode) {
   23110         234 :         case GF_SG_FIELD_CODING_IN:
   23111         234 :                 *allField = MediaControl_In2All[inField];
   23112             :                 return GF_OK;
   23113         128 :         case GF_SG_FIELD_CODING_DEF:
   23114         128 :                 *allField = MediaControl_Def2All[inField];
   23115             :                 return GF_OK;
   23116           0 :         case GF_SG_FIELD_CODING_OUT:
   23117           0 :                 *allField = MediaControl_Out2All[inField];
   23118             :                 return GF_OK;
   23119             :         default:
   23120             :                 return GF_BAD_PARAM;
   23121             :         }
   23122             : }
   23123        1236 : static GF_Err MediaControl_get_field(GF_Node *node, GF_FieldInfo *info)
   23124             : {
   23125        1236 :         switch (info->fieldIndex) {
   23126         101 :         case 0:
   23127         101 :                 info->name = "url";
   23128         101 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23129         101 :                 info->fieldType = GF_SG_VRML_MFURL;
   23130         101 :                 info->far_ptr = & ((M_MediaControl *) node)->url;
   23131         101 :                 return GF_OK;
   23132         107 :         case 1:
   23133         107 :                 info->name = "mediaStartTime";
   23134         107 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23135         107 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23136         107 :                 info->far_ptr = & ((M_MediaControl *) node)->mediaStartTime;
   23137         107 :                 return GF_OK;
   23138         120 :         case 2:
   23139         120 :                 info->name = "mediaStopTime";
   23140         120 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23141         120 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23142         120 :                 info->far_ptr = & ((M_MediaControl *) node)->mediaStopTime;
   23143         120 :                 return GF_OK;
   23144         692 :         case 3:
   23145         692 :                 info->name = "mediaSpeed";
   23146         692 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23147         692 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23148         692 :                 info->far_ptr = & ((M_MediaControl *) node)->mediaSpeed;
   23149         692 :                 return GF_OK;
   23150          63 :         case 4:
   23151          63 :                 info->name = "loop";
   23152          63 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23153          63 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23154          63 :                 info->far_ptr = & ((M_MediaControl *) node)->loop;
   23155          63 :                 return GF_OK;
   23156          50 :         case 5:
   23157          50 :                 info->name = "preRoll";
   23158          50 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23159          50 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23160          50 :                 info->far_ptr = & ((M_MediaControl *) node)->preRoll;
   23161          50 :                 return GF_OK;
   23162          51 :         case 6:
   23163          51 :                 info->name = "mute";
   23164          51 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23165          51 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23166          51 :                 info->far_ptr = & ((M_MediaControl *) node)->mute;
   23167          51 :                 return GF_OK;
   23168          42 :         case 7:
   23169          42 :                 info->name = "enabled";
   23170          42 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23171          42 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23172          42 :                 info->far_ptr = & ((M_MediaControl *) node)->enabled;
   23173          42 :                 return GF_OK;
   23174          10 :         case 8:
   23175          10 :                 info->name = "isPreRolled";
   23176          10 :                 info->eventType = GF_SG_EVENT_OUT;
   23177          10 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23178          10 :                 info->far_ptr = & ((M_MediaControl *) node)->isPreRolled;
   23179          10 :                 return GF_OK;
   23180             :         default:
   23181             :                 return GF_BAD_PARAM;
   23182             :         }
   23183             : }
   23184             : 
   23185             : 
   23186         769 : static s32 MediaControl_get_field_index_by_name(char *name)
   23187             : {
   23188         769 :         if (!strcmp("url", name)) return 0;
   23189         735 :         if (!strcmp("mediaStartTime", name)) return 1;
   23190         698 :         if (!strcmp("mediaStopTime", name)) return 2;
   23191         619 :         if (!strcmp("mediaSpeed", name)) return 3;
   23192          28 :         if (!strcmp("loop", name)) return 4;
   23193          16 :         if (!strcmp("preRoll", name)) return 5;
   23194           7 :         if (!strcmp("mute", name)) return 6;
   23195           2 :         if (!strcmp("enabled", name)) return 7;
   23196           1 :         if (!strcmp("isPreRolled", name)) return 8;
   23197           0 :         return -1;
   23198             : }
   23199             : static Bool MediaControl_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23200             : {
   23201             :         switch (FieldIndex) {
   23202             :         default:
   23203             :                 return 0;
   23204             :         }
   23205             : }
   23206             : 
   23207             : 
   23208             : 
   23209          54 : GF_Node *MediaControl_Create()
   23210             : {
   23211             :         M_MediaControl *p;
   23212          54 :         GF_SAFEALLOC(p, M_MediaControl);
   23213          54 :         if(!p) return NULL;
   23214          54 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MediaControl);
   23215             : 
   23216             :         /*default field values*/
   23217          54 :         p->mediaStartTime = -1;
   23218          54 :         p->mediaStopTime = FIX_MAX;
   23219          54 :         p->mediaSpeed = FLT2FIX(1.0);
   23220          54 :         p->preRoll = 1;
   23221          54 :         p->enabled = 1;
   23222          54 :         return (GF_Node *)p;
   23223             : }
   23224             : 
   23225             : 
   23226             : /*
   23227             :         MediaSensor Node deletion
   23228             : */
   23229             : 
   23230          17 : static void MediaSensor_Del(GF_Node *node)
   23231             : {
   23232             :         M_MediaSensor *p = (M_MediaSensor *) node;
   23233          17 :         gf_sg_mfurl_del(p->url);
   23234          17 :         gf_sg_mfstring_del(p->info);
   23235          17 :         gf_node_free((GF_Node *) p);
   23236          17 : }
   23237             : 
   23238             : static const u16 MediaSensor_Def2All[] = { 0};
   23239             : static const u16 MediaSensor_In2All[] = { 0};
   23240             : static const u16 MediaSensor_Out2All[] = { 0, 1, 2, 3, 4, 5};
   23241             : 
   23242             : static u32 MediaSensor_get_field_count(GF_Node *node, u8 IndexMode)
   23243             : {
   23244             :         switch(IndexMode) {
   23245             :         case GF_SG_FIELD_CODING_IN:
   23246             :                 return 1;
   23247             :         case GF_SG_FIELD_CODING_DEF:
   23248             :                 return 1;
   23249             :         case GF_SG_FIELD_CODING_OUT:
   23250             :                 return 6;
   23251             :         case GF_SG_FIELD_CODING_DYN:
   23252             :                 return 0;
   23253             :         default:
   23254             :                 return 6;
   23255             :         }
   23256             : }
   23257             : 
   23258             : static GF_Err MediaSensor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23259             : {
   23260           6 :         switch(IndexMode) {
   23261           0 :         case GF_SG_FIELD_CODING_IN:
   23262           0 :                 *allField = MediaSensor_In2All[inField];
   23263             :                 return GF_OK;
   23264           0 :         case GF_SG_FIELD_CODING_DEF:
   23265           0 :                 *allField = MediaSensor_Def2All[inField];
   23266             :                 return GF_OK;
   23267           0 :         case GF_SG_FIELD_CODING_OUT:
   23268           0 :                 *allField = MediaSensor_Out2All[inField];
   23269             :                 return GF_OK;
   23270             :         default:
   23271             :                 return GF_BAD_PARAM;
   23272             :         }
   23273             : }
   23274          94 : static GF_Err MediaSensor_get_field(GF_Node *node, GF_FieldInfo *info)
   23275             : {
   23276          94 :         switch (info->fieldIndex) {
   23277          17 :         case 0:
   23278          17 :                 info->name = "url";
   23279          17 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23280          17 :                 info->fieldType = GF_SG_VRML_MFURL;
   23281          17 :                 info->far_ptr = & ((M_MediaSensor *) node)->url;
   23282          17 :                 return GF_OK;
   23283          27 :         case 1:
   23284          27 :                 info->name = "mediaCurrentTime";
   23285          27 :                 info->eventType = GF_SG_EVENT_OUT;
   23286          27 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23287          27 :                 info->far_ptr = & ((M_MediaSensor *) node)->mediaCurrentTime;
   23288          27 :                 return GF_OK;
   23289           4 :         case 2:
   23290           4 :                 info->name = "streamObjectStartTime";
   23291           4 :                 info->eventType = GF_SG_EVENT_OUT;
   23292           4 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23293           4 :                 info->far_ptr = & ((M_MediaSensor *) node)->streamObjectStartTime;
   23294           4 :                 return GF_OK;
   23295          26 :         case 3:
   23296          26 :                 info->name = "mediaDuration";
   23297          26 :                 info->eventType = GF_SG_EVENT_OUT;
   23298          26 :                 info->fieldType = GF_SG_VRML_SFTIME;
   23299          26 :                 info->far_ptr = & ((M_MediaSensor *) node)->mediaDuration;
   23300          26 :                 return GF_OK;
   23301          16 :         case 4:
   23302          16 :                 info->name = "isActive";
   23303          16 :                 info->eventType = GF_SG_EVENT_OUT;
   23304          16 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23305          16 :                 info->far_ptr = & ((M_MediaSensor *) node)->isActive;
   23306          16 :                 return GF_OK;
   23307           4 :         case 5:
   23308           4 :                 info->name = "info";
   23309           4 :                 info->eventType = GF_SG_EVENT_OUT;
   23310           4 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   23311           4 :                 info->far_ptr = & ((M_MediaSensor *) node)->info;
   23312           4 :                 return GF_OK;
   23313             :         default:
   23314             :                 return GF_BAD_PARAM;
   23315             :         }
   23316             : }
   23317             : 
   23318             : 
   23319          56 : static s32 MediaSensor_get_field_index_by_name(char *name)
   23320             : {
   23321          56 :         if (!strcmp("url", name)) return 0;
   23322          41 :         if (!strcmp("mediaCurrentTime", name)) return 1;
   23323          27 :         if (!strcmp("streamObjectStartTime", name)) return 2;
   23324          24 :         if (!strcmp("mediaDuration", name)) return 3;
   23325          11 :         if (!strcmp("isActive", name)) return 4;
   23326           3 :         if (!strcmp("info", name)) return 5;
   23327           0 :         return -1;
   23328             : }
   23329             : static Bool MediaSensor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23330             : {
   23331             :         switch (FieldIndex) {
   23332             :         default:
   23333             :                 return 0;
   23334             :         }
   23335             : }
   23336             : 
   23337             : 
   23338             : 
   23339          17 : GF_Node *MediaSensor_Create()
   23340             : {
   23341             :         M_MediaSensor *p;
   23342          17 :         GF_SAFEALLOC(p, M_MediaSensor);
   23343          17 :         if(!p) return NULL;
   23344          17 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MediaSensor);
   23345             : 
   23346             :         /*default field values*/
   23347          17 :         return (GF_Node *)p;
   23348             : }
   23349             : 
   23350             : 
   23351             : /*
   23352             :         BitWrapper Node deletion
   23353             : */
   23354             : 
   23355          67 : static void BitWrapper_Del(GF_Node *node)
   23356             : {
   23357             :         M_BitWrapper *p = (M_BitWrapper *) node;
   23358          67 :         gf_node_unregister((GF_Node *) p->node, (GF_Node *) p);
   23359          67 :         gf_sg_mfurl_del(p->url);
   23360          67 :         gf_sg_sfstring_del(p->buffer);
   23361          67 :         gf_node_free((GF_Node *) p);
   23362          67 : }
   23363             : 
   23364             : static const u16 BitWrapper_Def2All[] = { 0, 1, 2, 3};
   23365             : 
   23366             : static u32 BitWrapper_get_field_count(GF_Node *node, u8 IndexMode)
   23367             : {
   23368          78 :         switch(IndexMode) {
   23369             :         case GF_SG_FIELD_CODING_IN:
   23370             :                 return 0;
   23371          58 :         case GF_SG_FIELD_CODING_DEF:
   23372             :                 return 4;
   23373             :         case GF_SG_FIELD_CODING_OUT:
   23374             :                 return 0;
   23375             :         case GF_SG_FIELD_CODING_DYN:
   23376             :                 return 0;
   23377          17 :         default:
   23378             :                 return 4;
   23379             :         }
   23380             : }
   23381             : 
   23382             : static GF_Err BitWrapper_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23383             : {
   23384         103 :         switch(IndexMode) {
   23385          99 :         case GF_SG_FIELD_CODING_DEF:
   23386          99 :                 *allField = BitWrapper_Def2All[inField];
   23387             :                 return GF_OK;
   23388             :         default:
   23389             :                 return GF_BAD_PARAM;
   23390             :         }
   23391             : }
   23392         320 : static GF_Err BitWrapper_get_field(GF_Node *node, GF_FieldInfo *info)
   23393             : {
   23394         320 :         switch (info->fieldIndex) {
   23395          38 :         case 0:
   23396          38 :                 info->name = "node";
   23397          38 :                 info->eventType = GF_SG_EVENT_FIELD;
   23398          38 :                 info->fieldType = GF_SG_VRML_SFNODE;
   23399          38 :                 info->NDTtype = NDT_SFWorldNode;
   23400          38 :                 info->far_ptr = & ((M_BitWrapper *)node)->node;
   23401          38 :                 return GF_OK;
   23402          74 :         case 1:
   23403          74 :                 info->name = "type";
   23404          74 :                 info->eventType = GF_SG_EVENT_FIELD;
   23405          74 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23406          74 :                 info->far_ptr = & ((M_BitWrapper *) node)->type;
   23407          74 :                 return GF_OK;
   23408          74 :         case 2:
   23409          74 :                 info->name = "url";
   23410          74 :                 info->eventType = GF_SG_EVENT_FIELD;
   23411          74 :                 info->fieldType = GF_SG_VRML_MFURL;
   23412          74 :                 info->far_ptr = & ((M_BitWrapper *) node)->url;
   23413          74 :                 return GF_OK;
   23414         134 :         case 3:
   23415         134 :                 info->name = "buffer";
   23416         134 :                 info->eventType = GF_SG_EVENT_FIELD;
   23417         134 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   23418         134 :                 info->far_ptr = & ((M_BitWrapper *) node)->buffer;
   23419         134 :                 return GF_OK;
   23420             :         default:
   23421             :                 return GF_BAD_PARAM;
   23422             :         }
   23423             : }
   23424             : 
   23425             : 
   23426          19 : static s32 BitWrapper_get_field_index_by_name(char *name)
   23427             : {
   23428          19 :         if (!strcmp("node", name)) return 0;
   23429          18 :         if (!strcmp("type", name)) return 1;
   23430          17 :         if (!strcmp("url", name)) return 2;
   23431          16 :         if (!strcmp("buffer", name)) return 3;
   23432           0 :         return -1;
   23433             : }
   23434             : static Bool BitWrapper_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23435             : {
   23436             :         switch (FieldIndex) {
   23437             :         default:
   23438             :                 return 0;
   23439             :         }
   23440             : }
   23441             : 
   23442             : 
   23443             : 
   23444          67 : GF_Node *BitWrapper_Create()
   23445             : {
   23446             :         M_BitWrapper *p;
   23447          67 :         GF_SAFEALLOC(p, M_BitWrapper);
   23448          67 :         if(!p) return NULL;
   23449          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BitWrapper);
   23450             : 
   23451             :         /*default field values*/
   23452          67 :         p->type = 0;
   23453          67 :         return (GF_Node *)p;
   23454             : }
   23455             : 
   23456             : 
   23457             : /*
   23458             :         CoordinateInterpolator4D Node deletion
   23459             : */
   23460             : 
   23461           2 : static void CoordinateInterpolator4D_Del(GF_Node *node)
   23462             : {
   23463             :         M_CoordinateInterpolator4D *p = (M_CoordinateInterpolator4D *) node;
   23464           2 :         gf_sg_mffloat_del(p->key);
   23465           2 :         gf_sg_mfvec4f_del(p->keyValue);
   23466           2 :         gf_sg_mfvec4f_del(p->value_changed);
   23467           2 :         gf_node_free((GF_Node *) p);
   23468           2 : }
   23469             : 
   23470             : static const u16 CoordinateInterpolator4D_Def2All[] = { 1, 2};
   23471             : static const u16 CoordinateInterpolator4D_In2All[] = { 0, 1, 2};
   23472             : static const u16 CoordinateInterpolator4D_Out2All[] = { 1, 2, 3};
   23473             : 
   23474             : static u32 CoordinateInterpolator4D_get_field_count(GF_Node *node, u8 IndexMode)
   23475             : {
   23476             :         switch(IndexMode) {
   23477             :         case GF_SG_FIELD_CODING_IN:
   23478             :                 return 3;
   23479             :         case GF_SG_FIELD_CODING_DEF:
   23480             :                 return 2;
   23481             :         case GF_SG_FIELD_CODING_OUT:
   23482             :                 return 3;
   23483             :         case GF_SG_FIELD_CODING_DYN:
   23484             :                 return 0;
   23485             :         default:
   23486             :                 return 4;
   23487             :         }
   23488             : }
   23489             : 
   23490             : static GF_Err CoordinateInterpolator4D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23491             : {
   23492           4 :         switch(IndexMode) {
   23493           0 :         case GF_SG_FIELD_CODING_IN:
   23494           0 :                 *allField = CoordinateInterpolator4D_In2All[inField];
   23495             :                 return GF_OK;
   23496           0 :         case GF_SG_FIELD_CODING_DEF:
   23497           0 :                 *allField = CoordinateInterpolator4D_Def2All[inField];
   23498             :                 return GF_OK;
   23499           0 :         case GF_SG_FIELD_CODING_OUT:
   23500           0 :                 *allField = CoordinateInterpolator4D_Out2All[inField];
   23501             :                 return GF_OK;
   23502             :         default:
   23503             :                 return GF_BAD_PARAM;
   23504             :         }
   23505             : }
   23506          12 : static GF_Err CoordinateInterpolator4D_get_field(GF_Node *node, GF_FieldInfo *info)
   23507             : {
   23508          12 :         switch (info->fieldIndex) {
   23509           4 :         case 0:
   23510           4 :                 info->name = "set_fraction";
   23511           4 :                 info->eventType = GF_SG_EVENT_IN;
   23512           4 :                 info->on_event_in = ((M_CoordinateInterpolator4D *)node)->on_set_fraction;
   23513           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23514           4 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->set_fraction;
   23515           4 :                 return GF_OK;
   23516           3 :         case 1:
   23517           3 :                 info->name = "key";
   23518           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23519           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23520           3 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->key;
   23521           3 :                 return GF_OK;
   23522           3 :         case 2:
   23523           3 :                 info->name = "keyValue";
   23524           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23525           3 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   23526           3 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->keyValue;
   23527           3 :                 return GF_OK;
   23528           2 :         case 3:
   23529           2 :                 info->name = "value_changed";
   23530           2 :                 info->eventType = GF_SG_EVENT_OUT;
   23531           2 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   23532           2 :                 info->far_ptr = & ((M_CoordinateInterpolator4D *) node)->value_changed;
   23533           2 :                 return GF_OK;
   23534             :         default:
   23535             :                 return GF_BAD_PARAM;
   23536             :         }
   23537             : }
   23538             : 
   23539             : 
   23540           7 : static s32 CoordinateInterpolator4D_get_field_index_by_name(char *name)
   23541             : {
   23542           7 :         if (!strcmp("set_fraction", name)) return 0;
   23543           5 :         if (!strcmp("key", name)) return 1;
   23544           3 :         if (!strcmp("keyValue", name)) return 2;
   23545           1 :         if (!strcmp("value_changed", name)) return 3;
   23546           0 :         return -1;
   23547             : }
   23548             : static Bool CoordinateInterpolator4D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23549             : {
   23550           4 :         switch (FieldIndex) {
   23551           1 :         case 1:
   23552           1 :                 *AType = 0;
   23553           1 :                 *QType = 8;
   23554           1 :                 *b_min = FLT2FIX(0);
   23555           1 :                 *b_max = FLT2FIX(1);
   23556             :                 return 1;
   23557           1 :         case 2:
   23558           1 :                 *AType = 0;
   23559           1 :                 *QType = 15;
   23560           1 :                 *b_min = FIX_MIN;
   23561           1 :                 *b_max = FIX_MAX;
   23562             :                 return 1;
   23563             :         default:
   23564             :                 return 0;
   23565             :         }
   23566             : }
   23567             : 
   23568             : 
   23569             : 
   23570           2 : GF_Node *CoordinateInterpolator4D_Create()
   23571             : {
   23572             :         M_CoordinateInterpolator4D *p;
   23573           2 :         GF_SAFEALLOC(p, M_CoordinateInterpolator4D);
   23574           2 :         if(!p) return NULL;
   23575           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CoordinateInterpolator4D);
   23576             : 
   23577             :         /*default field values*/
   23578           2 :         return (GF_Node *)p;
   23579             : }
   23580             : 
   23581             : 
   23582             : /*
   23583             :         DepthImage Node deletion
   23584             : */
   23585             : 
   23586             : static void DepthImage_Del(GF_Node *node)
   23587             : {
   23588             :         M_DepthImage *p = (M_DepthImage *) node;
   23589           1 :         gf_node_unregister((GF_Node *) p->diTexture, (GF_Node *) p);
   23590           1 :         gf_node_free((GF_Node *) p);
   23591             : }
   23592             : 
   23593             : static const u16 DepthImage_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   23594             : 
   23595             : static u32 DepthImage_get_field_count(GF_Node *node, u8 IndexMode)
   23596             : {
   23597           6 :         switch(IndexMode) {
   23598             :         case GF_SG_FIELD_CODING_IN:
   23599             :                 return 0;
   23600           1 :         case GF_SG_FIELD_CODING_DEF:
   23601             :                 return 7;
   23602             :         case GF_SG_FIELD_CODING_OUT:
   23603             :                 return 0;
   23604             :         case GF_SG_FIELD_CODING_DYN:
   23605             :                 return 0;
   23606           2 :         default:
   23607             :                 return 7;
   23608             :         }
   23609             : }
   23610             : 
   23611             : static GF_Err DepthImage_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23612             : {
   23613           7 :         switch(IndexMode) {
   23614           0 :         case GF_SG_FIELD_CODING_DEF:
   23615           0 :                 *allField = DepthImage_Def2All[inField];
   23616             :                 return GF_OK;
   23617             :         default:
   23618             :                 return GF_BAD_PARAM;
   23619             :         }
   23620             : }
   23621          14 : static GF_Err DepthImage_get_field(GF_Node *node, GF_FieldInfo *info)
   23622             : {
   23623          14 :         switch (info->fieldIndex) {
   23624           2 :         case 0:
   23625           2 :                 info->name = "diTexture";
   23626           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23627           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   23628           2 :                 info->NDTtype = NDT_SFDepthTextureNode;
   23629           2 :                 info->far_ptr = & ((M_DepthImage *)node)->diTexture;
   23630           2 :                 return GF_OK;
   23631           2 :         case 1:
   23632           2 :                 info->name = "farPlane";
   23633           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23634           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23635           2 :                 info->far_ptr = & ((M_DepthImage *) node)->farPlane;
   23636           2 :                 return GF_OK;
   23637           2 :         case 2:
   23638           2 :                 info->name = "fieldOfView";
   23639           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23640           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   23641           2 :                 info->far_ptr = & ((M_DepthImage *) node)->fieldOfView;
   23642           2 :                 return GF_OK;
   23643           2 :         case 3:
   23644           2 :                 info->name = "nearPlane";
   23645           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23646           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   23647           2 :                 info->far_ptr = & ((M_DepthImage *) node)->nearPlane;
   23648           2 :                 return GF_OK;
   23649           2 :         case 4:
   23650           2 :                 info->name = "orientation";
   23651           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23652           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   23653           2 :                 info->far_ptr = & ((M_DepthImage *) node)->orientation;
   23654           2 :                 return GF_OK;
   23655           2 :         case 5:
   23656           2 :                 info->name = "orthographic";
   23657           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23658           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   23659           2 :                 info->far_ptr = & ((M_DepthImage *) node)->orthographic;
   23660           2 :                 return GF_OK;
   23661           2 :         case 6:
   23662           2 :                 info->name = "position";
   23663           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23664           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   23665           2 :                 info->far_ptr = & ((M_DepthImage *) node)->position;
   23666           2 :                 return GF_OK;
   23667             :         default:
   23668             :                 return GF_BAD_PARAM;
   23669             :         }
   23670             : }
   23671             : 
   23672             : 
   23673           7 : static s32 DepthImage_get_field_index_by_name(char *name)
   23674             : {
   23675           7 :         if (!strcmp("diTexture", name)) return 0;
   23676           6 :         if (!strcmp("farPlane", name)) return 1;
   23677           5 :         if (!strcmp("fieldOfView", name)) return 2;
   23678           4 :         if (!strcmp("nearPlane", name)) return 3;
   23679           3 :         if (!strcmp("orientation", name)) return 4;
   23680           2 :         if (!strcmp("orthographic", name)) return 5;
   23681           1 :         if (!strcmp("position", name)) return 6;
   23682           0 :         return -1;
   23683             : }
   23684             : static Bool DepthImage_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23685             : {
   23686             :         switch (FieldIndex) {
   23687             :         default:
   23688             :                 return 0;
   23689             :         }
   23690             : }
   23691             : 
   23692             : 
   23693             : 
   23694           1 : GF_Node *DepthImage_Create()
   23695             : {
   23696             :         M_DepthImage *p;
   23697           1 :         GF_SAFEALLOC(p, M_DepthImage);
   23698           1 :         if(!p) return NULL;
   23699           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DepthImage);
   23700             : 
   23701             :         /*default field values*/
   23702           1 :         p->farPlane = FLT2FIX(100);
   23703           1 :         p->fieldOfView.x = FLT2FIX(0.785398);
   23704           1 :         p->fieldOfView.y = FLT2FIX(0.785398);
   23705           1 :         p->nearPlane = FLT2FIX(10);
   23706           1 :         p->orientation.x = FLT2FIX(0);
   23707           1 :         p->orientation.y = FLT2FIX(0);
   23708           1 :         p->orientation.z = FLT2FIX(1);
   23709           1 :         p->orientation.q = FLT2FIX(0);
   23710           1 :         p->orthographic = 1;
   23711           1 :         p->position.x = FLT2FIX(0);
   23712           1 :         p->position.y = FLT2FIX(0);
   23713           1 :         p->position.z = FLT2FIX(10);
   23714           1 :         return (GF_Node *)p;
   23715             : }
   23716             : 
   23717             : 
   23718             : /*
   23719             :         FFD Node deletion
   23720             : */
   23721             : 
   23722           1 : static void FFD_Del(GF_Node *node)
   23723             : {
   23724             :         M_FFD *p = (M_FFD *) node;
   23725           1 :         gf_sg_mfvec4f_del(p->controlPoint);
   23726           1 :         gf_sg_mffloat_del(p->uKnot);
   23727           1 :         gf_sg_mffloat_del(p->vKnot);
   23728           1 :         gf_sg_mffloat_del(p->wKnot);
   23729           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   23730           1 :         gf_node_free((GF_Node *) p);
   23731           1 : }
   23732             : 
   23733             : static const u16 FFD_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   23734             : static const u16 FFD_In2All[] = { 0, 1, 2, 3};
   23735             : static const u16 FFD_Out2All[] = { 2, 3};
   23736             : static const u16 FFD_Dyn2All[] = { 3};
   23737             : 
   23738             : static u32 FFD_get_field_count(GF_Node *node, u8 IndexMode)
   23739             : {
   23740             :         switch(IndexMode) {
   23741             :         case GF_SG_FIELD_CODING_IN:
   23742             :                 return 4;
   23743             :         case GF_SG_FIELD_CODING_DEF:
   23744             :                 return 11;
   23745             :         case GF_SG_FIELD_CODING_OUT:
   23746             :                 return 2;
   23747             :         case GF_SG_FIELD_CODING_DYN:
   23748             :                 return 1;
   23749             :         default:
   23750             :                 return 13;
   23751             :         }
   23752             : }
   23753             : 
   23754             : static GF_Err FFD_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23755             : {
   23756          13 :         switch(IndexMode) {
   23757           0 :         case GF_SG_FIELD_CODING_IN:
   23758           0 :                 *allField = FFD_In2All[inField];
   23759             :                 return GF_OK;
   23760           0 :         case GF_SG_FIELD_CODING_DEF:
   23761           0 :                 *allField = FFD_Def2All[inField];
   23762             :                 return GF_OK;
   23763           0 :         case GF_SG_FIELD_CODING_OUT:
   23764           0 :                 *allField = FFD_Out2All[inField];
   23765             :                 return GF_OK;
   23766           0 :         case GF_SG_FIELD_CODING_DYN:
   23767           0 :                 *allField = FFD_Dyn2All[inField];
   23768             :                 return GF_OK;
   23769             :         default:
   23770             :                 return GF_BAD_PARAM;
   23771             :         }
   23772             : }
   23773          26 : static GF_Err FFD_get_field(GF_Node *node, GF_FieldInfo *info)
   23774             : {
   23775          26 :         switch (info->fieldIndex) {
   23776           2 :         case 0:
   23777           2 :                 info->name = "addChildren";
   23778           2 :                 info->eventType = GF_SG_EVENT_IN;
   23779           2 :                 info->on_event_in = ((M_FFD *)node)->on_addChildren;
   23780           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   23781           2 :                 info->NDTtype = NDT_SF3DNode;
   23782           2 :                 info->far_ptr = & ((M_FFD *)node)->addChildren;
   23783           2 :                 return GF_OK;
   23784           2 :         case 1:
   23785           2 :                 info->name = "removeChildren";
   23786           2 :                 info->eventType = GF_SG_EVENT_IN;
   23787           2 :                 info->on_event_in = ((M_FFD *)node)->on_removeChildren;
   23788           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   23789           2 :                 info->NDTtype = NDT_SF3DNode;
   23790           2 :                 info->far_ptr = & ((M_FFD *)node)->removeChildren;
   23791           2 :                 return GF_OK;
   23792           2 :         case 2:
   23793           2 :                 info->name = "children";
   23794           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23795           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   23796           2 :                 info->NDTtype = NDT_SF3DNode;
   23797           2 :                 info->far_ptr = & ((M_FFD *)node)->children;
   23798           2 :                 return GF_OK;
   23799           2 :         case 3:
   23800           2 :                 info->name = "controlPoint";
   23801           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   23802           2 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   23803           2 :                 info->far_ptr = & ((M_FFD *) node)->controlPoint;
   23804           2 :                 return GF_OK;
   23805           2 :         case 4:
   23806           2 :                 info->name = "uDimension";
   23807           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23808           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23809           2 :                 info->far_ptr = & ((M_FFD *) node)->uDimension;
   23810           2 :                 return GF_OK;
   23811           2 :         case 5:
   23812           2 :                 info->name = "uKnot";
   23813           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23814           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23815           2 :                 info->far_ptr = & ((M_FFD *) node)->uKnot;
   23816           2 :                 return GF_OK;
   23817           2 :         case 6:
   23818           2 :                 info->name = "uOrder";
   23819           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23820           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23821           2 :                 info->far_ptr = & ((M_FFD *) node)->uOrder;
   23822           2 :                 return GF_OK;
   23823           2 :         case 7:
   23824           2 :                 info->name = "vDimension";
   23825           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23826           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23827           2 :                 info->far_ptr = & ((M_FFD *) node)->vDimension;
   23828           2 :                 return GF_OK;
   23829           2 :         case 8:
   23830           2 :                 info->name = "vKnot";
   23831           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23832           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23833           2 :                 info->far_ptr = & ((M_FFD *) node)->vKnot;
   23834           2 :                 return GF_OK;
   23835           2 :         case 9:
   23836           2 :                 info->name = "vOrder";
   23837           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23838           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23839           2 :                 info->far_ptr = & ((M_FFD *) node)->vOrder;
   23840           2 :                 return GF_OK;
   23841           2 :         case 10:
   23842           2 :                 info->name = "wDimension";
   23843           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23844           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23845           2 :                 info->far_ptr = & ((M_FFD *) node)->wDimension;
   23846           2 :                 return GF_OK;
   23847           2 :         case 11:
   23848           2 :                 info->name = "wKnot";
   23849           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23850           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   23851           2 :                 info->far_ptr = & ((M_FFD *) node)->wKnot;
   23852           2 :                 return GF_OK;
   23853           2 :         case 12:
   23854           2 :                 info->name = "wOrder";
   23855           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   23856           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   23857           2 :                 info->far_ptr = & ((M_FFD *) node)->wOrder;
   23858           2 :                 return GF_OK;
   23859             :         default:
   23860             :                 return GF_BAD_PARAM;
   23861             :         }
   23862             : }
   23863             : 
   23864             : 
   23865          13 : static s32 FFD_get_field_index_by_name(char *name)
   23866             : {
   23867          13 :         if (!strcmp("addChildren", name)) return 0;
   23868          12 :         if (!strcmp("removeChildren", name)) return 1;
   23869          11 :         if (!strcmp("children", name)) return 2;
   23870          10 :         if (!strcmp("controlPoint", name)) return 3;
   23871           9 :         if (!strcmp("uDimension", name)) return 4;
   23872           8 :         if (!strcmp("uKnot", name)) return 5;
   23873           7 :         if (!strcmp("uOrder", name)) return 6;
   23874           6 :         if (!strcmp("vDimension", name)) return 7;
   23875           5 :         if (!strcmp("vKnot", name)) return 8;
   23876           4 :         if (!strcmp("vOrder", name)) return 9;
   23877           3 :         if (!strcmp("wDimension", name)) return 10;
   23878           2 :         if (!strcmp("wKnot", name)) return 11;
   23879           1 :         if (!strcmp("wOrder", name)) return 12;
   23880           0 :         return -1;
   23881             : }
   23882          13 : static Bool FFD_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   23883             : {
   23884          13 :         switch (FieldIndex) {
   23885           1 :         case 3:
   23886           1 :                 *AType = 15;
   23887           1 :                 *QType = 15;
   23888           1 :                 *b_min = FIX_MIN;
   23889           1 :                 *b_max = FIX_MAX;
   23890             :                 return 1;
   23891           1 :         case 4:
   23892           1 :                 *AType = 0;
   23893           1 :                 *QType = 13;
   23894           1 :                 *QT13_bits = 8;
   23895           1 :                 *b_min = FLT2FIX(2);
   23896           1 :                 *b_max = FLT2FIX(257);
   23897             :                 return 1;
   23898           1 :         case 6:
   23899           1 :                 *AType = 0;
   23900           1 :                 *QType = 13;
   23901           1 :                 *QT13_bits = 5;
   23902           1 :                 *b_min = FLT2FIX(2);
   23903           1 :                 *b_max = FLT2FIX(33);
   23904             :                 return 1;
   23905           1 :         case 7:
   23906           1 :                 *AType = 0;
   23907           1 :                 *QType = 13;
   23908           1 :                 *QT13_bits = 8;
   23909           1 :                 *b_min = FLT2FIX(2);
   23910           1 :                 *b_max = FLT2FIX(257);
   23911             :                 return 1;
   23912           1 :         case 9:
   23913           1 :                 *AType = 0;
   23914           1 :                 *QType = 13;
   23915           1 :                 *QT13_bits = 5;
   23916           1 :                 *b_min = FLT2FIX(2);
   23917           1 :                 *b_max = FLT2FIX(33);
   23918             :                 return 1;
   23919           1 :         case 10:
   23920           1 :                 *AType = 0;
   23921           1 :                 *QType = 13;
   23922           1 :                 *QT13_bits = 8;
   23923           1 :                 *b_min = FLT2FIX(2);
   23924           1 :                 *b_max = FLT2FIX(257);
   23925             :                 return 1;
   23926           1 :         case 12:
   23927           1 :                 *AType = 0;
   23928           1 :                 *QType = 13;
   23929           1 :                 *QT13_bits = 5;
   23930           1 :                 *b_min = FLT2FIX(2);
   23931           1 :                 *b_max = FLT2FIX(33);
   23932             :                 return 1;
   23933             :         default:
   23934             :                 return 0;
   23935             :         }
   23936             : }
   23937             : 
   23938             : 
   23939             : 
   23940           1 : GF_Node *FFD_Create()
   23941             : {
   23942             :         M_FFD *p;
   23943           1 :         GF_SAFEALLOC(p, M_FFD);
   23944           1 :         if(!p) return NULL;
   23945           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FFD);
   23946           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   23947             : 
   23948             :         /*default field values*/
   23949           1 :         p->uDimension = 2;
   23950           1 :         p->uOrder = 2;
   23951           1 :         p->vDimension = 2;
   23952           1 :         p->vOrder = 2;
   23953           1 :         p->wDimension = 2;
   23954           1 :         p->wOrder = 2;
   23955           1 :         return (GF_Node *)p;
   23956             : }
   23957             : 
   23958             : 
   23959             : /*
   23960             :         Implicit Node deletion
   23961             : */
   23962             : 
   23963           1 : static void Implicit_Del(GF_Node *node)
   23964             : {
   23965             :         M_Implicit *p = (M_Implicit *) node;
   23966           1 :         gf_sg_mffloat_del(p->c);
   23967           1 :         gf_sg_mfint32_del(p->densities);
   23968           1 :         gf_node_free((GF_Node *) p);
   23969           1 : }
   23970             : 
   23971             : static const u16 Implicit_Def2All[] = { 0, 1, 2, 3, 4};
   23972             : static const u16 Implicit_In2All[] = { 0, 1, 2, 3, 4};
   23973             : static const u16 Implicit_Out2All[] = { 0, 1, 2, 3, 4};
   23974             : static const u16 Implicit_Dyn2All[] = { 0, 1};
   23975             : 
   23976             : static u32 Implicit_get_field_count(GF_Node *node, u8 IndexMode)
   23977             : {
   23978           6 :         switch(IndexMode) {
   23979             :         case GF_SG_FIELD_CODING_IN:
   23980             :                 return 5;
   23981             :         case GF_SG_FIELD_CODING_DEF:
   23982             :                 return 5;
   23983             :         case GF_SG_FIELD_CODING_OUT:
   23984             :                 return 5;
   23985           1 :         case GF_SG_FIELD_CODING_DYN:
   23986             :                 return 2;
   23987             :         default:
   23988             :                 return 5;
   23989             :         }
   23990             : }
   23991             : 
   23992             : static GF_Err Implicit_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   23993             : {
   23994           5 :         switch(IndexMode) {
   23995           0 :         case GF_SG_FIELD_CODING_IN:
   23996           0 :                 *allField = Implicit_In2All[inField];
   23997             :                 return GF_OK;
   23998           0 :         case GF_SG_FIELD_CODING_DEF:
   23999           0 :                 *allField = Implicit_Def2All[inField];
   24000             :                 return GF_OK;
   24001           0 :         case GF_SG_FIELD_CODING_OUT:
   24002           0 :                 *allField = Implicit_Out2All[inField];
   24003             :                 return GF_OK;
   24004           0 :         case GF_SG_FIELD_CODING_DYN:
   24005           0 :                 *allField = Implicit_Dyn2All[inField];
   24006             :                 return GF_OK;
   24007             :         default:
   24008             :                 return GF_BAD_PARAM;
   24009             :         }
   24010             : }
   24011          10 : static GF_Err Implicit_get_field(GF_Node *node, GF_FieldInfo *info)
   24012             : {
   24013          10 :         switch (info->fieldIndex) {
   24014           2 :         case 0:
   24015           2 :                 info->name = "bboxSize";
   24016           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24017           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   24018           2 :                 info->far_ptr = & ((M_Implicit *) node)->bboxSize;
   24019           2 :                 return GF_OK;
   24020           2 :         case 1:
   24021           2 :                 info->name = "c";
   24022           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24023           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   24024           2 :                 info->far_ptr = & ((M_Implicit *) node)->c;
   24025           2 :                 return GF_OK;
   24026           2 :         case 2:
   24027           2 :                 info->name = "densities";
   24028           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24029           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24030           2 :                 info->far_ptr = & ((M_Implicit *) node)->densities;
   24031           2 :                 return GF_OK;
   24032           2 :         case 3:
   24033           2 :                 info->name = "dual";
   24034           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24035           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   24036           2 :                 info->far_ptr = & ((M_Implicit *) node)->dual;
   24037           2 :                 return GF_OK;
   24038           2 :         case 4:
   24039           2 :                 info->name = "solid";
   24040           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24041           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   24042           2 :                 info->far_ptr = & ((M_Implicit *) node)->solid;
   24043           2 :                 return GF_OK;
   24044             :         default:
   24045             :                 return GF_BAD_PARAM;
   24046             :         }
   24047             : }
   24048             : 
   24049             : 
   24050           5 : static s32 Implicit_get_field_index_by_name(char *name)
   24051             : {
   24052           5 :         if (!strcmp("bboxSize", name)) return 0;
   24053           4 :         if (!strcmp("c", name)) return 1;
   24054           3 :         if (!strcmp("densities", name)) return 2;
   24055           2 :         if (!strcmp("dual", name)) return 3;
   24056           1 :         if (!strcmp("solid", name)) return 4;
   24057           0 :         return -1;
   24058             : }
   24059             : static Bool Implicit_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24060             : {
   24061           5 :         switch (FieldIndex) {
   24062           1 :         case 0:
   24063           1 :                 *AType = 11;
   24064           1 :                 *QType = 11;
   24065           1 :                 *b_min = FLT2FIX(0);
   24066           1 :                 *b_max = FIX_MAX;
   24067             :                 return 1;
   24068           1 :         case 1:
   24069           1 :                 *AType = 7;
   24070           1 :                 *QType = 0;
   24071           1 :                 *b_min = FIX_MIN;
   24072           1 :                 *b_max = FIX_MAX;
   24073             :                 return 1;
   24074             :         default:
   24075             :                 return 0;
   24076             :         }
   24077             : }
   24078             : 
   24079             : 
   24080             : 
   24081           1 : GF_Node *Implicit_Create()
   24082             : {
   24083             :         M_Implicit *p;
   24084           1 :         GF_SAFEALLOC(p, M_Implicit);
   24085           1 :         if(!p) return NULL;
   24086           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Implicit);
   24087             : 
   24088             :         /*default field values*/
   24089           1 :         p->bboxSize.x = FLT2FIX(2);
   24090           1 :         p->bboxSize.y = FLT2FIX(2);
   24091           1 :         p->bboxSize.z = FLT2FIX(2);
   24092           1 :         return (GF_Node *)p;
   24093             : }
   24094             : 
   24095             : 
   24096             : /*
   24097             :         XXLFM_Appearance Node deletion
   24098             : */
   24099             : 
   24100           1 : static void XXLFM_Appearance_Del(GF_Node *node)
   24101             : {
   24102             :         M_XXLFM_Appearance *p = (M_XXLFM_Appearance *) node;
   24103           1 :         gf_node_unregister((GF_Node *) p->blendList, (GF_Node *) p);
   24104           1 :         gf_node_unregister_children((GF_Node *) p, p->lightMapList);
   24105           1 :         gf_node_unregister_children((GF_Node *) p, p->tileList);
   24106           1 :         gf_node_unregister((GF_Node *) p->vertexFrameList, (GF_Node *) p);
   24107           1 :         gf_node_free((GF_Node *) p);
   24108           1 : }
   24109             : 
   24110             : static const u16 XXLFM_Appearance_Def2All[] = { 0, 1, 2, 3};
   24111             : static const u16 XXLFM_Appearance_In2All[] = { 0, 1, 2, 3};
   24112             : static const u16 XXLFM_Appearance_Out2All[] = { 0, 1, 2, 3};
   24113             : 
   24114             : static u32 XXLFM_Appearance_get_field_count(GF_Node *node, u8 IndexMode)
   24115             : {
   24116           6 :         switch(IndexMode) {
   24117             :         case GF_SG_FIELD_CODING_IN:
   24118             :                 return 4;
   24119             :         case GF_SG_FIELD_CODING_DEF:
   24120             :                 return 4;
   24121             :         case GF_SG_FIELD_CODING_OUT:
   24122             :                 return 4;
   24123           1 :         case GF_SG_FIELD_CODING_DYN:
   24124             :                 return 0;
   24125             :         default:
   24126             :                 return 4;
   24127             :         }
   24128             : }
   24129             : 
   24130             : static GF_Err XXLFM_Appearance_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24131             : {
   24132           4 :         switch(IndexMode) {
   24133           0 :         case GF_SG_FIELD_CODING_IN:
   24134           0 :                 *allField = XXLFM_Appearance_In2All[inField];
   24135             :                 return GF_OK;
   24136           0 :         case GF_SG_FIELD_CODING_DEF:
   24137           0 :                 *allField = XXLFM_Appearance_Def2All[inField];
   24138             :                 return GF_OK;
   24139           0 :         case GF_SG_FIELD_CODING_OUT:
   24140           0 :                 *allField = XXLFM_Appearance_Out2All[inField];
   24141             :                 return GF_OK;
   24142             :         default:
   24143             :                 return GF_BAD_PARAM;
   24144             :         }
   24145             : }
   24146           8 : static GF_Err XXLFM_Appearance_get_field(GF_Node *node, GF_FieldInfo *info)
   24147             : {
   24148           8 :         switch (info->fieldIndex) {
   24149           2 :         case 0:
   24150           2 :                 info->name = "blendList";
   24151           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24152           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24153           2 :                 info->NDTtype = NDT_SFBlendListNode;
   24154           2 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->blendList;
   24155           2 :                 return GF_OK;
   24156           2 :         case 1:
   24157           2 :                 info->name = "lightMapList";
   24158           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24159           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   24160           2 :                 info->NDTtype = NDT_SFLightMapNode;
   24161           2 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->lightMapList;
   24162           2 :                 return GF_OK;
   24163           2 :         case 2:
   24164           2 :                 info->name = "tileList";
   24165           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24166           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   24167           2 :                 info->NDTtype = NDT_SFTextureNode;
   24168           2 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->tileList;
   24169           2 :                 return GF_OK;
   24170           2 :         case 3:
   24171           2 :                 info->name = "vertexFrameList";
   24172           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24173           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24174           2 :                 info->NDTtype = NDT_SFFrameListNode;
   24175           2 :                 info->far_ptr = & ((M_XXLFM_Appearance *)node)->vertexFrameList;
   24176           2 :                 return GF_OK;
   24177             :         default:
   24178             :                 return GF_BAD_PARAM;
   24179             :         }
   24180             : }
   24181             : 
   24182             : 
   24183           4 : static s32 XXLFM_Appearance_get_field_index_by_name(char *name)
   24184             : {
   24185           4 :         if (!strcmp("blendList", name)) return 0;
   24186           3 :         if (!strcmp("lightMapList", name)) return 1;
   24187           2 :         if (!strcmp("tileList", name)) return 2;
   24188           1 :         if (!strcmp("vertexFrameList", name)) return 3;
   24189           0 :         return -1;
   24190             : }
   24191             : static Bool XXLFM_Appearance_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24192             : {
   24193             :         switch (FieldIndex) {
   24194             :         default:
   24195             :                 return 0;
   24196             :         }
   24197             : }
   24198             : 
   24199             : 
   24200             : 
   24201           1 : GF_Node *XXLFM_Appearance_Create()
   24202             : {
   24203             :         M_XXLFM_Appearance *p;
   24204           1 :         GF_SAFEALLOC(p, M_XXLFM_Appearance);
   24205           1 :         if(!p) return NULL;
   24206           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_Appearance);
   24207             : 
   24208             :         /*default field values*/
   24209           1 :         return (GF_Node *)p;
   24210             : }
   24211             : 
   24212             : 
   24213             : /*
   24214             :         XXLFM_BlendList Node deletion
   24215             : */
   24216             : 
   24217           1 : static void XXLFM_BlendList_Del(GF_Node *node)
   24218             : {
   24219             :         M_XXLFM_BlendList *p = (M_XXLFM_BlendList *) node;
   24220           1 :         gf_sg_mfint32_del(p->blendMode);
   24221           1 :         gf_sg_mfint32_del(p->lightMapIndex);
   24222           1 :         gf_node_free((GF_Node *) p);
   24223           1 : }
   24224             : 
   24225             : static const u16 XXLFM_BlendList_Def2All[] = { 0, 1};
   24226             : static const u16 XXLFM_BlendList_In2All[] = { 0, 1};
   24227             : static const u16 XXLFM_BlendList_Out2All[] = { 0, 1};
   24228             : 
   24229             : static u32 XXLFM_BlendList_get_field_count(GF_Node *node, u8 IndexMode)
   24230             : {
   24231           6 :         switch(IndexMode) {
   24232             :         case GF_SG_FIELD_CODING_IN:
   24233             :                 return 2;
   24234             :         case GF_SG_FIELD_CODING_DEF:
   24235             :                 return 2;
   24236             :         case GF_SG_FIELD_CODING_OUT:
   24237             :                 return 2;
   24238           1 :         case GF_SG_FIELD_CODING_DYN:
   24239             :                 return 0;
   24240             :         default:
   24241             :                 return 2;
   24242             :         }
   24243             : }
   24244             : 
   24245             : static GF_Err XXLFM_BlendList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24246             : {
   24247           2 :         switch(IndexMode) {
   24248           0 :         case GF_SG_FIELD_CODING_IN:
   24249           0 :                 *allField = XXLFM_BlendList_In2All[inField];
   24250             :                 return GF_OK;
   24251           0 :         case GF_SG_FIELD_CODING_DEF:
   24252           0 :                 *allField = XXLFM_BlendList_Def2All[inField];
   24253             :                 return GF_OK;
   24254           0 :         case GF_SG_FIELD_CODING_OUT:
   24255           0 :                 *allField = XXLFM_BlendList_Out2All[inField];
   24256             :                 return GF_OK;
   24257             :         default:
   24258             :                 return GF_BAD_PARAM;
   24259             :         }
   24260             : }
   24261             : static GF_Err XXLFM_BlendList_get_field(GF_Node *node, GF_FieldInfo *info)
   24262             : {
   24263           4 :         switch (info->fieldIndex) {
   24264           2 :         case 0:
   24265           2 :                 info->name = "blendMode";
   24266           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24267           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24268           2 :                 info->far_ptr = & ((M_XXLFM_BlendList *) node)->blendMode;
   24269             :                 return GF_OK;
   24270           2 :         case 1:
   24271           2 :                 info->name = "lightMapIndex";
   24272           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24273           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24274           2 :                 info->far_ptr = & ((M_XXLFM_BlendList *) node)->lightMapIndex;
   24275             :                 return GF_OK;
   24276             :         default:
   24277             :                 return GF_BAD_PARAM;
   24278             :         }
   24279             : }
   24280             : 
   24281             : 
   24282           2 : static s32 XXLFM_BlendList_get_field_index_by_name(char *name)
   24283             : {
   24284           2 :         if (!strcmp("blendMode", name)) return 0;
   24285           1 :         if (!strcmp("lightMapIndex", name)) return 1;
   24286           0 :         return -1;
   24287             : }
   24288             : static Bool XXLFM_BlendList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24289             : {
   24290           2 :         switch (FieldIndex) {
   24291           1 :         case 0:
   24292           1 :                 *AType = 0;
   24293           1 :                 *QType = 13;
   24294           1 :                 *QT13_bits = 1;
   24295           1 :                 *b_min = FLT2FIX(0);
   24296           1 :                 *b_max = FLT2FIX(1);
   24297             :                 return 1;
   24298           1 :         case 1:
   24299           1 :                 *AType = 0;
   24300           1 :                 *QType = 14;
   24301             :                 return 1;
   24302             :         default:
   24303             :                 return 0;
   24304             :         }
   24305             : }
   24306             : 
   24307             : 
   24308             : 
   24309           1 : GF_Node *XXLFM_BlendList_Create()
   24310             : {
   24311             :         M_XXLFM_BlendList *p;
   24312           1 :         GF_SAFEALLOC(p, M_XXLFM_BlendList);
   24313           1 :         if(!p) return NULL;
   24314           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_BlendList);
   24315             : 
   24316             :         /*default field values*/
   24317           1 :         return (GF_Node *)p;
   24318             : }
   24319             : 
   24320             : 
   24321             : /*
   24322             :         XXLFM_FrameList Node deletion
   24323             : */
   24324             : 
   24325           1 : static void XXLFM_FrameList_Del(GF_Node *node)
   24326             : {
   24327             :         M_XXLFM_FrameList *p = (M_XXLFM_FrameList *) node;
   24328           1 :         gf_sg_mfint32_del(p->index);
   24329           1 :         gf_sg_mfvec3f_del(p->frame);
   24330           1 :         gf_node_free((GF_Node *) p);
   24331           1 : }
   24332             : 
   24333             : static const u16 XXLFM_FrameList_Def2All[] = { 0, 1};
   24334             : static const u16 XXLFM_FrameList_In2All[] = { 0, 1};
   24335             : static const u16 XXLFM_FrameList_Out2All[] = { 0, 1};
   24336             : 
   24337             : static u32 XXLFM_FrameList_get_field_count(GF_Node *node, u8 IndexMode)
   24338             : {
   24339           6 :         switch(IndexMode) {
   24340             :         case GF_SG_FIELD_CODING_IN:
   24341             :                 return 2;
   24342             :         case GF_SG_FIELD_CODING_DEF:
   24343             :                 return 2;
   24344             :         case GF_SG_FIELD_CODING_OUT:
   24345             :                 return 2;
   24346           1 :         case GF_SG_FIELD_CODING_DYN:
   24347             :                 return 0;
   24348             :         default:
   24349             :                 return 2;
   24350             :         }
   24351             : }
   24352             : 
   24353             : static GF_Err XXLFM_FrameList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24354             : {
   24355           2 :         switch(IndexMode) {
   24356           0 :         case GF_SG_FIELD_CODING_IN:
   24357           0 :                 *allField = XXLFM_FrameList_In2All[inField];
   24358             :                 return GF_OK;
   24359           0 :         case GF_SG_FIELD_CODING_DEF:
   24360           0 :                 *allField = XXLFM_FrameList_Def2All[inField];
   24361             :                 return GF_OK;
   24362           0 :         case GF_SG_FIELD_CODING_OUT:
   24363           0 :                 *allField = XXLFM_FrameList_Out2All[inField];
   24364             :                 return GF_OK;
   24365             :         default:
   24366             :                 return GF_BAD_PARAM;
   24367             :         }
   24368             : }
   24369             : static GF_Err XXLFM_FrameList_get_field(GF_Node *node, GF_FieldInfo *info)
   24370             : {
   24371           4 :         switch (info->fieldIndex) {
   24372           2 :         case 0:
   24373           2 :                 info->name = "index";
   24374           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24375           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24376           2 :                 info->far_ptr = & ((M_XXLFM_FrameList *) node)->index;
   24377             :                 return GF_OK;
   24378           2 :         case 1:
   24379           2 :                 info->name = "frame";
   24380           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24381           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   24382           2 :                 info->far_ptr = & ((M_XXLFM_FrameList *) node)->frame;
   24383             :                 return GF_OK;
   24384             :         default:
   24385             :                 return GF_BAD_PARAM;
   24386             :         }
   24387             : }
   24388             : 
   24389             : 
   24390           2 : static s32 XXLFM_FrameList_get_field_index_by_name(char *name)
   24391             : {
   24392           2 :         if (!strcmp("index", name)) return 0;
   24393           1 :         if (!strcmp("frame", name)) return 1;
   24394           0 :         return -1;
   24395             : }
   24396             : static Bool XXLFM_FrameList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24397             : {
   24398           2 :         switch (FieldIndex) {
   24399           1 :         case 0:
   24400           1 :                 *AType = 0;
   24401           1 :                 *QType = 14;
   24402             :                 return 1;
   24403           1 :         case 1:
   24404           1 :                 *AType = 0;
   24405           1 :                 *QType = 1;
   24406           1 :                 *b_min = FLT2FIX(-1);
   24407           1 :                 *b_max = FLT2FIX(1);
   24408             :                 return 1;
   24409             :         default:
   24410             :                 return 0;
   24411             :         }
   24412             : }
   24413             : 
   24414             : 
   24415             : 
   24416           1 : GF_Node *XXLFM_FrameList_Create()
   24417             : {
   24418             :         M_XXLFM_FrameList *p;
   24419           1 :         GF_SAFEALLOC(p, M_XXLFM_FrameList);
   24420           1 :         if(!p) return NULL;
   24421           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_FrameList);
   24422             : 
   24423             :         /*default field values*/
   24424           1 :         p->index.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   24425           1 :         p->index.count = 1;
   24426           1 :         p->index.vals[0] = -1;
   24427           1 :         p->frame.vals = (SFVec3f *)gf_malloc(sizeof(SFVec3f)*3);
   24428           1 :         p->frame.count = 3;
   24429           1 :         p->frame.vals[0].x = FLT2FIX(1);
   24430           1 :         p->frame.vals[0].y = FLT2FIX(0);
   24431           1 :         p->frame.vals[0].z = FLT2FIX(0);
   24432           1 :         p->frame.vals[1].x = FLT2FIX(0);
   24433           1 :         p->frame.vals[1].y = FLT2FIX(1);
   24434           1 :         p->frame.vals[1].z = FLT2FIX(0);
   24435           1 :         p->frame.vals[2].x = FLT2FIX(0);
   24436           1 :         p->frame.vals[2].y = FLT2FIX(0);
   24437           1 :         p->frame.vals[2].z = FLT2FIX(1);
   24438           1 :         return (GF_Node *)p;
   24439             : }
   24440             : 
   24441             : 
   24442             : /*
   24443             :         XXLFM_LightMap Node deletion
   24444             : */
   24445             : 
   24446           1 : static void XXLFM_LightMap_Del(GF_Node *node)
   24447             : {
   24448             :         M_XXLFM_LightMap *p = (M_XXLFM_LightMap *) node;
   24449           1 :         gf_node_unregister((GF_Node *) p->surfaceMapList, (GF_Node *) p);
   24450           1 :         gf_node_unregister((GF_Node *) p->viewMapList, (GF_Node *) p);
   24451           1 :         gf_node_free((GF_Node *) p);
   24452           1 : }
   24453             : 
   24454             : static const u16 XXLFM_LightMap_Def2All[] = { 0, 1, 2, 3, 4};
   24455             : static const u16 XXLFM_LightMap_In2All[] = { 0, 1, 2, 3, 4};
   24456             : static const u16 XXLFM_LightMap_Out2All[] = { 0, 1, 2, 3, 4};
   24457             : 
   24458             : static u32 XXLFM_LightMap_get_field_count(GF_Node *node, u8 IndexMode)
   24459             : {
   24460           6 :         switch(IndexMode) {
   24461             :         case GF_SG_FIELD_CODING_IN:
   24462             :                 return 5;
   24463             :         case GF_SG_FIELD_CODING_DEF:
   24464             :                 return 5;
   24465             :         case GF_SG_FIELD_CODING_OUT:
   24466             :                 return 5;
   24467           1 :         case GF_SG_FIELD_CODING_DYN:
   24468             :                 return 0;
   24469             :         default:
   24470             :                 return 5;
   24471             :         }
   24472             : }
   24473             : 
   24474             : static GF_Err XXLFM_LightMap_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24475             : {
   24476           5 :         switch(IndexMode) {
   24477           0 :         case GF_SG_FIELD_CODING_IN:
   24478           0 :                 *allField = XXLFM_LightMap_In2All[inField];
   24479             :                 return GF_OK;
   24480           0 :         case GF_SG_FIELD_CODING_DEF:
   24481           0 :                 *allField = XXLFM_LightMap_Def2All[inField];
   24482             :                 return GF_OK;
   24483           0 :         case GF_SG_FIELD_CODING_OUT:
   24484           0 :                 *allField = XXLFM_LightMap_Out2All[inField];
   24485             :                 return GF_OK;
   24486             :         default:
   24487             :                 return GF_BAD_PARAM;
   24488             :         }
   24489             : }
   24490          10 : static GF_Err XXLFM_LightMap_get_field(GF_Node *node, GF_FieldInfo *info)
   24491             : {
   24492          10 :         switch (info->fieldIndex) {
   24493           2 :         case 0:
   24494           2 :                 info->name = "biasRGB";
   24495           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24496           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   24497           2 :                 info->far_ptr = & ((M_XXLFM_LightMap *) node)->biasRGB;
   24498           2 :                 return GF_OK;
   24499           2 :         case 1:
   24500           2 :                 info->name = "priorityLevel";
   24501           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24502           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24503           2 :                 info->far_ptr = & ((M_XXLFM_LightMap *) node)->priorityLevel;
   24504           2 :                 return GF_OK;
   24505           2 :         case 2:
   24506           2 :                 info->name = "scaleRGB";
   24507           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24508           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   24509           2 :                 info->far_ptr = & ((M_XXLFM_LightMap *) node)->scaleRGB;
   24510           2 :                 return GF_OK;
   24511           2 :         case 3:
   24512           2 :                 info->name = "surfaceMapList";
   24513           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24514           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24515           2 :                 info->NDTtype = NDT_SFSurfaceMapNode;
   24516           2 :                 info->far_ptr = & ((M_XXLFM_LightMap *)node)->surfaceMapList;
   24517           2 :                 return GF_OK;
   24518           2 :         case 4:
   24519           2 :                 info->name = "viewMapList";
   24520           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24521           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24522           2 :                 info->NDTtype = NDT_SFViewMapNode;
   24523           2 :                 info->far_ptr = & ((M_XXLFM_LightMap *)node)->viewMapList;
   24524           2 :                 return GF_OK;
   24525             :         default:
   24526             :                 return GF_BAD_PARAM;
   24527             :         }
   24528             : }
   24529             : 
   24530             : 
   24531           5 : static s32 XXLFM_LightMap_get_field_index_by_name(char *name)
   24532             : {
   24533           5 :         if (!strcmp("biasRGB", name)) return 0;
   24534           4 :         if (!strcmp("priorityLevel", name)) return 1;
   24535           3 :         if (!strcmp("scaleRGB", name)) return 2;
   24536           2 :         if (!strcmp("surfaceMapList", name)) return 3;
   24537           1 :         if (!strcmp("viewMapList", name)) return 4;
   24538           0 :         return -1;
   24539             : }
   24540             : static Bool XXLFM_LightMap_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24541             : {
   24542           5 :         switch (FieldIndex) {
   24543           1 :         case 0:
   24544           1 :                 *AType = 0;
   24545           1 :                 *QType = 7;
   24546           1 :                 *b_min = FLT2FIX(-1);
   24547           1 :                 *b_max = FLT2FIX(1);
   24548             :                 return 1;
   24549           1 :         case 1:
   24550           1 :                 *AType = 0;
   24551           1 :                 *QType = 13;
   24552           1 :                 *QT13_bits = 8;
   24553           1 :                 *b_min = FLT2FIX(0);
   24554           1 :                 *b_max = FLT2FIX(255);
   24555             :                 return 1;
   24556           1 :         case 2:
   24557           1 :                 *AType = 0;
   24558           1 :                 *QType = 7;
   24559           1 :                 *b_min = FLT2FIX(-1);
   24560           1 :                 *b_max = FLT2FIX(1);
   24561             :                 return 1;
   24562             :         default:
   24563             :                 return 0;
   24564             :         }
   24565             : }
   24566             : 
   24567             : 
   24568             : 
   24569           1 : GF_Node *XXLFM_LightMap_Create()
   24570             : {
   24571             :         M_XXLFM_LightMap *p;
   24572           1 :         GF_SAFEALLOC(p, M_XXLFM_LightMap);
   24573           1 :         if(!p) return NULL;
   24574           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_LightMap);
   24575             : 
   24576             :         /*default field values*/
   24577           1 :         p->biasRGB.x = FLT2FIX(0);
   24578           1 :         p->biasRGB.y = FLT2FIX(0);
   24579           1 :         p->biasRGB.z = FLT2FIX(0);
   24580           1 :         p->priorityLevel = 0;
   24581           1 :         p->scaleRGB.x = FLT2FIX(1);
   24582           1 :         p->scaleRGB.y = FLT2FIX(1);
   24583           1 :         p->scaleRGB.z = FLT2FIX(1);
   24584           1 :         return (GF_Node *)p;
   24585             : }
   24586             : 
   24587             : 
   24588             : /*
   24589             :         XXLFM_SurfaceMapList Node deletion
   24590             : */
   24591             : 
   24592           1 : static void XXLFM_SurfaceMapList_Del(GF_Node *node)
   24593             : {
   24594             :         M_XXLFM_SurfaceMapList *p = (M_XXLFM_SurfaceMapList *) node;
   24595           1 :         gf_sg_mfint32_del(p->tileIndex);
   24596           1 :         gf_node_unregister((GF_Node *) p->triangleCoordinate, (GF_Node *) p);
   24597           1 :         gf_sg_mfint32_del(p->triangleIndex);
   24598           1 :         gf_sg_mfint32_del(p->viewMapIndex);
   24599           1 :         gf_node_free((GF_Node *) p);
   24600           1 : }
   24601             : 
   24602             : static const u16 XXLFM_SurfaceMapList_Def2All[] = { 0, 1, 2, 3};
   24603             : static const u16 XXLFM_SurfaceMapList_In2All[] = { 0, 1, 2, 3};
   24604             : static const u16 XXLFM_SurfaceMapList_Out2All[] = { 0, 1, 2, 3};
   24605             : 
   24606             : static u32 XXLFM_SurfaceMapList_get_field_count(GF_Node *node, u8 IndexMode)
   24607             : {
   24608           6 :         switch(IndexMode) {
   24609             :         case GF_SG_FIELD_CODING_IN:
   24610             :                 return 4;
   24611             :         case GF_SG_FIELD_CODING_DEF:
   24612             :                 return 4;
   24613             :         case GF_SG_FIELD_CODING_OUT:
   24614             :                 return 4;
   24615           1 :         case GF_SG_FIELD_CODING_DYN:
   24616             :                 return 0;
   24617             :         default:
   24618             :                 return 4;
   24619             :         }
   24620             : }
   24621             : 
   24622             : static GF_Err XXLFM_SurfaceMapList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24623             : {
   24624           4 :         switch(IndexMode) {
   24625           0 :         case GF_SG_FIELD_CODING_IN:
   24626           0 :                 *allField = XXLFM_SurfaceMapList_In2All[inField];
   24627             :                 return GF_OK;
   24628           0 :         case GF_SG_FIELD_CODING_DEF:
   24629           0 :                 *allField = XXLFM_SurfaceMapList_Def2All[inField];
   24630             :                 return GF_OK;
   24631           0 :         case GF_SG_FIELD_CODING_OUT:
   24632           0 :                 *allField = XXLFM_SurfaceMapList_Out2All[inField];
   24633             :                 return GF_OK;
   24634             :         default:
   24635             :                 return GF_BAD_PARAM;
   24636             :         }
   24637             : }
   24638           8 : static GF_Err XXLFM_SurfaceMapList_get_field(GF_Node *node, GF_FieldInfo *info)
   24639             : {
   24640           8 :         switch (info->fieldIndex) {
   24641           2 :         case 0:
   24642           2 :                 info->name = "tileIndex";
   24643           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24644           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24645           2 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *) node)->tileIndex;
   24646           2 :                 return GF_OK;
   24647           2 :         case 1:
   24648           2 :                 info->name = "triangleCoordinate";
   24649           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24650           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24651           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24652           2 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *)node)->triangleCoordinate;
   24653           2 :                 return GF_OK;
   24654           2 :         case 2:
   24655           2 :                 info->name = "triangleIndex";
   24656           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24657           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24658           2 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *) node)->triangleIndex;
   24659           2 :                 return GF_OK;
   24660           2 :         case 3:
   24661           2 :                 info->name = "viewMapIndex";
   24662           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24663           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24664           2 :                 info->far_ptr = & ((M_XXLFM_SurfaceMapList *) node)->viewMapIndex;
   24665           2 :                 return GF_OK;
   24666             :         default:
   24667             :                 return GF_BAD_PARAM;
   24668             :         }
   24669             : }
   24670             : 
   24671             : 
   24672           4 : static s32 XXLFM_SurfaceMapList_get_field_index_by_name(char *name)
   24673             : {
   24674           4 :         if (!strcmp("tileIndex", name)) return 0;
   24675           3 :         if (!strcmp("triangleCoordinate", name)) return 1;
   24676           2 :         if (!strcmp("triangleIndex", name)) return 2;
   24677           1 :         if (!strcmp("viewMapIndex", name)) return 3;
   24678           0 :         return -1;
   24679             : }
   24680             : static Bool XXLFM_SurfaceMapList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24681             : {
   24682           4 :         switch (FieldIndex) {
   24683           1 :         case 0:
   24684           1 :                 *AType = 0;
   24685           1 :                 *QType = 14;
   24686             :                 return 1;
   24687           1 :         case 2:
   24688           1 :                 *AType = 0;
   24689           1 :                 *QType = 14;
   24690             :                 return 1;
   24691           1 :         case 3:
   24692           1 :                 *AType = 0;
   24693           1 :                 *QType = 14;
   24694             :                 return 1;
   24695             :         default:
   24696             :                 return 0;
   24697             :         }
   24698             : }
   24699             : 
   24700             : 
   24701             : 
   24702           1 : GF_Node *XXLFM_SurfaceMapList_Create()
   24703             : {
   24704             :         M_XXLFM_SurfaceMapList *p;
   24705           1 :         GF_SAFEALLOC(p, M_XXLFM_SurfaceMapList);
   24706           1 :         if(!p) return NULL;
   24707           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_SurfaceMapList);
   24708             : 
   24709             :         /*default field values*/
   24710           1 :         return (GF_Node *)p;
   24711             : }
   24712             : 
   24713             : 
   24714             : /*
   24715             :         XXLFM_ViewMapList Node deletion
   24716             : */
   24717             : 
   24718           1 : static void XXLFM_ViewMapList_Del(GF_Node *node)
   24719             : {
   24720             :         M_XXLFM_ViewMapList *p = (M_XXLFM_ViewMapList *) node;
   24721           1 :         gf_node_unregister((GF_Node *) p->textureOrigin, (GF_Node *) p);
   24722           1 :         gf_node_unregister((GF_Node *) p->textureSize, (GF_Node *) p);
   24723           1 :         gf_sg_mfint32_del(p->tileIndex);
   24724           1 :         gf_sg_mfint32_del(p->vertexIndex);
   24725           1 :         gf_node_free((GF_Node *) p);
   24726           1 : }
   24727             : 
   24728             : static const u16 XXLFM_ViewMapList_Def2All[] = { 0, 1, 2, 3};
   24729             : static const u16 XXLFM_ViewMapList_In2All[] = { 0, 1, 2, 3};
   24730             : static const u16 XXLFM_ViewMapList_Out2All[] = { 0, 1, 2, 3};
   24731             : 
   24732             : static u32 XXLFM_ViewMapList_get_field_count(GF_Node *node, u8 IndexMode)
   24733             : {
   24734           6 :         switch(IndexMode) {
   24735             :         case GF_SG_FIELD_CODING_IN:
   24736             :                 return 4;
   24737             :         case GF_SG_FIELD_CODING_DEF:
   24738             :                 return 4;
   24739             :         case GF_SG_FIELD_CODING_OUT:
   24740             :                 return 4;
   24741           1 :         case GF_SG_FIELD_CODING_DYN:
   24742             :                 return 0;
   24743             :         default:
   24744             :                 return 4;
   24745             :         }
   24746             : }
   24747             : 
   24748             : static GF_Err XXLFM_ViewMapList_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24749             : {
   24750           4 :         switch(IndexMode) {
   24751           0 :         case GF_SG_FIELD_CODING_IN:
   24752           0 :                 *allField = XXLFM_ViewMapList_In2All[inField];
   24753             :                 return GF_OK;
   24754           0 :         case GF_SG_FIELD_CODING_DEF:
   24755           0 :                 *allField = XXLFM_ViewMapList_Def2All[inField];
   24756             :                 return GF_OK;
   24757           0 :         case GF_SG_FIELD_CODING_OUT:
   24758           0 :                 *allField = XXLFM_ViewMapList_Out2All[inField];
   24759             :                 return GF_OK;
   24760             :         default:
   24761             :                 return GF_BAD_PARAM;
   24762             :         }
   24763             : }
   24764           8 : static GF_Err XXLFM_ViewMapList_get_field(GF_Node *node, GF_FieldInfo *info)
   24765             : {
   24766           8 :         switch (info->fieldIndex) {
   24767           2 :         case 0:
   24768           2 :                 info->name = "textureOrigin";
   24769           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24770           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24771           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24772           2 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *)node)->textureOrigin;
   24773           2 :                 return GF_OK;
   24774           2 :         case 1:
   24775           2 :                 info->name = "textureSize";
   24776           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24777           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24778           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24779           2 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *)node)->textureSize;
   24780           2 :                 return GF_OK;
   24781           2 :         case 2:
   24782           2 :                 info->name = "tileIndex";
   24783           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24784           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24785           2 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *) node)->tileIndex;
   24786           2 :                 return GF_OK;
   24787           2 :         case 3:
   24788           2 :                 info->name = "vertexIndex";
   24789           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24790           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24791           2 :                 info->far_ptr = & ((M_XXLFM_ViewMapList *) node)->vertexIndex;
   24792           2 :                 return GF_OK;
   24793             :         default:
   24794             :                 return GF_BAD_PARAM;
   24795             :         }
   24796             : }
   24797             : 
   24798             : 
   24799           4 : static s32 XXLFM_ViewMapList_get_field_index_by_name(char *name)
   24800             : {
   24801           4 :         if (!strcmp("textureOrigin", name)) return 0;
   24802           3 :         if (!strcmp("textureSize", name)) return 1;
   24803           2 :         if (!strcmp("tileIndex", name)) return 2;
   24804           1 :         if (!strcmp("vertexIndex", name)) return 3;
   24805           0 :         return -1;
   24806             : }
   24807             : static Bool XXLFM_ViewMapList_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   24808             : {
   24809           4 :         switch (FieldIndex) {
   24810           1 :         case 2:
   24811           1 :                 *AType = 0;
   24812           1 :                 *QType = 14;
   24813             :                 return 1;
   24814           1 :         case 3:
   24815           1 :                 *AType = 0;
   24816           1 :                 *QType = 14;
   24817             :                 return 1;
   24818             :         default:
   24819             :                 return 0;
   24820             :         }
   24821             : }
   24822             : 
   24823             : 
   24824             : 
   24825           1 : GF_Node *XXLFM_ViewMapList_Create()
   24826             : {
   24827             :         M_XXLFM_ViewMapList *p;
   24828           1 :         GF_SAFEALLOC(p, M_XXLFM_ViewMapList);
   24829           1 :         if(!p) return NULL;
   24830           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXLFM_ViewMapList);
   24831             : 
   24832             :         /*default field values*/
   24833           1 :         return (GF_Node *)p;
   24834             : }
   24835             : 
   24836             : 
   24837             : /*
   24838             :         MeshGrid Node deletion
   24839             : */
   24840             : 
   24841           1 : static void MeshGrid_Del(GF_Node *node)
   24842             : {
   24843             :         M_MeshGrid *p = (M_MeshGrid *) node;
   24844           1 :         gf_sg_mfint32_del(p->set_colorIndex);
   24845           1 :         gf_sg_mfint32_del(p->set_coordIndex);
   24846           1 :         gf_sg_mfint32_del(p->set_normalIndex);
   24847           1 :         gf_sg_mfint32_del(p->set_texCoordIndex);
   24848           1 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   24849           1 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   24850           1 :         gf_node_unregister((GF_Node *) p->gridCoord, (GF_Node *) p);
   24851           1 :         gf_sg_mfint32_del(p->nLevels);
   24852           1 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
   24853           1 :         gf_sg_mfint32_del(p->nSlices);
   24854           1 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
   24855           1 :         gf_sg_mffloat_del(p->vertexOffset);
   24856           1 :         gf_sg_mfint32_del(p->vertexLink);
   24857           1 :         gf_sg_mfint32_del(p->colorIndex);
   24858           1 :         gf_sg_mfint32_del(p->coordIndex);
   24859           1 :         gf_sg_mfint32_del(p->normalIndex);
   24860           1 :         gf_sg_mfint32_del(p->texCoordIndex);
   24861           1 :         gf_sg_mfint32_del(p->nVertices);
   24862           1 :         gf_node_free((GF_Node *) p);
   24863           1 : }
   24864             : 
   24865             : static const u16 MeshGrid_Def2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   24866             : static const u16 MeshGrid_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
   24867             : static const u16 MeshGrid_Out2All[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 21, 22};
   24868             : static const u16 MeshGrid_Dyn2All[] = { 6, 7, 9, 10, 12, 14};
   24869             : 
   24870             : static u32 MeshGrid_get_field_count(GF_Node *node, u8 IndexMode)
   24871             : {
   24872             :         switch(IndexMode) {
   24873             :         case GF_SG_FIELD_CODING_IN:
   24874             :                 return 16;
   24875             :         case GF_SG_FIELD_CODING_DEF:
   24876             :                 return 17;
   24877             :         case GF_SG_FIELD_CODING_OUT:
   24878             :                 return 14;
   24879             :         case GF_SG_FIELD_CODING_DYN:
   24880             :                 return 6;
   24881             :         default:
   24882             :                 return 23;
   24883             :         }
   24884             : }
   24885             : 
   24886             : static GF_Err MeshGrid_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   24887             : {
   24888          23 :         switch(IndexMode) {
   24889           0 :         case GF_SG_FIELD_CODING_IN:
   24890           0 :                 *allField = MeshGrid_In2All[inField];
   24891             :                 return GF_OK;
   24892           0 :         case GF_SG_FIELD_CODING_DEF:
   24893           0 :                 *allField = MeshGrid_Def2All[inField];
   24894             :                 return GF_OK;
   24895           0 :         case GF_SG_FIELD_CODING_OUT:
   24896           0 :                 *allField = MeshGrid_Out2All[inField];
   24897             :                 return GF_OK;
   24898           0 :         case GF_SG_FIELD_CODING_DYN:
   24899           0 :                 *allField = MeshGrid_Dyn2All[inField];
   24900             :                 return GF_OK;
   24901             :         default:
   24902             :                 return GF_BAD_PARAM;
   24903             :         }
   24904             : }
   24905          46 : static GF_Err MeshGrid_get_field(GF_Node *node, GF_FieldInfo *info)
   24906             : {
   24907          46 :         switch (info->fieldIndex) {
   24908           2 :         case 0:
   24909           2 :                 info->name = "set_colorIndex";
   24910           2 :                 info->eventType = GF_SG_EVENT_IN;
   24911           2 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_colorIndex;
   24912           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24913           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_colorIndex;
   24914           2 :                 return GF_OK;
   24915           2 :         case 1:
   24916           2 :                 info->name = "set_coordIndex";
   24917           2 :                 info->eventType = GF_SG_EVENT_IN;
   24918           2 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_coordIndex;
   24919           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24920           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_coordIndex;
   24921           2 :                 return GF_OK;
   24922           2 :         case 2:
   24923           2 :                 info->name = "set_normalIndex";
   24924           2 :                 info->eventType = GF_SG_EVENT_IN;
   24925           2 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_normalIndex;
   24926           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24927           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_normalIndex;
   24928           2 :                 return GF_OK;
   24929           2 :         case 3:
   24930           2 :                 info->name = "set_texCoordIndex";
   24931           2 :                 info->eventType = GF_SG_EVENT_IN;
   24932           2 :                 info->on_event_in = ((M_MeshGrid *)node)->on_set_texCoordIndex;
   24933           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24934           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->set_texCoordIndex;
   24935           2 :                 return GF_OK;
   24936           2 :         case 4:
   24937           2 :                 info->name = "color";
   24938           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24939           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24940           2 :                 info->NDTtype = NDT_SFColorNode;
   24941           2 :                 info->far_ptr = & ((M_MeshGrid *)node)->color;
   24942           2 :                 return GF_OK;
   24943           2 :         case 5:
   24944           2 :                 info->name = "coord";
   24945           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24946           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24947           2 :                 info->NDTtype = NDT_SFCoordinateNode;
   24948           2 :                 info->far_ptr = & ((M_MeshGrid *)node)->coord;
   24949           2 :                 return GF_OK;
   24950           2 :         case 6:
   24951           2 :                 info->name = "displayLevel";
   24952           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24953           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24954           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->displayLevel;
   24955           2 :                 return GF_OK;
   24956           2 :         case 7:
   24957           2 :                 info->name = "filterType";
   24958           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24959           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24960           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->filterType;
   24961           2 :                 return GF_OK;
   24962           2 :         case 8:
   24963           2 :                 info->name = "gridCoord";
   24964           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24965           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24966           2 :                 info->NDTtype = NDT_SFCoordinateNode;
   24967           2 :                 info->far_ptr = & ((M_MeshGrid *)node)->gridCoord;
   24968           2 :                 return GF_OK;
   24969           2 :         case 9:
   24970           2 :                 info->name = "hierarchicalLevel";
   24971           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24972           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   24973           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->hierarchicalLevel;
   24974           2 :                 return GF_OK;
   24975           2 :         case 10:
   24976           2 :                 info->name = "nLevels";
   24977           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24978           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24979           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->nLevels;
   24980           2 :                 return GF_OK;
   24981           2 :         case 11:
   24982           2 :                 info->name = "normal";
   24983           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24984           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24985           2 :                 info->NDTtype = NDT_SFNormalNode;
   24986           2 :                 info->far_ptr = & ((M_MeshGrid *)node)->normal;
   24987           2 :                 return GF_OK;
   24988           2 :         case 12:
   24989           2 :                 info->name = "nSlices";
   24990           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24991           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   24992           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->nSlices;
   24993           2 :                 return GF_OK;
   24994           2 :         case 13:
   24995           2 :                 info->name = "texCoord";
   24996           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   24997           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   24998           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   24999           2 :                 info->far_ptr = & ((M_MeshGrid *)node)->texCoord;
   25000           2 :                 return GF_OK;
   25001           2 :         case 14:
   25002           2 :                 info->name = "vertexOffset";
   25003           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25004           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25005           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->vertexOffset;
   25006           2 :                 return GF_OK;
   25007           2 :         case 15:
   25008           2 :                 info->name = "vertexLink";
   25009           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25010           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25011           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->vertexLink;
   25012           2 :                 return GF_OK;
   25013           2 :         case 16:
   25014           2 :                 info->name = "colorIndex";
   25015           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25016           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25017           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->colorIndex;
   25018           2 :                 return GF_OK;
   25019           2 :         case 17:
   25020           2 :                 info->name = "coordIndex";
   25021           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25022           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25023           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->coordIndex;
   25024           2 :                 return GF_OK;
   25025           2 :         case 18:
   25026           2 :                 info->name = "normalIndex";
   25027           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25028           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25029           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->normalIndex;
   25030           2 :                 return GF_OK;
   25031           2 :         case 19:
   25032           2 :                 info->name = "solid";
   25033           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25034           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25035           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->solid;
   25036           2 :                 return GF_OK;
   25037           2 :         case 20:
   25038           2 :                 info->name = "texCoordIndex";
   25039           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25040           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25041           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->texCoordIndex;
   25042           2 :                 return GF_OK;
   25043           2 :         case 21:
   25044           2 :                 info->name = "isLoading";
   25045           2 :                 info->eventType = GF_SG_EVENT_OUT;
   25046           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25047           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->isLoading;
   25048           2 :                 return GF_OK;
   25049           2 :         case 22:
   25050           2 :                 info->name = "nVertices";
   25051           2 :                 info->eventType = GF_SG_EVENT_OUT;
   25052           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25053           2 :                 info->far_ptr = & ((M_MeshGrid *) node)->nVertices;
   25054           2 :                 return GF_OK;
   25055             :         default:
   25056             :                 return GF_BAD_PARAM;
   25057             :         }
   25058             : }
   25059             : 
   25060             : 
   25061          23 : static s32 MeshGrid_get_field_index_by_name(char *name)
   25062             : {
   25063          23 :         if (!strcmp("set_colorIndex", name)) return 0;
   25064          22 :         if (!strcmp("set_coordIndex", name)) return 1;
   25065          21 :         if (!strcmp("set_normalIndex", name)) return 2;
   25066          20 :         if (!strcmp("set_texCoordIndex", name)) return 3;
   25067          19 :         if (!strcmp("color", name)) return 4;
   25068          18 :         if (!strcmp("coord", name)) return 5;
   25069          17 :         if (!strcmp("displayLevel", name)) return 6;
   25070          16 :         if (!strcmp("filterType", name)) return 7;
   25071          15 :         if (!strcmp("gridCoord", name)) return 8;
   25072          14 :         if (!strcmp("hierarchicalLevel", name)) return 9;
   25073          13 :         if (!strcmp("nLevels", name)) return 10;
   25074          12 :         if (!strcmp("normal", name)) return 11;
   25075          11 :         if (!strcmp("nSlices", name)) return 12;
   25076          10 :         if (!strcmp("texCoord", name)) return 13;
   25077           9 :         if (!strcmp("vertexOffset", name)) return 14;
   25078           8 :         if (!strcmp("vertexLink", name)) return 15;
   25079           7 :         if (!strcmp("colorIndex", name)) return 16;
   25080           6 :         if (!strcmp("coordIndex", name)) return 17;
   25081           5 :         if (!strcmp("normalIndex", name)) return 18;
   25082           4 :         if (!strcmp("solid", name)) return 19;
   25083           3 :         if (!strcmp("texCoordIndex", name)) return 20;
   25084           2 :         if (!strcmp("isLoading", name)) return 21;
   25085           1 :         if (!strcmp("nVertices", name)) return 22;
   25086           0 :         return -1;
   25087             : }
   25088          23 : static Bool MeshGrid_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25089             : {
   25090          23 :         switch (FieldIndex) {
   25091           1 :         case 6:
   25092           1 :                 *AType = 13;
   25093           1 :                 *QType = 13;
   25094           1 :                 *QT13_bits = 32;
   25095           1 :                 *b_min = FLT2FIX(0);
   25096           1 :                 *b_max = FIX_MAX;
   25097             :                 return 1;
   25098           1 :         case 7:
   25099           1 :                 *AType = 13;
   25100           1 :                 *QType = 13;
   25101           1 :                 *QT13_bits = 2;
   25102           1 :                 *b_min = FLT2FIX(0);
   25103           1 :                 *b_max = FLT2FIX( 1);
   25104             :                 return 1;
   25105           1 :         case 9:
   25106           1 :                 *AType = 13;
   25107           1 :                 *QType = 13;
   25108           1 :                 *QT13_bits = 32;
   25109           1 :                 *b_min = FLT2FIX(-1);
   25110           1 :                 *b_max = FIX_MAX;
   25111             :                 return 1;
   25112           1 :         case 10:
   25113           1 :                 *AType = 7;
   25114           1 :                 *QType = 7;
   25115             :                 return 1;
   25116           1 :         case 12:
   25117           1 :                 *AType = 7;
   25118           1 :                 *QType = 7;
   25119             :                 return 1;
   25120           1 :         case 14:
   25121           1 :                 *AType = 7;
   25122           1 :                 *QType = 7;
   25123           1 :                 *b_min = FLT2FIX(0.0);
   25124           1 :                 *b_max = FLT2FIX( 2.0);
   25125             :                 return 1;
   25126           1 :         case 15:
   25127           1 :                 *AType = 0;
   25128           1 :                 *QType = 13;
   25129           1 :                 *QT13_bits = 2;
   25130           1 :                 *b_min = FLT2FIX(0);
   25131           1 :                 *b_max = FLT2FIX( 3);
   25132             :                 return 1;
   25133           1 :         case 16:
   25134           1 :                 *AType = 0;
   25135           1 :                 *QType = 14;
   25136           1 :                 *b_min = FLT2FIX(-1);
   25137           1 :                 *b_max = FIX_MAX;
   25138             :                 return 1;
   25139           1 :         case 17:
   25140           1 :                 *AType = 0;
   25141           1 :                 *QType = 14;
   25142           1 :                 *b_min = FLT2FIX(-1);
   25143           1 :                 *b_max = FIX_MAX;
   25144             :                 return 1;
   25145           1 :         case 18:
   25146           1 :                 *AType = 0;
   25147           1 :                 *QType = 14;
   25148           1 :                 *b_min = FLT2FIX(-1);
   25149           1 :                 *b_max = FIX_MAX;
   25150             :                 return 1;
   25151           1 :         case 20:
   25152           1 :                 *AType = 0;
   25153           1 :                 *QType = 14;
   25154           1 :                 *b_min = FLT2FIX(-1);
   25155           1 :                 *b_max = FIX_MAX;
   25156             :                 return 1;
   25157             :         default:
   25158             :                 return 0;
   25159             :         }
   25160             : }
   25161             : 
   25162             : 
   25163             : 
   25164           1 : GF_Node *MeshGrid_Create()
   25165             : {
   25166             :         M_MeshGrid *p;
   25167           1 :         GF_SAFEALLOC(p, M_MeshGrid);
   25168           1 :         if(!p) return NULL;
   25169           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MeshGrid);
   25170             : 
   25171             :         /*default field values*/
   25172           1 :         p->displayLevel = 0;
   25173           1 :         p->filterType = 0;
   25174           1 :         p->hierarchicalLevel = 0;
   25175           1 :         p->solid = 1;
   25176           1 :         return (GF_Node *)p;
   25177             : }
   25178             : 
   25179             : 
   25180             : /*
   25181             :         NonLinearDeformer Node deletion
   25182             : */
   25183             : 
   25184          67 : static void NonLinearDeformer_Del(GF_Node *node)
   25185             : {
   25186             :         M_NonLinearDeformer *p = (M_NonLinearDeformer *) node;
   25187          67 :         gf_sg_mffloat_del(p->extend);
   25188          67 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   25189          67 :         gf_node_free((GF_Node *) p);
   25190          67 : }
   25191             : 
   25192             : static const u16 NonLinearDeformer_Def2All[] = { 0, 1, 2, 3, 4};
   25193             : static const u16 NonLinearDeformer_In2All[] = { 0, 1, 2, 3, 4};
   25194             : static const u16 NonLinearDeformer_Out2All[] = { 0, 1, 2, 3, 4};
   25195             : 
   25196             : static u32 NonLinearDeformer_get_field_count(GF_Node *node, u8 IndexMode)
   25197             : {
   25198          76 :         switch(IndexMode) {
   25199             :         case GF_SG_FIELD_CODING_IN:
   25200             :                 return 5;
   25201             :         case GF_SG_FIELD_CODING_DEF:
   25202             :                 return 5;
   25203             :         case GF_SG_FIELD_CODING_OUT:
   25204             :                 return 5;
   25205           1 :         case GF_SG_FIELD_CODING_DYN:
   25206             :                 return 0;
   25207             :         default:
   25208             :                 return 5;
   25209             :         }
   25210             : }
   25211             : 
   25212             : static GF_Err NonLinearDeformer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25213             : {
   25214         165 :         switch(IndexMode) {
   25215           0 :         case GF_SG_FIELD_CODING_IN:
   25216           0 :                 *allField = NonLinearDeformer_In2All[inField];
   25217             :                 return GF_OK;
   25218         160 :         case GF_SG_FIELD_CODING_DEF:
   25219         160 :                 *allField = NonLinearDeformer_Def2All[inField];
   25220             :                 return GF_OK;
   25221           0 :         case GF_SG_FIELD_CODING_OUT:
   25222           0 :                 *allField = NonLinearDeformer_Out2All[inField];
   25223             :                 return GF_OK;
   25224             :         default:
   25225             :                 return GF_BAD_PARAM;
   25226             :         }
   25227             : }
   25228         568 : static GF_Err NonLinearDeformer_get_field(GF_Node *node, GF_FieldInfo *info)
   25229             : {
   25230         568 :         switch (info->fieldIndex) {
   25231         132 :         case 0:
   25232         132 :                 info->name = "axis";
   25233         132 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25234         132 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   25235         132 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->axis;
   25236         132 :                 return GF_OK;
   25237         132 :         case 1:
   25238         132 :                 info->name = "extend";
   25239         132 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25240         132 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25241         132 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->extend;
   25242         132 :                 return GF_OK;
   25243          97 :         case 2:
   25244          97 :                 info->name = "geometry";
   25245          97 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25246          97 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25247          97 :                 info->NDTtype = NDT_SFGeometryNode;
   25248          97 :                 info->far_ptr = & ((M_NonLinearDeformer *)node)->geometry;
   25249          97 :                 return GF_OK;
   25250         134 :         case 3:
   25251         134 :                 info->name = "param";
   25252         134 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25253         134 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   25254         134 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->param;
   25255         134 :                 return GF_OK;
   25256          73 :         case 4:
   25257          73 :                 info->name = "type";
   25258          73 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25259          73 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25260          73 :                 info->far_ptr = & ((M_NonLinearDeformer *) node)->type;
   25261          73 :                 return GF_OK;
   25262             :         default:
   25263             :                 return GF_BAD_PARAM;
   25264             :         }
   25265             : }
   25266             : 
   25267             : 
   25268          71 : static s32 NonLinearDeformer_get_field_index_by_name(char *name)
   25269             : {
   25270          71 :         if (!strcmp("axis", name)) return 0;
   25271          54 :         if (!strcmp("extend", name)) return 1;
   25272          37 :         if (!strcmp("geometry", name)) return 2;
   25273          20 :         if (!strcmp("param", name)) return 3;
   25274           2 :         if (!strcmp("type", name)) return 4;
   25275           0 :         return -1;
   25276             : }
   25277             : static Bool NonLinearDeformer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25278             : {
   25279             :         switch (FieldIndex) {
   25280             :         default:
   25281             :                 return 0;
   25282             :         }
   25283             : }
   25284             : 
   25285             : 
   25286             : 
   25287          67 : GF_Node *NonLinearDeformer_Create()
   25288             : {
   25289             :         M_NonLinearDeformer *p;
   25290          67 :         GF_SAFEALLOC(p, M_NonLinearDeformer);
   25291          67 :         if(!p) return NULL;
   25292          67 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NonLinearDeformer);
   25293             : 
   25294             :         /*default field values*/
   25295          67 :         p->axis.x = FLT2FIX(0);
   25296          67 :         p->axis.y = FLT2FIX(0);
   25297          67 :         p->axis.z = FLT2FIX(1);
   25298          67 :         p->param = FLT2FIX(0);
   25299          67 :         p->type = 0;
   25300          67 :         return (GF_Node *)p;
   25301             : }
   25302             : 
   25303             : 
   25304             : /*
   25305             :         NurbsCurve Node deletion
   25306             : */
   25307             : 
   25308           1 : static void NurbsCurve_Del(GF_Node *node)
   25309             : {
   25310             :         M_NurbsCurve *p = (M_NurbsCurve *) node;
   25311           1 :         gf_sg_mfint32_del(p->set_colorIndex);
   25312           1 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   25313           1 :         gf_sg_mfvec4f_del(p->controlPoint);
   25314           1 :         gf_sg_mfint32_del(p->colorIndex);
   25315           1 :         gf_sg_mffloat_del(p->knot);
   25316           1 :         gf_node_free((GF_Node *) p);
   25317           1 : }
   25318             : 
   25319             : static const u16 NurbsCurve_Def2All[] = { 1, 2, 3, 4, 5, 6, 7};
   25320             : static const u16 NurbsCurve_In2All[] = { 0, 1, 2, 3};
   25321             : static const u16 NurbsCurve_Out2All[] = { 1, 2, 3};
   25322             : static const u16 NurbsCurve_Dyn2All[] = { 2};
   25323             : 
   25324             : static u32 NurbsCurve_get_field_count(GF_Node *node, u8 IndexMode)
   25325             : {
   25326             :         switch(IndexMode) {
   25327             :         case GF_SG_FIELD_CODING_IN:
   25328             :                 return 4;
   25329             :         case GF_SG_FIELD_CODING_DEF:
   25330             :                 return 7;
   25331             :         case GF_SG_FIELD_CODING_OUT:
   25332             :                 return 3;
   25333             :         case GF_SG_FIELD_CODING_DYN:
   25334             :                 return 1;
   25335             :         default:
   25336             :                 return 8;
   25337             :         }
   25338             : }
   25339             : 
   25340             : static GF_Err NurbsCurve_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25341             : {
   25342           8 :         switch(IndexMode) {
   25343           0 :         case GF_SG_FIELD_CODING_IN:
   25344           0 :                 *allField = NurbsCurve_In2All[inField];
   25345             :                 return GF_OK;
   25346           0 :         case GF_SG_FIELD_CODING_DEF:
   25347           0 :                 *allField = NurbsCurve_Def2All[inField];
   25348             :                 return GF_OK;
   25349           0 :         case GF_SG_FIELD_CODING_OUT:
   25350           0 :                 *allField = NurbsCurve_Out2All[inField];
   25351             :                 return GF_OK;
   25352           0 :         case GF_SG_FIELD_CODING_DYN:
   25353           0 :                 *allField = NurbsCurve_Dyn2All[inField];
   25354             :                 return GF_OK;
   25355             :         default:
   25356             :                 return GF_BAD_PARAM;
   25357             :         }
   25358             : }
   25359          16 : static GF_Err NurbsCurve_get_field(GF_Node *node, GF_FieldInfo *info)
   25360             : {
   25361          16 :         switch (info->fieldIndex) {
   25362           2 :         case 0:
   25363           2 :                 info->name = "set_colorIndex";
   25364           2 :                 info->eventType = GF_SG_EVENT_IN;
   25365           2 :                 info->on_event_in = ((M_NurbsCurve *)node)->on_set_colorIndex;
   25366           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25367           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->set_colorIndex;
   25368           2 :                 return GF_OK;
   25369           2 :         case 1:
   25370           2 :                 info->name = "color";
   25371           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25372           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25373           2 :                 info->NDTtype = NDT_SFColorNode;
   25374           2 :                 info->far_ptr = & ((M_NurbsCurve *)node)->color;
   25375           2 :                 return GF_OK;
   25376           2 :         case 2:
   25377           2 :                 info->name = "controlPoint";
   25378           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25379           2 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   25380           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->controlPoint;
   25381           2 :                 return GF_OK;
   25382           2 :         case 3:
   25383           2 :                 info->name = "tessellation";
   25384           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25385           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25386           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->tessellation;
   25387           2 :                 return GF_OK;
   25388           2 :         case 4:
   25389           2 :                 info->name = "colorIndex";
   25390           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25391           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25392           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->colorIndex;
   25393           2 :                 return GF_OK;
   25394           2 :         case 5:
   25395           2 :                 info->name = "colorPerVertex";
   25396           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25397           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25398           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->colorPerVertex;
   25399           2 :                 return GF_OK;
   25400           2 :         case 6:
   25401           2 :                 info->name = "knot";
   25402           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25403           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25404           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->knot;
   25405           2 :                 return GF_OK;
   25406           2 :         case 7:
   25407           2 :                 info->name = "order";
   25408           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25409           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25410           2 :                 info->far_ptr = & ((M_NurbsCurve *) node)->order;
   25411           2 :                 return GF_OK;
   25412             :         default:
   25413             :                 return GF_BAD_PARAM;
   25414             :         }
   25415             : }
   25416             : 
   25417             : 
   25418           8 : static s32 NurbsCurve_get_field_index_by_name(char *name)
   25419             : {
   25420           8 :         if (!strcmp("set_colorIndex", name)) return 0;
   25421           7 :         if (!strcmp("color", name)) return 1;
   25422           6 :         if (!strcmp("controlPoint", name)) return 2;
   25423           5 :         if (!strcmp("tessellation", name)) return 3;
   25424           4 :         if (!strcmp("colorIndex", name)) return 4;
   25425           3 :         if (!strcmp("colorPerVertex", name)) return 5;
   25426           2 :         if (!strcmp("knot", name)) return 6;
   25427           1 :         if (!strcmp("order", name)) return 7;
   25428           0 :         return -1;
   25429             : }
   25430             : static Bool NurbsCurve_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25431             : {
   25432           8 :         switch (FieldIndex) {
   25433           1 :         case 2:
   25434           1 :                 *AType = 15;
   25435           1 :                 *QType = 15;
   25436           1 :                 *b_min = FIX_MIN;
   25437           1 :                 *b_max = FIX_MAX;
   25438             :                 return 1;
   25439           1 :         case 4:
   25440           1 :                 *AType = 0;
   25441           1 :                 *QType = 14;
   25442             :                 return 1;
   25443           1 :         case 7:
   25444           1 :                 *AType = 0;
   25445           1 :                 *QType = 13;
   25446           1 :                 *QT13_bits = 5;
   25447           1 :                 *b_min = FLT2FIX(3);
   25448           1 :                 *b_max = FLT2FIX(34);
   25449             :                 return 1;
   25450             :         default:
   25451             :                 return 0;
   25452             :         }
   25453             : }
   25454             : 
   25455             : 
   25456             : 
   25457           1 : GF_Node *NurbsCurve_Create()
   25458             : {
   25459             :         M_NurbsCurve *p;
   25460           1 :         GF_SAFEALLOC(p, M_NurbsCurve);
   25461           1 :         if(!p) return NULL;
   25462           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NurbsCurve);
   25463             : 
   25464             :         /*default field values*/
   25465           1 :         p->tessellation = 0;
   25466           1 :         p->colorPerVertex = 1;
   25467           1 :         p->order = 4;
   25468           1 :         return (GF_Node *)p;
   25469             : }
   25470             : 
   25471             : 
   25472             : /*
   25473             :         NurbsCurve2D Node deletion
   25474             : */
   25475             : 
   25476           1 : static void NurbsCurve2D_Del(GF_Node *node)
   25477             : {
   25478             :         M_NurbsCurve2D *p = (M_NurbsCurve2D *) node;
   25479           1 :         gf_sg_mfint32_del(p->set_colorIndex);
   25480           1 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   25481           1 :         gf_sg_mfvec3f_del(p->controlPoint);
   25482           1 :         gf_sg_mfint32_del(p->colorIndex);
   25483           1 :         gf_sg_mffloat_del(p->knot);
   25484           1 :         gf_node_free((GF_Node *) p);
   25485           1 : }
   25486             : 
   25487             : static const u16 NurbsCurve2D_Def2All[] = { 1, 2, 3, 4, 5, 6, 7};
   25488             : static const u16 NurbsCurve2D_In2All[] = { 0, 1, 2, 3};
   25489             : static const u16 NurbsCurve2D_Out2All[] = { 1, 2, 3};
   25490             : static const u16 NurbsCurve2D_Dyn2All[] = { 2};
   25491             : 
   25492             : static u32 NurbsCurve2D_get_field_count(GF_Node *node, u8 IndexMode)
   25493             : {
   25494             :         switch(IndexMode) {
   25495             :         case GF_SG_FIELD_CODING_IN:
   25496             :                 return 4;
   25497             :         case GF_SG_FIELD_CODING_DEF:
   25498             :                 return 7;
   25499             :         case GF_SG_FIELD_CODING_OUT:
   25500             :                 return 3;
   25501             :         case GF_SG_FIELD_CODING_DYN:
   25502             :                 return 1;
   25503             :         default:
   25504             :                 return 8;
   25505             :         }
   25506             : }
   25507             : 
   25508             : static GF_Err NurbsCurve2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25509             : {
   25510           8 :         switch(IndexMode) {
   25511           0 :         case GF_SG_FIELD_CODING_IN:
   25512           0 :                 *allField = NurbsCurve2D_In2All[inField];
   25513             :                 return GF_OK;
   25514           0 :         case GF_SG_FIELD_CODING_DEF:
   25515           0 :                 *allField = NurbsCurve2D_Def2All[inField];
   25516             :                 return GF_OK;
   25517           0 :         case GF_SG_FIELD_CODING_OUT:
   25518           0 :                 *allField = NurbsCurve2D_Out2All[inField];
   25519             :                 return GF_OK;
   25520           0 :         case GF_SG_FIELD_CODING_DYN:
   25521           0 :                 *allField = NurbsCurve2D_Dyn2All[inField];
   25522             :                 return GF_OK;
   25523             :         default:
   25524             :                 return GF_BAD_PARAM;
   25525             :         }
   25526             : }
   25527          16 : static GF_Err NurbsCurve2D_get_field(GF_Node *node, GF_FieldInfo *info)
   25528             : {
   25529          16 :         switch (info->fieldIndex) {
   25530           2 :         case 0:
   25531           2 :                 info->name = "set_colorIndex";
   25532           2 :                 info->eventType = GF_SG_EVENT_IN;
   25533           2 :                 info->on_event_in = ((M_NurbsCurve2D *)node)->on_set_colorIndex;
   25534           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25535           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->set_colorIndex;
   25536           2 :                 return GF_OK;
   25537           2 :         case 1:
   25538           2 :                 info->name = "color";
   25539           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25540           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25541           2 :                 info->NDTtype = NDT_SFColorNode;
   25542           2 :                 info->far_ptr = & ((M_NurbsCurve2D *)node)->color;
   25543           2 :                 return GF_OK;
   25544           2 :         case 2:
   25545           2 :                 info->name = "controlPoint";
   25546           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25547           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   25548           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->controlPoint;
   25549           2 :                 return GF_OK;
   25550           2 :         case 3:
   25551           2 :                 info->name = "tessellation";
   25552           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25553           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25554           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->tessellation;
   25555           2 :                 return GF_OK;
   25556           2 :         case 4:
   25557           2 :                 info->name = "colorIndex";
   25558           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25559           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25560           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->colorIndex;
   25561           2 :                 return GF_OK;
   25562           2 :         case 5:
   25563           2 :                 info->name = "colorPerVertex";
   25564           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25565           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25566           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->colorPerVertex;
   25567           2 :                 return GF_OK;
   25568           2 :         case 6:
   25569           2 :                 info->name = "knot";
   25570           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25571           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25572           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->knot;
   25573           2 :                 return GF_OK;
   25574           2 :         case 7:
   25575           2 :                 info->name = "order";
   25576           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25577           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25578           2 :                 info->far_ptr = & ((M_NurbsCurve2D *) node)->order;
   25579           2 :                 return GF_OK;
   25580             :         default:
   25581             :                 return GF_BAD_PARAM;
   25582             :         }
   25583             : }
   25584             : 
   25585             : 
   25586           8 : static s32 NurbsCurve2D_get_field_index_by_name(char *name)
   25587             : {
   25588           8 :         if (!strcmp("set_colorIndex", name)) return 0;
   25589           7 :         if (!strcmp("color", name)) return 1;
   25590           6 :         if (!strcmp("controlPoint", name)) return 2;
   25591           5 :         if (!strcmp("tessellation", name)) return 3;
   25592           4 :         if (!strcmp("colorIndex", name)) return 4;
   25593           3 :         if (!strcmp("colorPerVertex", name)) return 5;
   25594           2 :         if (!strcmp("knot", name)) return 6;
   25595           1 :         if (!strcmp("order", name)) return 7;
   25596           0 :         return -1;
   25597             : }
   25598             : static Bool NurbsCurve2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25599             : {
   25600           8 :         switch (FieldIndex) {
   25601           1 :         case 2:
   25602           1 :                 *AType = 2;
   25603           1 :                 *QType = 2;
   25604           1 :                 *b_min = FIX_MIN;
   25605           1 :                 *b_max = FIX_MAX;
   25606             :                 return 1;
   25607           1 :         case 4:
   25608           1 :                 *AType = 0;
   25609           1 :                 *QType = 14;
   25610             :                 return 1;
   25611           1 :         case 7:
   25612           1 :                 *AType = 0;
   25613           1 :                 *QType = 13;
   25614           1 :                 *QT13_bits = 5;
   25615           1 :                 *b_min = FLT2FIX(3);
   25616           1 :                 *b_max = FLT2FIX(34);
   25617             :                 return 1;
   25618             :         default:
   25619             :                 return 0;
   25620             :         }
   25621             : }
   25622             : 
   25623             : 
   25624             : 
   25625           1 : GF_Node *NurbsCurve2D_Create()
   25626             : {
   25627             :         M_NurbsCurve2D *p;
   25628           1 :         GF_SAFEALLOC(p, M_NurbsCurve2D);
   25629           1 :         if(!p) return NULL;
   25630           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NurbsCurve2D);
   25631             : 
   25632             :         /*default field values*/
   25633           1 :         p->tessellation = 0;
   25634           1 :         p->colorPerVertex = 1;
   25635           1 :         p->order = 4;
   25636           1 :         return (GF_Node *)p;
   25637             : }
   25638             : 
   25639             : 
   25640             : /*
   25641             :         NurbsSurface Node deletion
   25642             : */
   25643             : 
   25644           1 : static void NurbsSurface_Del(GF_Node *node)
   25645             : {
   25646             :         M_NurbsSurface *p = (M_NurbsSurface *) node;
   25647           1 :         gf_sg_mfint32_del(p->set_colorIndex);
   25648           1 :         gf_sg_mfint32_del(p->set_texColorIndex);
   25649           1 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   25650           1 :         gf_sg_mfvec4f_del(p->controlPoint);
   25651           1 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
   25652           1 :         gf_sg_mfint32_del(p->colorIndex);
   25653           1 :         gf_sg_mfint32_del(p->texColorIndex);
   25654           1 :         gf_sg_mffloat_del(p->uKnot);
   25655           1 :         gf_sg_mffloat_del(p->vKnot);
   25656           1 :         gf_node_free((GF_Node *) p);
   25657           1 : }
   25658             : 
   25659             : static const u16 NurbsSurface_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
   25660             : static const u16 NurbsSurface_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   25661             : static const u16 NurbsSurface_Out2All[] = { 2, 3, 4, 5, 6};
   25662             : static const u16 NurbsSurface_Dyn2All[] = { 3};
   25663             : 
   25664             : static u32 NurbsSurface_get_field_count(GF_Node *node, u8 IndexMode)
   25665             : {
   25666             :         switch(IndexMode) {
   25667             :         case GF_SG_FIELD_CODING_IN:
   25668             :                 return 7;
   25669             :         case GF_SG_FIELD_CODING_DEF:
   25670             :                 return 16;
   25671             :         case GF_SG_FIELD_CODING_OUT:
   25672             :                 return 5;
   25673             :         case GF_SG_FIELD_CODING_DYN:
   25674             :                 return 1;
   25675             :         default:
   25676             :                 return 18;
   25677             :         }
   25678             : }
   25679             : 
   25680             : static GF_Err NurbsSurface_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25681             : {
   25682          18 :         switch(IndexMode) {
   25683           0 :         case GF_SG_FIELD_CODING_IN:
   25684           0 :                 *allField = NurbsSurface_In2All[inField];
   25685             :                 return GF_OK;
   25686           0 :         case GF_SG_FIELD_CODING_DEF:
   25687           0 :                 *allField = NurbsSurface_Def2All[inField];
   25688             :                 return GF_OK;
   25689           0 :         case GF_SG_FIELD_CODING_OUT:
   25690           0 :                 *allField = NurbsSurface_Out2All[inField];
   25691             :                 return GF_OK;
   25692           0 :         case GF_SG_FIELD_CODING_DYN:
   25693           0 :                 *allField = NurbsSurface_Dyn2All[inField];
   25694             :                 return GF_OK;
   25695             :         default:
   25696             :                 return GF_BAD_PARAM;
   25697             :         }
   25698             : }
   25699          36 : static GF_Err NurbsSurface_get_field(GF_Node *node, GF_FieldInfo *info)
   25700             : {
   25701          36 :         switch (info->fieldIndex) {
   25702           2 :         case 0:
   25703           2 :                 info->name = "set_colorIndex";
   25704           2 :                 info->eventType = GF_SG_EVENT_IN;
   25705           2 :                 info->on_event_in = ((M_NurbsSurface *)node)->on_set_colorIndex;
   25706           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25707           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->set_colorIndex;
   25708           2 :                 return GF_OK;
   25709           2 :         case 1:
   25710           2 :                 info->name = "set_texColorIndex";
   25711           2 :                 info->eventType = GF_SG_EVENT_IN;
   25712           2 :                 info->on_event_in = ((M_NurbsSurface *)node)->on_set_texColorIndex;
   25713           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25714           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->set_texColorIndex;
   25715           2 :                 return GF_OK;
   25716           2 :         case 2:
   25717           2 :                 info->name = "color";
   25718           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25719           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25720           2 :                 info->NDTtype = NDT_SFColorNode;
   25721           2 :                 info->far_ptr = & ((M_NurbsSurface *)node)->color;
   25722           2 :                 return GF_OK;
   25723           2 :         case 3:
   25724           2 :                 info->name = "controlPoint";
   25725           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25726           2 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   25727           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->controlPoint;
   25728           2 :                 return GF_OK;
   25729           2 :         case 4:
   25730           2 :                 info->name = "texCoord";
   25731           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25732           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   25733           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   25734           2 :                 info->far_ptr = & ((M_NurbsSurface *)node)->texCoord;
   25735           2 :                 return GF_OK;
   25736           2 :         case 5:
   25737           2 :                 info->name = "uTessellation";
   25738           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25739           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25740           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uTessellation;
   25741           2 :                 return GF_OK;
   25742           2 :         case 6:
   25743           2 :                 info->name = "vTessellation";
   25744           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   25745           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25746           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vTessellation;
   25747           2 :                 return GF_OK;
   25748           2 :         case 7:
   25749           2 :                 info->name = "ccw";
   25750           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25751           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25752           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->ccw;
   25753           2 :                 return GF_OK;
   25754           2 :         case 8:
   25755           2 :                 info->name = "colorIndex";
   25756           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25757           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25758           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->colorIndex;
   25759           2 :                 return GF_OK;
   25760           2 :         case 9:
   25761           2 :                 info->name = "colorPerVertex";
   25762           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25763           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25764           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->colorPerVertex;
   25765           2 :                 return GF_OK;
   25766           2 :         case 10:
   25767           2 :                 info->name = "solid";
   25768           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25769           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   25770           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->solid;
   25771           2 :                 return GF_OK;
   25772           2 :         case 11:
   25773           2 :                 info->name = "texColorIndex";
   25774           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25775           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25776           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->texColorIndex;
   25777           2 :                 return GF_OK;
   25778           2 :         case 12:
   25779           2 :                 info->name = "uDimension";
   25780           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25781           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25782           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uDimension;
   25783           2 :                 return GF_OK;
   25784           2 :         case 13:
   25785           2 :                 info->name = "uKnot";
   25786           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25787           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25788           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uKnot;
   25789           2 :                 return GF_OK;
   25790           2 :         case 14:
   25791           2 :                 info->name = "uOrder";
   25792           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25793           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25794           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->uOrder;
   25795           2 :                 return GF_OK;
   25796           2 :         case 15:
   25797           2 :                 info->name = "vDimension";
   25798           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25799           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25800           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vDimension;
   25801           2 :                 return GF_OK;
   25802           2 :         case 16:
   25803           2 :                 info->name = "vKnot";
   25804           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25805           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   25806           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vKnot;
   25807           2 :                 return GF_OK;
   25808           2 :         case 17:
   25809           2 :                 info->name = "vOrder";
   25810           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25811           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25812           2 :                 info->far_ptr = & ((M_NurbsSurface *) node)->vOrder;
   25813           2 :                 return GF_OK;
   25814             :         default:
   25815             :                 return GF_BAD_PARAM;
   25816             :         }
   25817             : }
   25818             : 
   25819             : 
   25820          18 : static s32 NurbsSurface_get_field_index_by_name(char *name)
   25821             : {
   25822          18 :         if (!strcmp("set_colorIndex", name)) return 0;
   25823          17 :         if (!strcmp("set_texColorIndex", name)) return 1;
   25824          16 :         if (!strcmp("color", name)) return 2;
   25825          15 :         if (!strcmp("controlPoint", name)) return 3;
   25826          14 :         if (!strcmp("texCoord", name)) return 4;
   25827          13 :         if (!strcmp("uTessellation", name)) return 5;
   25828          12 :         if (!strcmp("vTessellation", name)) return 6;
   25829          11 :         if (!strcmp("ccw", name)) return 7;
   25830          10 :         if (!strcmp("colorIndex", name)) return 8;
   25831           9 :         if (!strcmp("colorPerVertex", name)) return 9;
   25832           8 :         if (!strcmp("solid", name)) return 10;
   25833           7 :         if (!strcmp("texColorIndex", name)) return 11;
   25834           6 :         if (!strcmp("uDimension", name)) return 12;
   25835           5 :         if (!strcmp("uKnot", name)) return 13;
   25836           4 :         if (!strcmp("uOrder", name)) return 14;
   25837           3 :         if (!strcmp("vDimension", name)) return 15;
   25838           2 :         if (!strcmp("vKnot", name)) return 16;
   25839           1 :         if (!strcmp("vOrder", name)) return 17;
   25840           0 :         return -1;
   25841             : }
   25842          18 : static Bool NurbsSurface_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25843             : {
   25844          18 :         switch (FieldIndex) {
   25845           1 :         case 3:
   25846           1 :                 *AType = 15;
   25847           1 :                 *QType = 15;
   25848           1 :                 *b_min = FIX_MIN;
   25849           1 :                 *b_max = FIX_MAX;
   25850             :                 return 1;
   25851           1 :         case 8:
   25852           1 :                 *AType = 0;
   25853           1 :                 *QType = 14;
   25854             :                 return 1;
   25855           1 :         case 11:
   25856           1 :                 *AType = 0;
   25857           1 :                 *QType = 14;
   25858             :                 return 1;
   25859           1 :         case 12:
   25860           1 :                 *AType = 0;
   25861           1 :                 *QType = 13;
   25862           1 :                 *QT13_bits = 8;
   25863           1 :                 *b_min = FLT2FIX(3);
   25864           1 :                 *b_max = FLT2FIX(258);
   25865             :                 return 1;
   25866           1 :         case 14:
   25867           1 :                 *AType = 0;
   25868           1 :                 *QType = 13;
   25869           1 :                 *QT13_bits = 5;
   25870           1 :                 *b_min = FLT2FIX(3);
   25871           1 :                 *b_max = FLT2FIX(34);
   25872             :                 return 1;
   25873           1 :         case 15:
   25874           1 :                 *AType = 0;
   25875           1 :                 *QType = 13;
   25876           1 :                 *QT13_bits = 8;
   25877           1 :                 *b_min = FLT2FIX(3);
   25878           1 :                 *b_max = FLT2FIX(258);
   25879             :                 return 1;
   25880           1 :         case 17:
   25881           1 :                 *AType = 0;
   25882           1 :                 *QType = 13;
   25883           1 :                 *QT13_bits = 5;
   25884           1 :                 *b_min = FLT2FIX(3);
   25885           1 :                 *b_max = FLT2FIX(34);
   25886             :                 return 1;
   25887             :         default:
   25888             :                 return 0;
   25889             :         }
   25890             : }
   25891             : 
   25892             : 
   25893             : 
   25894           1 : GF_Node *NurbsSurface_Create()
   25895             : {
   25896             :         M_NurbsSurface *p;
   25897           1 :         GF_SAFEALLOC(p, M_NurbsSurface);
   25898           1 :         if(!p) return NULL;
   25899           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_NurbsSurface);
   25900             : 
   25901             :         /*default field values*/
   25902           1 :         p->uTessellation = 0;
   25903           1 :         p->vTessellation = 0;
   25904           1 :         p->ccw = 1;
   25905           1 :         p->colorPerVertex = 1;
   25906           1 :         p->solid = 1;
   25907           1 :         p->uDimension = 4;
   25908           1 :         p->uOrder = 4;
   25909           1 :         p->vDimension = 4;
   25910           1 :         p->vOrder = 4;
   25911           1 :         return (GF_Node *)p;
   25912             : }
   25913             : 
   25914             : 
   25915             : /*
   25916             :         OctreeImage Node deletion
   25917             : */
   25918             : 
   25919           1 : static void OctreeImage_Del(GF_Node *node)
   25920             : {
   25921             :         M_OctreeImage *p = (M_OctreeImage *) node;
   25922           1 :         gf_node_unregister_children((GF_Node *) p, p->images);
   25923           1 :         gf_sg_mfint32_del(p->octree);
   25924           1 :         gf_sg_mfint32_del(p->voxelImageIndex);
   25925           1 :         gf_node_free((GF_Node *) p);
   25926           1 : }
   25927             : 
   25928             : static const u16 OctreeImage_Def2All[] = { 0, 1, 2, 3};
   25929             : 
   25930             : static u32 OctreeImage_get_field_count(GF_Node *node, u8 IndexMode)
   25931             : {
   25932           6 :         switch(IndexMode) {
   25933             :         case GF_SG_FIELD_CODING_IN:
   25934             :                 return 0;
   25935           1 :         case GF_SG_FIELD_CODING_DEF:
   25936             :                 return 4;
   25937             :         case GF_SG_FIELD_CODING_OUT:
   25938             :                 return 0;
   25939             :         case GF_SG_FIELD_CODING_DYN:
   25940             :                 return 0;
   25941           2 :         default:
   25942             :                 return 4;
   25943             :         }
   25944             : }
   25945             : 
   25946             : static GF_Err OctreeImage_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   25947             : {
   25948           4 :         switch(IndexMode) {
   25949           0 :         case GF_SG_FIELD_CODING_DEF:
   25950           0 :                 *allField = OctreeImage_Def2All[inField];
   25951             :                 return GF_OK;
   25952             :         default:
   25953             :                 return GF_BAD_PARAM;
   25954             :         }
   25955             : }
   25956           8 : static GF_Err OctreeImage_get_field(GF_Node *node, GF_FieldInfo *info)
   25957             : {
   25958           8 :         switch (info->fieldIndex) {
   25959           2 :         case 0:
   25960           2 :                 info->name = "images";
   25961           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25962           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   25963           2 :                 info->NDTtype = NDT_SFDepthImageNode;
   25964           2 :                 info->far_ptr = & ((M_OctreeImage *)node)->images;
   25965           2 :                 return GF_OK;
   25966           2 :         case 1:
   25967           2 :                 info->name = "octree";
   25968           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25969           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25970           2 :                 info->far_ptr = & ((M_OctreeImage *) node)->octree;
   25971           2 :                 return GF_OK;
   25972           2 :         case 2:
   25973           2 :                 info->name = "octreeResolution";
   25974           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25975           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   25976           2 :                 info->far_ptr = & ((M_OctreeImage *) node)->octreeResolution;
   25977           2 :                 return GF_OK;
   25978           2 :         case 3:
   25979           2 :                 info->name = "voxelImageIndex";
   25980           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   25981           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   25982           2 :                 info->far_ptr = & ((M_OctreeImage *) node)->voxelImageIndex;
   25983           2 :                 return GF_OK;
   25984             :         default:
   25985             :                 return GF_BAD_PARAM;
   25986             :         }
   25987             : }
   25988             : 
   25989             : 
   25990           4 : static s32 OctreeImage_get_field_index_by_name(char *name)
   25991             : {
   25992           4 :         if (!strcmp("images", name)) return 0;
   25993           3 :         if (!strcmp("octree", name)) return 1;
   25994           2 :         if (!strcmp("octreeResolution", name)) return 2;
   25995           1 :         if (!strcmp("voxelImageIndex", name)) return 3;
   25996           0 :         return -1;
   25997             : }
   25998             : static Bool OctreeImage_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   25999             : {
   26000           4 :         switch (FieldIndex) {
   26001           1 :         case 1:
   26002           1 :                 *AType = 0;
   26003           1 :                 *QType = 13;
   26004           1 :                 *QT13_bits = 8;
   26005           1 :                 *b_min = FLT2FIX(0);
   26006           1 :                 *b_max = FLT2FIX(255);
   26007             :                 return 1;
   26008           1 :         case 3:
   26009           1 :                 *AType = 0;
   26010           1 :                 *QType = 13;
   26011           1 :                 *QT13_bits = 8;
   26012           1 :                 *b_min = FLT2FIX(0);
   26013           1 :                 *b_max = FLT2FIX(255);
   26014             :                 return 1;
   26015             :         default:
   26016             :                 return 0;
   26017             :         }
   26018             : }
   26019             : 
   26020             : 
   26021             : 
   26022           1 : GF_Node *OctreeImage_Create()
   26023             : {
   26024             :         M_OctreeImage *p;
   26025           1 :         GF_SAFEALLOC(p, M_OctreeImage);
   26026           1 :         if(!p) return NULL;
   26027           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_OctreeImage);
   26028             : 
   26029             :         /*default field values*/
   26030           1 :         p->octreeResolution = 256;
   26031           1 :         return (GF_Node *)p;
   26032             : }
   26033             : 
   26034             : 
   26035             : /*
   26036             :         XXParticles Node deletion
   26037             : */
   26038             : 
   26039           1 : static void XXParticles_Del(GF_Node *node)
   26040             : {
   26041             :         M_XXParticles *p = (M_XXParticles *) node;
   26042           1 :         gf_node_unregister_children((GF_Node *) p, p->influences);
   26043           1 :         gf_node_unregister((GF_Node *) p->init, (GF_Node *) p);
   26044           1 :         gf_node_unregister((GF_Node *) p->primitive, (GF_Node *) p);
   26045           1 :         gf_node_free((GF_Node *) p);
   26046           1 : }
   26047             : 
   26048             : static const u16 XXParticles_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
   26049             : static const u16 XXParticles_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
   26050             : static const u16 XXParticles_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
   26051             : 
   26052             : static u32 XXParticles_get_field_count(GF_Node *node, u8 IndexMode)
   26053             : {
   26054           6 :         switch(IndexMode) {
   26055             :         case GF_SG_FIELD_CODING_IN:
   26056             :                 return 25;
   26057             :         case GF_SG_FIELD_CODING_DEF:
   26058             :                 return 25;
   26059             :         case GF_SG_FIELD_CODING_OUT:
   26060             :                 return 25;
   26061           1 :         case GF_SG_FIELD_CODING_DYN:
   26062             :                 return 0;
   26063             :         default:
   26064             :                 return 25;
   26065             :         }
   26066             : }
   26067             : 
   26068             : static GF_Err XXParticles_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26069             : {
   26070          25 :         switch(IndexMode) {
   26071           0 :         case GF_SG_FIELD_CODING_IN:
   26072           0 :                 *allField = XXParticles_In2All[inField];
   26073             :                 return GF_OK;
   26074           0 :         case GF_SG_FIELD_CODING_DEF:
   26075           0 :                 *allField = XXParticles_Def2All[inField];
   26076             :                 return GF_OK;
   26077           0 :         case GF_SG_FIELD_CODING_OUT:
   26078           0 :                 *allField = XXParticles_Out2All[inField];
   26079             :                 return GF_OK;
   26080             :         default:
   26081             :                 return GF_BAD_PARAM;
   26082             :         }
   26083             : }
   26084          50 : static GF_Err XXParticles_get_field(GF_Node *node, GF_FieldInfo *info)
   26085             : {
   26086          50 :         switch (info->fieldIndex) {
   26087           2 :         case 0:
   26088           2 :                 info->name = "creationRate";
   26089           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26090           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26091           2 :                 info->far_ptr = & ((M_XXParticles *) node)->creationRate;
   26092           2 :                 return GF_OK;
   26093           2 :         case 1:
   26094           2 :                 info->name = "creationRateVariation";
   26095           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26096           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26097           2 :                 info->far_ptr = & ((M_XXParticles *) node)->creationRateVariation;
   26098           2 :                 return GF_OK;
   26099           2 :         case 2:
   26100           2 :                 info->name = "emitAlpha";
   26101           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26102           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26103           2 :                 info->far_ptr = & ((M_XXParticles *) node)->emitAlpha;
   26104           2 :                 return GF_OK;
   26105           2 :         case 3:
   26106           2 :                 info->name = "emitColor";
   26107           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26108           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   26109           2 :                 info->far_ptr = & ((M_XXParticles *) node)->emitColor;
   26110           2 :                 return GF_OK;
   26111           2 :         case 4:
   26112           2 :                 info->name = "emitColorVariation";
   26113           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26114           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   26115           2 :                 info->far_ptr = & ((M_XXParticles *) node)->emitColorVariation;
   26116           2 :                 return GF_OK;
   26117           2 :         case 5:
   26118           2 :                 info->name = "emitterPosition";
   26119           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26120           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26121           2 :                 info->far_ptr = & ((M_XXParticles *) node)->emitterPosition;
   26122           2 :                 return GF_OK;
   26123           2 :         case 6:
   26124           2 :                 info->name = "emitVelocity";
   26125           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26126           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26127           2 :                 info->far_ptr = & ((M_XXParticles *) node)->emitVelocity;
   26128           2 :                 return GF_OK;
   26129           2 :         case 7:
   26130           2 :                 info->name = "emitVelocityVariation";
   26131           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26132           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26133           2 :                 info->far_ptr = & ((M_XXParticles *) node)->emitVelocityVariation;
   26134           2 :                 return GF_OK;
   26135           2 :         case 8:
   26136           2 :                 info->name = "enabled";
   26137           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26138           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   26139           2 :                 info->far_ptr = & ((M_XXParticles *) node)->enabled;
   26140           2 :                 return GF_OK;
   26141           2 :         case 9:
   26142           2 :                 info->name = "fadeAlpha";
   26143           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26144           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26145           2 :                 info->far_ptr = & ((M_XXParticles *) node)->fadeAlpha;
   26146           2 :                 return GF_OK;
   26147           2 :         case 10:
   26148           2 :                 info->name = "fadeColor";
   26149           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26150           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   26151           2 :                 info->far_ptr = & ((M_XXParticles *) node)->fadeColor;
   26152           2 :                 return GF_OK;
   26153           2 :         case 11:
   26154           2 :                 info->name = "fadeRate";
   26155           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26156           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26157           2 :                 info->far_ptr = & ((M_XXParticles *) node)->fadeRate;
   26158           2 :                 return GF_OK;
   26159           2 :         case 12:
   26160           2 :                 info->name = "force";
   26161           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26162           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26163           2 :                 info->far_ptr = & ((M_XXParticles *) node)->force;
   26164           2 :                 return GF_OK;
   26165           2 :         case 13:
   26166           2 :                 info->name = "influences";
   26167           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26168           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   26169           2 :                 info->NDTtype = NDT_SFInfluenceNode;
   26170           2 :                 info->far_ptr = & ((M_XXParticles *)node)->influences;
   26171           2 :                 return GF_OK;
   26172           2 :         case 14:
   26173           2 :                 info->name = "init";
   26174           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26175           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   26176           2 :                 info->NDTtype = NDT_SFWorldNode;
   26177           2 :                 info->far_ptr = & ((M_XXParticles *)node)->init;
   26178           2 :                 return GF_OK;
   26179           2 :         case 15:
   26180           2 :                 info->name = "maxLifeTime";
   26181           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26182           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   26183           2 :                 info->far_ptr = & ((M_XXParticles *) node)->maxLifeTime;
   26184           2 :                 return GF_OK;
   26185           2 :         case 16:
   26186           2 :                 info->name = "maxLifeTimeVariation";
   26187           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26188           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26189           2 :                 info->far_ptr = & ((M_XXParticles *) node)->maxLifeTimeVariation;
   26190           2 :                 return GF_OK;
   26191           2 :         case 17:
   26192           2 :                 info->name = "maxParticles";
   26193           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26194           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26195           2 :                 info->far_ptr = & ((M_XXParticles *) node)->maxParticles;
   26196           2 :                 return GF_OK;
   26197           2 :         case 18:
   26198           2 :                 info->name = "minRange";
   26199           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26200           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26201           2 :                 info->far_ptr = & ((M_XXParticles *) node)->minRange;
   26202           2 :                 return GF_OK;
   26203           2 :         case 19:
   26204           2 :                 info->name = "maxRange";
   26205           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26206           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26207           2 :                 info->far_ptr = & ((M_XXParticles *) node)->maxRange;
   26208           2 :                 return GF_OK;
   26209           2 :         case 20:
   26210           2 :                 info->name = "primitive";
   26211           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26212           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   26213           2 :                 info->NDTtype = NDT_SFWorldNode;
   26214           2 :                 info->far_ptr = & ((M_XXParticles *)node)->primitive;
   26215           2 :                 return GF_OK;
   26216           2 :         case 21:
   26217           2 :                 info->name = "primitiveType";
   26218           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26219           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26220           2 :                 info->far_ptr = & ((M_XXParticles *) node)->primitiveType;
   26221           2 :                 return GF_OK;
   26222           2 :         case 22:
   26223           2 :                 info->name = "particleRadius";
   26224           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26225           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26226           2 :                 info->far_ptr = & ((M_XXParticles *) node)->particleRadius;
   26227           2 :                 return GF_OK;
   26228           2 :         case 23:
   26229           2 :                 info->name = "particleRadiusRate";
   26230           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26231           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26232           2 :                 info->far_ptr = & ((M_XXParticles *) node)->particleRadiusRate;
   26233           2 :                 return GF_OK;
   26234           2 :         case 24:
   26235           2 :                 info->name = "particleRadiusVariation";
   26236           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26237           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26238           2 :                 info->far_ptr = & ((M_XXParticles *) node)->particleRadiusVariation;
   26239           2 :                 return GF_OK;
   26240             :         default:
   26241             :                 return GF_BAD_PARAM;
   26242             :         }
   26243             : }
   26244             : 
   26245             : 
   26246          25 : static s32 XXParticles_get_field_index_by_name(char *name)
   26247             : {
   26248          25 :         if (!strcmp("creationRate", name)) return 0;
   26249          24 :         if (!strcmp("creationRateVariation", name)) return 1;
   26250          23 :         if (!strcmp("emitAlpha", name)) return 2;
   26251          22 :         if (!strcmp("emitColor", name)) return 3;
   26252          21 :         if (!strcmp("emitColorVariation", name)) return 4;
   26253          20 :         if (!strcmp("emitterPosition", name)) return 5;
   26254          19 :         if (!strcmp("emitVelocity", name)) return 6;
   26255          18 :         if (!strcmp("emitVelocityVariation", name)) return 7;
   26256          17 :         if (!strcmp("enabled", name)) return 8;
   26257          16 :         if (!strcmp("fadeAlpha", name)) return 9;
   26258          15 :         if (!strcmp("fadeColor", name)) return 10;
   26259          14 :         if (!strcmp("fadeRate", name)) return 11;
   26260          13 :         if (!strcmp("force", name)) return 12;
   26261          12 :         if (!strcmp("influences", name)) return 13;
   26262          11 :         if (!strcmp("init", name)) return 14;
   26263          10 :         if (!strcmp("maxLifeTime", name)) return 15;
   26264           9 :         if (!strcmp("maxLifeTimeVariation", name)) return 16;
   26265           8 :         if (!strcmp("maxParticles", name)) return 17;
   26266           7 :         if (!strcmp("minRange", name)) return 18;
   26267           6 :         if (!strcmp("maxRange", name)) return 19;
   26268           5 :         if (!strcmp("primitive", name)) return 20;
   26269           4 :         if (!strcmp("primitiveType", name)) return 21;
   26270           3 :         if (!strcmp("particleRadius", name)) return 22;
   26271           2 :         if (!strcmp("particleRadiusRate", name)) return 23;
   26272           1 :         if (!strcmp("particleRadiusVariation", name)) return 24;
   26273           0 :         return -1;
   26274             : }
   26275             : static Bool XXParticles_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26276             : {
   26277             :         switch (FieldIndex) {
   26278             :         default:
   26279             :                 return 0;
   26280             :         }
   26281             : }
   26282             : 
   26283             : 
   26284             : 
   26285           1 : GF_Node *XXParticles_Create()
   26286             : {
   26287             :         M_XXParticles *p;
   26288           1 :         GF_SAFEALLOC(p, M_XXParticles);
   26289           1 :         if(!p) return NULL;
   26290           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXParticles);
   26291             : 
   26292             :         /*default field values*/
   26293           1 :         p->creationRate = FLT2FIX(500);
   26294           1 :         p->creationRateVariation = FLT2FIX(0);
   26295           1 :         p->emitAlpha = FLT2FIX(1.0);
   26296           1 :         p->emitColor.red = FLT2FIX(1);
   26297           1 :         p->emitColor.green = FLT2FIX(1);
   26298           1 :         p->emitColor.blue = FLT2FIX(1);
   26299           1 :         p->emitColorVariation.red = FLT2FIX(0);
   26300           1 :         p->emitColorVariation.green = FLT2FIX(0);
   26301           1 :         p->emitColorVariation.blue = FLT2FIX(0);
   26302           1 :         p->emitterPosition.x = FLT2FIX(0);
   26303           1 :         p->emitterPosition.y = FLT2FIX(3);
   26304           1 :         p->emitterPosition.z = FLT2FIX(0);
   26305           1 :         p->emitVelocity.x = FLT2FIX(0);
   26306           1 :         p->emitVelocity.y = FLT2FIX(0);
   26307           1 :         p->emitVelocity.z = FLT2FIX(0);
   26308           1 :         p->emitVelocityVariation.x = FLT2FIX(1);
   26309           1 :         p->emitVelocityVariation.y = FLT2FIX(1);
   26310           1 :         p->emitVelocityVariation.z = FLT2FIX(1);
   26311           1 :         p->enabled = 1;
   26312           1 :         p->fadeAlpha = FLT2FIX(1.0);
   26313           1 :         p->fadeColor.red = FLT2FIX(0.25);
   26314           1 :         p->fadeColor.green = FLT2FIX(0.25);
   26315           1 :         p->fadeColor.blue = FLT2FIX(0.25);
   26316           1 :         p->fadeRate = FLT2FIX(0.25);
   26317           1 :         p->force.x = FLT2FIX(0);
   26318           1 :         p->force.y = FLT2FIX(-9.8);
   26319           1 :         p->force.z = FLT2FIX(0);
   26320           1 :         p->maxLifeTime = 5;
   26321           1 :         p->maxLifeTimeVariation = FLT2FIX(0);
   26322           1 :         p->maxParticles = 500;
   26323           1 :         p->minRange = FLT2FIX(1);
   26324           1 :         p->maxRange = FLT2FIX(-1);
   26325           1 :         p->primitiveType = 2;
   26326           1 :         p->particleRadius = FLT2FIX(0.1);
   26327           1 :         p->particleRadiusRate = FLT2FIX(0);
   26328           1 :         p->particleRadiusVariation = FLT2FIX(0);
   26329           1 :         return (GF_Node *)p;
   26330             : }
   26331             : 
   26332             : 
   26333             : /*
   26334             :         XXParticleInitBox Node deletion
   26335             : */
   26336             : 
   26337             : static void XXParticleInitBox_Del(GF_Node *node)
   26338             : {
   26339             :         M_XXParticleInitBox *p = (M_XXParticleInitBox *) node;
   26340           1 :         gf_node_free((GF_Node *) p);
   26341             : }
   26342             : 
   26343             : static const u16 XXParticleInitBox_Def2All[] = { 0, 1};
   26344             : static const u16 XXParticleInitBox_In2All[] = { 0, 1};
   26345             : static const u16 XXParticleInitBox_Out2All[] = { 0, 1};
   26346             : 
   26347             : static u32 XXParticleInitBox_get_field_count(GF_Node *node, u8 IndexMode)
   26348             : {
   26349           6 :         switch(IndexMode) {
   26350             :         case GF_SG_FIELD_CODING_IN:
   26351             :                 return 2;
   26352             :         case GF_SG_FIELD_CODING_DEF:
   26353             :                 return 2;
   26354             :         case GF_SG_FIELD_CODING_OUT:
   26355             :                 return 2;
   26356           1 :         case GF_SG_FIELD_CODING_DYN:
   26357             :                 return 0;
   26358             :         default:
   26359             :                 return 2;
   26360             :         }
   26361             : }
   26362             : 
   26363             : static GF_Err XXParticleInitBox_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26364             : {
   26365           2 :         switch(IndexMode) {
   26366           0 :         case GF_SG_FIELD_CODING_IN:
   26367           0 :                 *allField = XXParticleInitBox_In2All[inField];
   26368             :                 return GF_OK;
   26369           0 :         case GF_SG_FIELD_CODING_DEF:
   26370           0 :                 *allField = XXParticleInitBox_Def2All[inField];
   26371             :                 return GF_OK;
   26372           0 :         case GF_SG_FIELD_CODING_OUT:
   26373           0 :                 *allField = XXParticleInitBox_Out2All[inField];
   26374             :                 return GF_OK;
   26375             :         default:
   26376             :                 return GF_BAD_PARAM;
   26377             :         }
   26378             : }
   26379             : static GF_Err XXParticleInitBox_get_field(GF_Node *node, GF_FieldInfo *info)
   26380             : {
   26381           4 :         switch (info->fieldIndex) {
   26382           2 :         case 0:
   26383           2 :                 info->name = "falloff";
   26384           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26385           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26386           2 :                 info->far_ptr = & ((M_XXParticleInitBox *) node)->falloff;
   26387             :                 return GF_OK;
   26388           2 :         case 1:
   26389           2 :                 info->name = "size";
   26390           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26391           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26392           2 :                 info->far_ptr = & ((M_XXParticleInitBox *) node)->size;
   26393             :                 return GF_OK;
   26394             :         default:
   26395             :                 return GF_BAD_PARAM;
   26396             :         }
   26397             : }
   26398             : 
   26399             : 
   26400           2 : static s32 XXParticleInitBox_get_field_index_by_name(char *name)
   26401             : {
   26402           2 :         if (!strcmp("falloff", name)) return 0;
   26403           1 :         if (!strcmp("size", name)) return 1;
   26404           0 :         return -1;
   26405             : }
   26406             : static Bool XXParticleInitBox_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26407             : {
   26408             :         switch (FieldIndex) {
   26409             :         default:
   26410             :                 return 0;
   26411             :         }
   26412             : }
   26413             : 
   26414             : 
   26415             : 
   26416           1 : GF_Node *XXParticleInitBox_Create()
   26417             : {
   26418             :         M_XXParticleInitBox *p;
   26419           1 :         GF_SAFEALLOC(p, M_XXParticleInitBox);
   26420           1 :         if(!p) return NULL;
   26421           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXParticleInitBox);
   26422             : 
   26423             :         /*default field values*/
   26424           1 :         p->falloff = FLT2FIX(0);
   26425           1 :         p->size.x = FLT2FIX(1);
   26426           1 :         p->size.y = FLT2FIX(1);
   26427           1 :         p->size.z = FLT2FIX(1);
   26428           1 :         return (GF_Node *)p;
   26429             : }
   26430             : 
   26431             : 
   26432             : /*
   26433             :         XXPlanarObstacle Node deletion
   26434             : */
   26435             : 
   26436             : static void XXPlanarObstacle_Del(GF_Node *node)
   26437             : {
   26438             :         M_XXPlanarObstacle *p = (M_XXPlanarObstacle *) node;
   26439           1 :         gf_node_free((GF_Node *) p);
   26440             : }
   26441             : 
   26442             : static const u16 XXPlanarObstacle_Def2All[] = { 0, 1, 2, 3};
   26443             : static const u16 XXPlanarObstacle_In2All[] = { 0, 1, 2, 3};
   26444             : static const u16 XXPlanarObstacle_Out2All[] = { 0, 1, 2, 3};
   26445             : 
   26446             : static u32 XXPlanarObstacle_get_field_count(GF_Node *node, u8 IndexMode)
   26447             : {
   26448           6 :         switch(IndexMode) {
   26449             :         case GF_SG_FIELD_CODING_IN:
   26450             :                 return 4;
   26451             :         case GF_SG_FIELD_CODING_DEF:
   26452             :                 return 4;
   26453             :         case GF_SG_FIELD_CODING_OUT:
   26454             :                 return 4;
   26455           1 :         case GF_SG_FIELD_CODING_DYN:
   26456             :                 return 0;
   26457             :         default:
   26458             :                 return 4;
   26459             :         }
   26460             : }
   26461             : 
   26462             : static GF_Err XXPlanarObstacle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26463             : {
   26464           4 :         switch(IndexMode) {
   26465           0 :         case GF_SG_FIELD_CODING_IN:
   26466           0 :                 *allField = XXPlanarObstacle_In2All[inField];
   26467             :                 return GF_OK;
   26468           0 :         case GF_SG_FIELD_CODING_DEF:
   26469           0 :                 *allField = XXPlanarObstacle_Def2All[inField];
   26470             :                 return GF_OK;
   26471           0 :         case GF_SG_FIELD_CODING_OUT:
   26472           0 :                 *allField = XXPlanarObstacle_Out2All[inField];
   26473             :                 return GF_OK;
   26474             :         default:
   26475             :                 return GF_BAD_PARAM;
   26476             :         }
   26477             : }
   26478           8 : static GF_Err XXPlanarObstacle_get_field(GF_Node *node, GF_FieldInfo *info)
   26479             : {
   26480           8 :         switch (info->fieldIndex) {
   26481           2 :         case 0:
   26482           2 :                 info->name = "distance";
   26483           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26484           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26485           2 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->distance;
   26486           2 :                 return GF_OK;
   26487           2 :         case 1:
   26488           2 :                 info->name = "normal";
   26489           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26490           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26491           2 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->normal;
   26492           2 :                 return GF_OK;
   26493           2 :         case 2:
   26494           2 :                 info->name = "reflection";
   26495           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26496           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26497           2 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->reflection;
   26498           2 :                 return GF_OK;
   26499           2 :         case 3:
   26500           2 :                 info->name = "absorption";
   26501           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26502           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26503           2 :                 info->far_ptr = & ((M_XXPlanarObstacle *) node)->absorption;
   26504           2 :                 return GF_OK;
   26505             :         default:
   26506             :                 return GF_BAD_PARAM;
   26507             :         }
   26508             : }
   26509             : 
   26510             : 
   26511           4 : static s32 XXPlanarObstacle_get_field_index_by_name(char *name)
   26512             : {
   26513           4 :         if (!strcmp("distance", name)) return 0;
   26514           3 :         if (!strcmp("normal", name)) return 1;
   26515           2 :         if (!strcmp("reflection", name)) return 2;
   26516           1 :         if (!strcmp("absorption", name)) return 3;
   26517           0 :         return -1;
   26518             : }
   26519             : static Bool XXPlanarObstacle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26520             : {
   26521             :         switch (FieldIndex) {
   26522             :         default:
   26523             :                 return 0;
   26524             :         }
   26525             : }
   26526             : 
   26527             : 
   26528             : 
   26529           1 : GF_Node *XXPlanarObstacle_Create()
   26530             : {
   26531             :         M_XXPlanarObstacle *p;
   26532           1 :         GF_SAFEALLOC(p, M_XXPlanarObstacle);
   26533           1 :         if(!p) return NULL;
   26534           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXPlanarObstacle);
   26535             : 
   26536             :         /*default field values*/
   26537           1 :         p->distance.x = FLT2FIX(0);
   26538           1 :         p->distance.y = FLT2FIX(0);
   26539           1 :         p->distance.z = FLT2FIX(0);
   26540           1 :         p->normal.x = FLT2FIX(0);
   26541           1 :         p->normal.y = FLT2FIX(1);
   26542           1 :         p->normal.z = FLT2FIX(0);
   26543           1 :         p->reflection = FLT2FIX(0);
   26544           1 :         p->absorption = FLT2FIX(0);
   26545           1 :         return (GF_Node *)p;
   26546             : }
   26547             : 
   26548             : 
   26549             : /*
   26550             :         XXPointAttractor Node deletion
   26551             : */
   26552             : 
   26553             : static void XXPointAttractor_Del(GF_Node *node)
   26554             : {
   26555             :         M_XXPointAttractor *p = (M_XXPointAttractor *) node;
   26556           1 :         gf_node_free((GF_Node *) p);
   26557             : }
   26558             : 
   26559             : static const u16 XXPointAttractor_Def2All[] = { 0, 1, 2, 3};
   26560             : static const u16 XXPointAttractor_In2All[] = { 0, 1, 2, 3};
   26561             : static const u16 XXPointAttractor_Out2All[] = { 0, 1, 2, 3};
   26562             : 
   26563             : static u32 XXPointAttractor_get_field_count(GF_Node *node, u8 IndexMode)
   26564             : {
   26565           6 :         switch(IndexMode) {
   26566             :         case GF_SG_FIELD_CODING_IN:
   26567             :                 return 4;
   26568             :         case GF_SG_FIELD_CODING_DEF:
   26569             :                 return 4;
   26570             :         case GF_SG_FIELD_CODING_OUT:
   26571             :                 return 4;
   26572           1 :         case GF_SG_FIELD_CODING_DYN:
   26573             :                 return 0;
   26574             :         default:
   26575             :                 return 4;
   26576             :         }
   26577             : }
   26578             : 
   26579             : static GF_Err XXPointAttractor_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26580             : {
   26581           4 :         switch(IndexMode) {
   26582           0 :         case GF_SG_FIELD_CODING_IN:
   26583           0 :                 *allField = XXPointAttractor_In2All[inField];
   26584             :                 return GF_OK;
   26585           0 :         case GF_SG_FIELD_CODING_DEF:
   26586           0 :                 *allField = XXPointAttractor_Def2All[inField];
   26587             :                 return GF_OK;
   26588           0 :         case GF_SG_FIELD_CODING_OUT:
   26589           0 :                 *allField = XXPointAttractor_Out2All[inField];
   26590             :                 return GF_OK;
   26591             :         default:
   26592             :                 return GF_BAD_PARAM;
   26593             :         }
   26594             : }
   26595           8 : static GF_Err XXPointAttractor_get_field(GF_Node *node, GF_FieldInfo *info)
   26596             : {
   26597           8 :         switch (info->fieldIndex) {
   26598           2 :         case 0:
   26599           2 :                 info->name = "innerRadius";
   26600           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26601           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26602           2 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->innerRadius;
   26603           2 :                 return GF_OK;
   26604           2 :         case 1:
   26605           2 :                 info->name = "outerRadius";
   26606           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26607           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26608           2 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->outerRadius;
   26609           2 :                 return GF_OK;
   26610           2 :         case 2:
   26611           2 :                 info->name = "position";
   26612           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26613           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26614           2 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->position;
   26615           2 :                 return GF_OK;
   26616           2 :         case 3:
   26617           2 :                 info->name = "rate";
   26618           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26619           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26620           2 :                 info->far_ptr = & ((M_XXPointAttractor *) node)->rate;
   26621           2 :                 return GF_OK;
   26622             :         default:
   26623             :                 return GF_BAD_PARAM;
   26624             :         }
   26625             : }
   26626             : 
   26627             : 
   26628           4 : static s32 XXPointAttractor_get_field_index_by_name(char *name)
   26629             : {
   26630           4 :         if (!strcmp("innerRadius", name)) return 0;
   26631           3 :         if (!strcmp("outerRadius", name)) return 1;
   26632           2 :         if (!strcmp("position", name)) return 2;
   26633           1 :         if (!strcmp("rate", name)) return 3;
   26634           0 :         return -1;
   26635             : }
   26636             : static Bool XXPointAttractor_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26637             : {
   26638             :         switch (FieldIndex) {
   26639             :         default:
   26640             :                 return 0;
   26641             :         }
   26642             : }
   26643             : 
   26644             : 
   26645             : 
   26646           1 : GF_Node *XXPointAttractor_Create()
   26647             : {
   26648             :         M_XXPointAttractor *p;
   26649           1 :         GF_SAFEALLOC(p, M_XXPointAttractor);
   26650           1 :         if(!p) return NULL;
   26651           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XXPointAttractor);
   26652             : 
   26653             :         /*default field values*/
   26654           1 :         p->innerRadius = FLT2FIX(10);
   26655           1 :         p->outerRadius = FLT2FIX(100);
   26656           1 :         p->position.x = FLT2FIX(0);
   26657           1 :         p->position.y = FLT2FIX(0);
   26658           1 :         p->position.z = FLT2FIX(0);
   26659           1 :         p->rate = FLT2FIX(1);
   26660           1 :         return (GF_Node *)p;
   26661             : }
   26662             : 
   26663             : 
   26664             : /*
   26665             :         PointTexture Node deletion
   26666             : */
   26667             : 
   26668           1 : static void PointTexture_Del(GF_Node *node)
   26669             : {
   26670             :         M_PointTexture *p = (M_PointTexture *) node;
   26671           1 :         gf_sg_mfcolor_del(p->color);
   26672           1 :         gf_sg_mfint32_del(p->depth);
   26673           1 :         gf_node_free((GF_Node *) p);
   26674           1 : }
   26675             : 
   26676             : static const u16 PointTexture_Def2All[] = { 0, 1, 2, 3, 4};
   26677             : 
   26678             : static u32 PointTexture_get_field_count(GF_Node *node, u8 IndexMode)
   26679             : {
   26680           6 :         switch(IndexMode) {
   26681             :         case GF_SG_FIELD_CODING_IN:
   26682             :                 return 0;
   26683           1 :         case GF_SG_FIELD_CODING_DEF:
   26684             :                 return 5;
   26685             :         case GF_SG_FIELD_CODING_OUT:
   26686             :                 return 0;
   26687             :         case GF_SG_FIELD_CODING_DYN:
   26688             :                 return 0;
   26689           2 :         default:
   26690             :                 return 5;
   26691             :         }
   26692             : }
   26693             : 
   26694             : static GF_Err PointTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26695             : {
   26696           5 :         switch(IndexMode) {
   26697           0 :         case GF_SG_FIELD_CODING_DEF:
   26698           0 :                 *allField = PointTexture_Def2All[inField];
   26699             :                 return GF_OK;
   26700             :         default:
   26701             :                 return GF_BAD_PARAM;
   26702             :         }
   26703             : }
   26704          10 : static GF_Err PointTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   26705             : {
   26706          10 :         switch (info->fieldIndex) {
   26707           2 :         case 0:
   26708           2 :                 info->name = "color";
   26709           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   26710           2 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   26711           2 :                 info->far_ptr = & ((M_PointTexture *) node)->color;
   26712           2 :                 return GF_OK;
   26713           2 :         case 1:
   26714           2 :                 info->name = "depth";
   26715           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   26716           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   26717           2 :                 info->far_ptr = & ((M_PointTexture *) node)->depth;
   26718           2 :                 return GF_OK;
   26719           2 :         case 2:
   26720           2 :                 info->name = "depthNbBits";
   26721           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   26722           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26723           2 :                 info->far_ptr = & ((M_PointTexture *) node)->depthNbBits;
   26724           2 :                 return GF_OK;
   26725           2 :         case 3:
   26726           2 :                 info->name = "height";
   26727           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   26728           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26729           2 :                 info->far_ptr = & ((M_PointTexture *) node)->height;
   26730           2 :                 return GF_OK;
   26731           2 :         case 4:
   26732           2 :                 info->name = "width";
   26733           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   26734           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26735           2 :                 info->far_ptr = & ((M_PointTexture *) node)->width;
   26736           2 :                 return GF_OK;
   26737             :         default:
   26738             :                 return GF_BAD_PARAM;
   26739             :         }
   26740             : }
   26741             : 
   26742             : 
   26743           5 : static s32 PointTexture_get_field_index_by_name(char *name)
   26744             : {
   26745           5 :         if (!strcmp("color", name)) return 0;
   26746           4 :         if (!strcmp("depth", name)) return 1;
   26747           3 :         if (!strcmp("depthNbBits", name)) return 2;
   26748           2 :         if (!strcmp("height", name)) return 3;
   26749           1 :         if (!strcmp("width", name)) return 4;
   26750           0 :         return -1;
   26751             : }
   26752             : static Bool PointTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26753             : {
   26754           5 :         switch (FieldIndex) {
   26755           1 :         case 2:
   26756           1 :                 *AType = 0;
   26757           1 :                 *QType = 13;
   26758           1 :                 *QT13_bits = 5;
   26759           1 :                 *b_min = FLT2FIX(0);
   26760           1 :                 *b_max = FLT2FIX(31);
   26761             :                 return 1;
   26762             :         default:
   26763             :                 return 0;
   26764             :         }
   26765             : }
   26766             : 
   26767             : 
   26768             : 
   26769           1 : GF_Node *PointTexture_Create()
   26770             : {
   26771             :         M_PointTexture *p;
   26772           1 :         GF_SAFEALLOC(p, M_PointTexture);
   26773           1 :         if(!p) return NULL;
   26774           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointTexture);
   26775             : 
   26776             :         /*default field values*/
   26777           1 :         p->depthNbBits = 7;
   26778           1 :         p->height = 256;
   26779           1 :         p->width = 256;
   26780           1 :         return (GF_Node *)p;
   26781             : }
   26782             : 
   26783             : 
   26784             : /*
   26785             :         PositionAnimator Node deletion
   26786             : */
   26787             : 
   26788           2 : static void PositionAnimator_Del(GF_Node *node)
   26789             : {
   26790             :         M_PositionAnimator *p = (M_PositionAnimator *) node;
   26791           2 :         gf_sg_mffloat_del(p->key);
   26792           2 :         gf_sg_mfrotation_del(p->keyOrientation);
   26793           2 :         gf_sg_mfvec2f_del(p->keySpline);
   26794           2 :         gf_sg_mfvec3f_del(p->keyValue);
   26795           2 :         gf_sg_mffloat_del(p->weight);
   26796           2 :         gf_node_free((GF_Node *) p);
   26797           2 : }
   26798             : 
   26799             : static const u16 PositionAnimator_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
   26800             : static const u16 PositionAnimator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   26801             : static const u16 PositionAnimator_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   26802             : 
   26803             : static u32 PositionAnimator_get_field_count(GF_Node *node, u8 IndexMode)
   26804             : {
   26805             :         switch(IndexMode) {
   26806             :         case GF_SG_FIELD_CODING_IN:
   26807             :                 return 10;
   26808             :         case GF_SG_FIELD_CODING_DEF:
   26809             :                 return 9;
   26810             :         case GF_SG_FIELD_CODING_OUT:
   26811             :                 return 12;
   26812             :         case GF_SG_FIELD_CODING_DYN:
   26813             :                 return 0;
   26814             :         default:
   26815             :                 return 13;
   26816             :         }
   26817             : }
   26818             : 
   26819             : static GF_Err PositionAnimator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   26820             : {
   26821          13 :         switch(IndexMode) {
   26822           0 :         case GF_SG_FIELD_CODING_IN:
   26823           0 :                 *allField = PositionAnimator_In2All[inField];
   26824             :                 return GF_OK;
   26825           0 :         case GF_SG_FIELD_CODING_DEF:
   26826           0 :                 *allField = PositionAnimator_Def2All[inField];
   26827             :                 return GF_OK;
   26828           0 :         case GF_SG_FIELD_CODING_OUT:
   26829           0 :                 *allField = PositionAnimator_Out2All[inField];
   26830             :                 return GF_OK;
   26831             :         default:
   26832             :                 return GF_BAD_PARAM;
   26833             :         }
   26834             : }
   26835          35 : static GF_Err PositionAnimator_get_field(GF_Node *node, GF_FieldInfo *info)
   26836             : {
   26837          35 :         switch (info->fieldIndex) {
   26838           4 :         case 0:
   26839           4 :                 info->name = "set_fraction";
   26840           4 :                 info->eventType = GF_SG_EVENT_IN;
   26841           4 :                 info->on_event_in = ((M_PositionAnimator *)node)->on_set_fraction;
   26842           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   26843           4 :                 info->far_ptr = & ((M_PositionAnimator *) node)->set_fraction;
   26844           4 :                 return GF_OK;
   26845           2 :         case 1:
   26846           2 :                 info->name = "fromTo";
   26847           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26848           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   26849           2 :                 info->far_ptr = & ((M_PositionAnimator *) node)->fromTo;
   26850           2 :                 return GF_OK;
   26851           3 :         case 2:
   26852           3 :                 info->name = "key";
   26853           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26854           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   26855           3 :                 info->far_ptr = & ((M_PositionAnimator *) node)->key;
   26856           3 :                 return GF_OK;
   26857           2 :         case 3:
   26858           2 :                 info->name = "keyOrientation";
   26859           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26860           2 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   26861           2 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyOrientation;
   26862           2 :                 return GF_OK;
   26863           3 :         case 4:
   26864           3 :                 info->name = "keyType";
   26865           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26866           3 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26867           3 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyType;
   26868           3 :                 return GF_OK;
   26869           3 :         case 5:
   26870           3 :                 info->name = "keySpline";
   26871           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26872           3 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   26873           3 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keySpline;
   26874           3 :                 return GF_OK;
   26875           3 :         case 6:
   26876           3 :                 info->name = "keyValue";
   26877           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26878           3 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   26879           3 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyValue;
   26880           3 :                 return GF_OK;
   26881           3 :         case 7:
   26882           3 :                 info->name = "keyValueType";
   26883           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26884           3 :                 info->fieldType = GF_SG_VRML_SFINT32;
   26885           3 :                 info->far_ptr = & ((M_PositionAnimator *) node)->keyValueType;
   26886           3 :                 return GF_OK;
   26887           2 :         case 8:
   26888           2 :                 info->name = "offset";
   26889           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26890           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26891           2 :                 info->far_ptr = & ((M_PositionAnimator *) node)->offset;
   26892           2 :                 return GF_OK;
   26893           2 :         case 9:
   26894           2 :                 info->name = "weight";
   26895           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   26896           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   26897           2 :                 info->far_ptr = & ((M_PositionAnimator *) node)->weight;
   26898           2 :                 return GF_OK;
   26899           2 :         case 10:
   26900           2 :                 info->name = "endValue";
   26901           2 :                 info->eventType = GF_SG_EVENT_OUT;
   26902           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26903           2 :                 info->far_ptr = & ((M_PositionAnimator *) node)->endValue;
   26904           2 :                 return GF_OK;
   26905           2 :         case 11:
   26906           2 :                 info->name = "rotation_changed";
   26907           2 :                 info->eventType = GF_SG_EVENT_OUT;
   26908           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   26909           2 :                 info->far_ptr = & ((M_PositionAnimator *) node)->rotation_changed;
   26910           2 :                 return GF_OK;
   26911           4 :         case 12:
   26912           4 :                 info->name = "value_changed";
   26913           4 :                 info->eventType = GF_SG_EVENT_OUT;
   26914           4 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   26915           4 :                 info->far_ptr = & ((M_PositionAnimator *) node)->value_changed;
   26916           4 :                 return GF_OK;
   26917             :         default:
   26918             :                 return GF_BAD_PARAM;
   26919             :         }
   26920             : }
   26921             : 
   26922             : 
   26923          20 : static s32 PositionAnimator_get_field_index_by_name(char *name)
   26924             : {
   26925          20 :         if (!strcmp("set_fraction", name)) return 0;
   26926          18 :         if (!strcmp("fromTo", name)) return 1;
   26927          17 :         if (!strcmp("key", name)) return 2;
   26928          15 :         if (!strcmp("keyOrientation", name)) return 3;
   26929          14 :         if (!strcmp("keyType", name)) return 4;
   26930          12 :         if (!strcmp("keySpline", name)) return 5;
   26931          10 :         if (!strcmp("keyValue", name)) return 6;
   26932           8 :         if (!strcmp("keyValueType", name)) return 7;
   26933           6 :         if (!strcmp("offset", name)) return 8;
   26934           5 :         if (!strcmp("weight", name)) return 9;
   26935           4 :         if (!strcmp("endValue", name)) return 10;
   26936           3 :         if (!strcmp("rotation_changed", name)) return 11;
   26937           2 :         if (!strcmp("value_changed", name)) return 12;
   26938           0 :         return -1;
   26939             : }
   26940             : static Bool PositionAnimator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   26941             : {
   26942          13 :         switch (FieldIndex) {
   26943           1 :         case 1:
   26944           1 :                 *AType = 0;
   26945           1 :                 *QType = 8;
   26946             :                 return 1;
   26947           1 :         case 2:
   26948           1 :                 *AType = 0;
   26949           1 :                 *QType = 8;
   26950             :                 return 1;
   26951           1 :         case 5:
   26952           1 :                 *AType = 0;
   26953           1 :                 *QType = 8;
   26954             :                 return 1;
   26955           1 :         case 6:
   26956           1 :                 *AType = 0;
   26957           1 :                 *QType = 4;
   26958             :                 return 1;
   26959           1 :         case 8:
   26960           1 :                 *AType = 0;
   26961           1 :                 *QType = 1;
   26962           1 :                 *b_min = FIX_MIN;
   26963           1 :                 *b_max = FIX_MAX;
   26964             :                 return 1;
   26965             :         default:
   26966             :                 return 0;
   26967             :         }
   26968             : }
   26969             : 
   26970             : 
   26971             : 
   26972           2 : GF_Node *PositionAnimator_Create()
   26973             : {
   26974             :         M_PositionAnimator *p;
   26975           2 :         GF_SAFEALLOC(p, M_PositionAnimator);
   26976           2 :         if(!p) return NULL;
   26977           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionAnimator);
   26978             : 
   26979             :         /*default field values*/
   26980           2 :         p->fromTo.x = FLT2FIX(0);
   26981           2 :         p->fromTo.y = FLT2FIX(1);
   26982           2 :         p->keyType = 0;
   26983           2 :         p->keySpline.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   26984           2 :         p->keySpline.count = 2;
   26985           2 :         p->keySpline.vals[0].x = FLT2FIX(0);
   26986           2 :         p->keySpline.vals[0].y = FLT2FIX(0);
   26987           2 :         p->keySpline.vals[1].x = FLT2FIX(1);
   26988           2 :         p->keySpline.vals[1].y = FLT2FIX(1);
   26989           2 :         p->keyValueType = 0;
   26990           2 :         p->offset.x = FLT2FIX(0);
   26991           2 :         p->offset.y = FLT2FIX(0);
   26992           2 :         p->offset.z = FLT2FIX(0);
   26993           2 :         return (GF_Node *)p;
   26994             : }
   26995             : 
   26996             : 
   26997             : /*
   26998             :         PositionAnimator2D Node deletion
   26999             : */
   27000             : 
   27001           3 : static void PositionAnimator2D_Del(GF_Node *node)
   27002             : {
   27003             :         M_PositionAnimator2D *p = (M_PositionAnimator2D *) node;
   27004           3 :         gf_sg_mffloat_del(p->key);
   27005           3 :         gf_sg_mfvec2f_del(p->keySpline);
   27006           3 :         gf_sg_mfvec2f_del(p->keyValue);
   27007           3 :         gf_sg_mffloat_del(p->weight);
   27008           3 :         gf_node_free((GF_Node *) p);
   27009           3 : }
   27010             : 
   27011             : static const u16 PositionAnimator2D_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27012             : static const u16 PositionAnimator2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27013             : static const u16 PositionAnimator2D_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   27014             : 
   27015             : static u32 PositionAnimator2D_get_field_count(GF_Node *node, u8 IndexMode)
   27016             : {
   27017             :         switch(IndexMode) {
   27018             :         case GF_SG_FIELD_CODING_IN:
   27019             :                 return 10;
   27020             :         case GF_SG_FIELD_CODING_DEF:
   27021             :                 return 9;
   27022             :         case GF_SG_FIELD_CODING_OUT:
   27023             :                 return 12;
   27024             :         case GF_SG_FIELD_CODING_DYN:
   27025             :                 return 0;
   27026             :         default:
   27027             :                 return 13;
   27028             :         }
   27029             : }
   27030             : 
   27031             : static GF_Err PositionAnimator2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27032             : {
   27033          13 :         switch(IndexMode) {
   27034           0 :         case GF_SG_FIELD_CODING_IN:
   27035           0 :                 *allField = PositionAnimator2D_In2All[inField];
   27036             :                 return GF_OK;
   27037           0 :         case GF_SG_FIELD_CODING_DEF:
   27038           0 :                 *allField = PositionAnimator2D_Def2All[inField];
   27039             :                 return GF_OK;
   27040           0 :         case GF_SG_FIELD_CODING_OUT:
   27041           0 :                 *allField = PositionAnimator2D_Out2All[inField];
   27042             :                 return GF_OK;
   27043             :         default:
   27044             :                 return GF_BAD_PARAM;
   27045             :         }
   27046             : }
   27047          44 : static GF_Err PositionAnimator2D_get_field(GF_Node *node, GF_FieldInfo *info)
   27048             : {
   27049          44 :         switch (info->fieldIndex) {
   27050           6 :         case 0:
   27051           6 :                 info->name = "set_fraction";
   27052           6 :                 info->eventType = GF_SG_EVENT_IN;
   27053           6 :                 info->on_event_in = ((M_PositionAnimator2D *)node)->on_set_fraction;
   27054           6 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27055           6 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->set_fraction;
   27056           6 :                 return GF_OK;
   27057           2 :         case 1:
   27058           2 :                 info->name = "fromTo";
   27059           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27060           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27061           2 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->fromTo;
   27062           2 :                 return GF_OK;
   27063           4 :         case 2:
   27064           4 :                 info->name = "key";
   27065           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27066           4 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27067           4 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->key;
   27068           4 :                 return GF_OK;
   27069           2 :         case 3:
   27070           2 :                 info->name = "keyOrientation";
   27071           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27072           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27073           2 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyOrientation;
   27074           2 :                 return GF_OK;
   27075           4 :         case 4:
   27076           4 :                 info->name = "keyType";
   27077           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27078           4 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27079           4 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyType;
   27080           4 :                 return GF_OK;
   27081           4 :         case 5:
   27082           4 :                 info->name = "keySpline";
   27083           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27084           4 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27085           4 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keySpline;
   27086           4 :                 return GF_OK;
   27087           4 :         case 6:
   27088           4 :                 info->name = "keyValue";
   27089           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27090           4 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27091           4 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyValue;
   27092           4 :                 return GF_OK;
   27093           4 :         case 7:
   27094           4 :                 info->name = "keyValueType";
   27095           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27096           4 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27097           4 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->keyValueType;
   27098           4 :                 return GF_OK;
   27099           2 :         case 8:
   27100           2 :                 info->name = "offset";
   27101           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27102           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27103           2 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->offset;
   27104           2 :                 return GF_OK;
   27105           2 :         case 9:
   27106           2 :                 info->name = "weight";
   27107           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27108           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27109           2 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->weight;
   27110           2 :                 return GF_OK;
   27111           2 :         case 10:
   27112           2 :                 info->name = "endValue";
   27113           2 :                 info->eventType = GF_SG_EVENT_OUT;
   27114           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27115           2 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->endValue;
   27116           2 :                 return GF_OK;
   27117           2 :         case 11:
   27118           2 :                 info->name = "rotation_changed";
   27119           2 :                 info->eventType = GF_SG_EVENT_OUT;
   27120           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27121           2 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->rotation_changed;
   27122           2 :                 return GF_OK;
   27123           6 :         case 12:
   27124           6 :                 info->name = "value_changed";
   27125           6 :                 info->eventType = GF_SG_EVENT_OUT;
   27126           6 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   27127           6 :                 info->far_ptr = & ((M_PositionAnimator2D *) node)->value_changed;
   27128           6 :                 return GF_OK;
   27129             :         default:
   27130             :                 return GF_BAD_PARAM;
   27131             :         }
   27132             : }
   27133             : 
   27134             : 
   27135          27 : static s32 PositionAnimator2D_get_field_index_by_name(char *name)
   27136             : {
   27137          27 :         if (!strcmp("set_fraction", name)) return 0;
   27138          24 :         if (!strcmp("fromTo", name)) return 1;
   27139          23 :         if (!strcmp("key", name)) return 2;
   27140          20 :         if (!strcmp("keyOrientation", name)) return 3;
   27141          19 :         if (!strcmp("keyType", name)) return 4;
   27142          16 :         if (!strcmp("keySpline", name)) return 5;
   27143          13 :         if (!strcmp("keyValue", name)) return 6;
   27144          10 :         if (!strcmp("keyValueType", name)) return 7;
   27145           7 :         if (!strcmp("offset", name)) return 8;
   27146           6 :         if (!strcmp("weight", name)) return 9;
   27147           5 :         if (!strcmp("endValue", name)) return 10;
   27148           4 :         if (!strcmp("rotation_changed", name)) return 11;
   27149           3 :         if (!strcmp("value_changed", name)) return 12;
   27150           0 :         return -1;
   27151             : }
   27152             : static Bool PositionAnimator2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27153             : {
   27154          13 :         switch (FieldIndex) {
   27155           1 :         case 1:
   27156           1 :                 *AType = 0;
   27157           1 :                 *QType = 8;
   27158             :                 return 1;
   27159           1 :         case 2:
   27160           1 :                 *AType = 0;
   27161           1 :                 *QType = 8;
   27162             :                 return 1;
   27163           1 :         case 5:
   27164           1 :                 *AType = 0;
   27165           1 :                 *QType = 8;
   27166             :                 return 1;
   27167           1 :         case 6:
   27168           1 :                 *AType = 0;
   27169           1 :                 *QType = 4;
   27170             :                 return 1;
   27171           1 :         case 8:
   27172           1 :                 *AType = 0;
   27173           1 :                 *QType = 2;
   27174           1 :                 *b_min = FIX_MIN;
   27175           1 :                 *b_max = FIX_MAX;
   27176             :                 return 1;
   27177             :         default:
   27178             :                 return 0;
   27179             :         }
   27180             : }
   27181             : 
   27182             : 
   27183             : 
   27184           3 : GF_Node *PositionAnimator2D_Create()
   27185             : {
   27186             :         M_PositionAnimator2D *p;
   27187           3 :         GF_SAFEALLOC(p, M_PositionAnimator2D);
   27188           3 :         if(!p) return NULL;
   27189           3 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionAnimator2D);
   27190             : 
   27191             :         /*default field values*/
   27192           3 :         p->fromTo.x = FLT2FIX(0);
   27193           3 :         p->fromTo.y = FLT2FIX(1);
   27194           3 :         p->keyOrientation = 0;
   27195           3 :         p->keyType = 0;
   27196           3 :         p->keySpline.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   27197           3 :         p->keySpline.count = 2;
   27198           3 :         p->keySpline.vals[0].x = FLT2FIX(0);
   27199           3 :         p->keySpline.vals[0].y = FLT2FIX(0);
   27200           3 :         p->keySpline.vals[1].x = FLT2FIX(1);
   27201           3 :         p->keySpline.vals[1].y = FLT2FIX(1);
   27202           3 :         p->keyValueType = 0;
   27203           3 :         p->offset.x = FLT2FIX(0);
   27204           3 :         p->offset.y = FLT2FIX(0);
   27205           3 :         return (GF_Node *)p;
   27206             : }
   27207             : 
   27208             : 
   27209             : /*
   27210             :         PositionInterpolator4D Node deletion
   27211             : */
   27212             : 
   27213           2 : static void PositionInterpolator4D_Del(GF_Node *node)
   27214             : {
   27215             :         M_PositionInterpolator4D *p = (M_PositionInterpolator4D *) node;
   27216           2 :         gf_sg_mffloat_del(p->key);
   27217           2 :         gf_sg_mfvec4f_del(p->keyValue);
   27218           2 :         gf_node_free((GF_Node *) p);
   27219           2 : }
   27220             : 
   27221             : static const u16 PositionInterpolator4D_Def2All[] = { 1, 2};
   27222             : static const u16 PositionInterpolator4D_In2All[] = { 0, 1, 2};
   27223             : static const u16 PositionInterpolator4D_Out2All[] = { 1, 2, 3};
   27224             : 
   27225             : static u32 PositionInterpolator4D_get_field_count(GF_Node *node, u8 IndexMode)
   27226             : {
   27227             :         switch(IndexMode) {
   27228             :         case GF_SG_FIELD_CODING_IN:
   27229             :                 return 3;
   27230             :         case GF_SG_FIELD_CODING_DEF:
   27231             :                 return 2;
   27232             :         case GF_SG_FIELD_CODING_OUT:
   27233             :                 return 3;
   27234             :         case GF_SG_FIELD_CODING_DYN:
   27235             :                 return 0;
   27236             :         default:
   27237             :                 return 4;
   27238             :         }
   27239             : }
   27240             : 
   27241             : static GF_Err PositionInterpolator4D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27242             : {
   27243           4 :         switch(IndexMode) {
   27244           0 :         case GF_SG_FIELD_CODING_IN:
   27245           0 :                 *allField = PositionInterpolator4D_In2All[inField];
   27246             :                 return GF_OK;
   27247           0 :         case GF_SG_FIELD_CODING_DEF:
   27248           0 :                 *allField = PositionInterpolator4D_Def2All[inField];
   27249             :                 return GF_OK;
   27250           0 :         case GF_SG_FIELD_CODING_OUT:
   27251           0 :                 *allField = PositionInterpolator4D_Out2All[inField];
   27252             :                 return GF_OK;
   27253             :         default:
   27254             :                 return GF_BAD_PARAM;
   27255             :         }
   27256             : }
   27257          12 : static GF_Err PositionInterpolator4D_get_field(GF_Node *node, GF_FieldInfo *info)
   27258             : {
   27259          12 :         switch (info->fieldIndex) {
   27260           4 :         case 0:
   27261           4 :                 info->name = "set_fraction";
   27262           4 :                 info->eventType = GF_SG_EVENT_IN;
   27263           4 :                 info->on_event_in = ((M_PositionInterpolator4D *)node)->on_set_fraction;
   27264           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27265           4 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->set_fraction;
   27266           4 :                 return GF_OK;
   27267           3 :         case 1:
   27268           3 :                 info->name = "key";
   27269           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27270           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27271           3 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->key;
   27272           3 :                 return GF_OK;
   27273           3 :         case 2:
   27274           3 :                 info->name = "keyValue";
   27275           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27276           3 :                 info->fieldType = GF_SG_VRML_MFVEC4F;
   27277           3 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->keyValue;
   27278           3 :                 return GF_OK;
   27279           2 :         case 3:
   27280           2 :                 info->name = "value_changed";
   27281           2 :                 info->eventType = GF_SG_EVENT_OUT;
   27282           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27283           2 :                 info->far_ptr = & ((M_PositionInterpolator4D *) node)->value_changed;
   27284           2 :                 return GF_OK;
   27285             :         default:
   27286             :                 return GF_BAD_PARAM;
   27287             :         }
   27288             : }
   27289             : 
   27290             : 
   27291           7 : static s32 PositionInterpolator4D_get_field_index_by_name(char *name)
   27292             : {
   27293           7 :         if (!strcmp("set_fraction", name)) return 0;
   27294           5 :         if (!strcmp("key", name)) return 1;
   27295           3 :         if (!strcmp("keyValue", name)) return 2;
   27296           1 :         if (!strcmp("value_changed", name)) return 3;
   27297           0 :         return -1;
   27298             : }
   27299             : static Bool PositionInterpolator4D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27300             : {
   27301           4 :         switch (FieldIndex) {
   27302           1 :         case 1:
   27303           1 :                 *AType = 0;
   27304           1 :                 *QType = 8;
   27305           1 :                 *b_min = FLT2FIX(0);
   27306           1 :                 *b_max = FLT2FIX(1);
   27307             :                 return 1;
   27308           1 :         case 2:
   27309           1 :                 *AType = 0;
   27310           1 :                 *QType = 15;
   27311           1 :                 *b_min = FIX_MIN;
   27312           1 :                 *b_max = FIX_MAX;
   27313             :                 return 1;
   27314             :         default:
   27315             :                 return 0;
   27316             :         }
   27317             : }
   27318             : 
   27319             : 
   27320             : 
   27321           2 : GF_Node *PositionInterpolator4D_Create()
   27322             : {
   27323             :         M_PositionInterpolator4D *p;
   27324           2 :         GF_SAFEALLOC(p, M_PositionInterpolator4D);
   27325           2 :         if(!p) return NULL;
   27326           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PositionInterpolator4D);
   27327             : 
   27328             :         /*default field values*/
   27329           2 :         return (GF_Node *)p;
   27330             : }
   27331             : 
   27332             : 
   27333             : /*
   27334             :         ProceduralTexture Node deletion
   27335             : */
   27336             : 
   27337           1 : static void ProceduralTexture_Del(GF_Node *node)
   27338             : {
   27339             :         M_ProceduralTexture *p = (M_ProceduralTexture *) node;
   27340           1 :         gf_sg_mfvec2f_del(p->aWarpmap);
   27341           1 :         gf_sg_mffloat_del(p->aWeights);
   27342           1 :         gf_sg_mfvec2f_del(p->bWarpmap);
   27343           1 :         gf_sg_mffloat_del(p->bWeights);
   27344           1 :         gf_sg_mfcolor_del(p->color);
   27345           1 :         gf_sg_mfvec2f_del(p->xWarpmap);
   27346           1 :         gf_sg_mfvec2f_del(p->yWarpmap);
   27347           1 :         gf_sg_sfimage_del(p->image_changed);
   27348           1 :         gf_node_free((GF_Node *) p);
   27349           1 : }
   27350             : 
   27351             : static const u16 ProceduralTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   27352             : static const u16 ProceduralTexture_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
   27353             : static const u16 ProceduralTexture_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
   27354             : 
   27355             : static u32 ProceduralTexture_get_field_count(GF_Node *node, u8 IndexMode)
   27356             : {
   27357             :         switch(IndexMode) {
   27358             :         case GF_SG_FIELD_CODING_IN:
   27359             :                 return 19;
   27360             :         case GF_SG_FIELD_CODING_DEF:
   27361             :                 return 19;
   27362             :         case GF_SG_FIELD_CODING_OUT:
   27363             :                 return 20;
   27364             :         case GF_SG_FIELD_CODING_DYN:
   27365             :                 return 0;
   27366             :         default:
   27367             :                 return 20;
   27368             :         }
   27369             : }
   27370             : 
   27371             : static GF_Err ProceduralTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27372             : {
   27373          20 :         switch(IndexMode) {
   27374           0 :         case GF_SG_FIELD_CODING_IN:
   27375           0 :                 *allField = ProceduralTexture_In2All[inField];
   27376             :                 return GF_OK;
   27377           0 :         case GF_SG_FIELD_CODING_DEF:
   27378           0 :                 *allField = ProceduralTexture_Def2All[inField];
   27379             :                 return GF_OK;
   27380           0 :         case GF_SG_FIELD_CODING_OUT:
   27381           0 :                 *allField = ProceduralTexture_Out2All[inField];
   27382             :                 return GF_OK;
   27383             :         default:
   27384             :                 return GF_BAD_PARAM;
   27385             :         }
   27386             : }
   27387          40 : static GF_Err ProceduralTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   27388             : {
   27389          40 :         switch (info->fieldIndex) {
   27390           2 :         case 0:
   27391           2 :                 info->name = "aSmooth";
   27392           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27393           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27394           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->aSmooth;
   27395           2 :                 return GF_OK;
   27396           2 :         case 1:
   27397           2 :                 info->name = "aWarpmap";
   27398           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27399           2 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27400           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->aWarpmap;
   27401           2 :                 return GF_OK;
   27402           2 :         case 2:
   27403           2 :                 info->name = "aWeights";
   27404           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27405           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27406           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->aWeights;
   27407           2 :                 return GF_OK;
   27408           2 :         case 3:
   27409           2 :                 info->name = "bSmooth";
   27410           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27411           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27412           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->bSmooth;
   27413           2 :                 return GF_OK;
   27414           2 :         case 4:
   27415           2 :                 info->name = "bWarpmap";
   27416           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27417           2 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27418           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->bWarpmap;
   27419           2 :                 return GF_OK;
   27420           2 :         case 5:
   27421           2 :                 info->name = "bWeights";
   27422           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27423           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   27424           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->bWeights;
   27425           2 :                 return GF_OK;
   27426           2 :         case 6:
   27427           2 :                 info->name = "cellWidth";
   27428           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27429           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27430           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->cellWidth;
   27431           2 :                 return GF_OK;
   27432           2 :         case 7:
   27433           2 :                 info->name = "cellHeight";
   27434           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27435           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27436           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->cellHeight;
   27437           2 :                 return GF_OK;
   27438           2 :         case 8:
   27439           2 :                 info->name = "color";
   27440           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27441           2 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   27442           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->color;
   27443           2 :                 return GF_OK;
   27444           2 :         case 9:
   27445           2 :                 info->name = "distortion";
   27446           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27447           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   27448           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->distortion;
   27449           2 :                 return GF_OK;
   27450           2 :         case 10:
   27451           2 :                 info->name = "height";
   27452           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27453           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27454           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->height;
   27455           2 :                 return GF_OK;
   27456           2 :         case 11:
   27457           2 :                 info->name = "roughness";
   27458           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27459           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27460           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->roughness;
   27461           2 :                 return GF_OK;
   27462           2 :         case 12:
   27463           2 :                 info->name = "seed";
   27464           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27465           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27466           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->seed;
   27467           2 :                 return GF_OK;
   27468           2 :         case 13:
   27469           2 :                 info->name = "type";
   27470           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27471           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27472           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->type;
   27473           2 :                 return GF_OK;
   27474           2 :         case 14:
   27475           2 :                 info->name = "xSmooth";
   27476           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27477           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27478           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->xSmooth;
   27479           2 :                 return GF_OK;
   27480           2 :         case 15:
   27481           2 :                 info->name = "xWarpmap";
   27482           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27483           2 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27484           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->xWarpmap;
   27485           2 :                 return GF_OK;
   27486           2 :         case 16:
   27487           2 :                 info->name = "ySmooth";
   27488           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27489           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27490           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->ySmooth;
   27491           2 :                 return GF_OK;
   27492           2 :         case 17:
   27493           2 :                 info->name = "yWarpmap";
   27494           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27495           2 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   27496           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->yWarpmap;
   27497           2 :                 return GF_OK;
   27498           2 :         case 18:
   27499           2 :                 info->name = "width";
   27500           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27501           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   27502           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->width;
   27503           2 :                 return GF_OK;
   27504           2 :         case 19:
   27505           2 :                 info->name = "image_changed";
   27506           2 :                 info->eventType = GF_SG_EVENT_OUT;
   27507           2 :                 info->fieldType = GF_SG_VRML_SFIMAGE;
   27508           2 :                 info->far_ptr = & ((M_ProceduralTexture *) node)->image_changed;
   27509           2 :                 return GF_OK;
   27510             :         default:
   27511             :                 return GF_BAD_PARAM;
   27512             :         }
   27513             : }
   27514             : 
   27515             : 
   27516          20 : static s32 ProceduralTexture_get_field_index_by_name(char *name)
   27517             : {
   27518          20 :         if (!strcmp("aSmooth", name)) return 0;
   27519          19 :         if (!strcmp("aWarpmap", name)) return 1;
   27520          18 :         if (!strcmp("aWeights", name)) return 2;
   27521          17 :         if (!strcmp("bSmooth", name)) return 3;
   27522          16 :         if (!strcmp("bWarpmap", name)) return 4;
   27523          15 :         if (!strcmp("bWeights", name)) return 5;
   27524          14 :         if (!strcmp("cellWidth", name)) return 6;
   27525          13 :         if (!strcmp("cellHeight", name)) return 7;
   27526          12 :         if (!strcmp("color", name)) return 8;
   27527          11 :         if (!strcmp("distortion", name)) return 9;
   27528          10 :         if (!strcmp("height", name)) return 10;
   27529           9 :         if (!strcmp("roughness", name)) return 11;
   27530           8 :         if (!strcmp("seed", name)) return 12;
   27531           7 :         if (!strcmp("type", name)) return 13;
   27532           6 :         if (!strcmp("xSmooth", name)) return 14;
   27533           5 :         if (!strcmp("xWarpmap", name)) return 15;
   27534           4 :         if (!strcmp("ySmooth", name)) return 16;
   27535           3 :         if (!strcmp("yWarpmap", name)) return 17;
   27536           2 :         if (!strcmp("width", name)) return 18;
   27537           1 :         if (!strcmp("image_changed", name)) return 19;
   27538           0 :         return -1;
   27539             : }
   27540          20 : static Bool ProceduralTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27541             : {
   27542          20 :         switch (FieldIndex) {
   27543           1 :         case 1:
   27544           1 :                 *AType = 0;
   27545           1 :                 *QType = 2;
   27546           1 :                 *b_min = FLT2FIX(0);
   27547           1 :                 *b_max = FLT2FIX(1);
   27548             :                 return 1;
   27549           1 :         case 4:
   27550           1 :                 *AType = 0;
   27551           1 :                 *QType = 2;
   27552           1 :                 *b_min = FLT2FIX(0);
   27553           1 :                 *b_max = FLT2FIX( 1);
   27554             :                 return 1;
   27555           1 :         case 6:
   27556           1 :                 *AType = 0;
   27557           1 :                 *QType = 13;
   27558           1 :                 *QT13_bits = 4;
   27559           1 :                 *b_min = FLT2FIX(0);
   27560           1 :                 *b_max = FLT2FIX(15);
   27561             :                 return 1;
   27562           1 :         case 7:
   27563           1 :                 *AType = 0;
   27564           1 :                 *QType = 13;
   27565           1 :                 *QT13_bits = 4;
   27566           1 :                 *b_min = FLT2FIX(0);
   27567           1 :                 *b_max = FLT2FIX(15);
   27568             :                 return 1;
   27569           1 :         case 8:
   27570           1 :                 *AType = 0;
   27571           1 :                 *QType = 4;
   27572             :                 return 1;
   27573           1 :         case 9:
   27574           1 :                 *AType = 0;
   27575           1 :                 *QType = 13;
   27576           1 :                 *QT13_bits = 16;
   27577           1 :                 *b_min = FLT2FIX(0);
   27578           1 :                 *b_max = FLT2FIX(1);
   27579             :                 return 1;
   27580           1 :         case 10:
   27581           1 :                 *AType = 0;
   27582           1 :                 *QType = 13;
   27583           1 :                 *QT13_bits = 4;
   27584           1 :                 *b_min = FLT2FIX(1);
   27585           1 :                 *b_max = FLT2FIX(15);
   27586             :                 return 1;
   27587           1 :         case 11:
   27588           1 :                 *AType = 0;
   27589           1 :                 *QType = 13;
   27590           1 :                 *QT13_bits = 4;
   27591           1 :                 *b_min = FLT2FIX(0);
   27592           1 :                 *b_max = FLT2FIX(15);
   27593             :                 return 1;
   27594           1 :         case 13:
   27595           1 :                 *AType = 0;
   27596           1 :                 *QType = 13;
   27597           1 :                 *QT13_bits = 3;
   27598           1 :                 *b_min = FLT2FIX(0);
   27599           1 :                 *b_max = FLT2FIX(4);
   27600             :                 return 1;
   27601           1 :         case 15:
   27602           1 :                 *AType = 0;
   27603           1 :                 *QType = 2;
   27604           1 :                 *b_min = FLT2FIX(0);
   27605           1 :                 *b_max = FLT2FIX(1);
   27606             :                 return 1;
   27607           1 :         case 17:
   27608           1 :                 *AType = 0;
   27609           1 :                 *QType = 2;
   27610           1 :                 *b_min = FLT2FIX(0);
   27611           1 :                 *b_max = FLT2FIX(1);
   27612             :                 return 1;
   27613           1 :         case 18:
   27614           1 :                 *AType = 0;
   27615           1 :                 *QType = 13;
   27616           1 :                 *QT13_bits = 4;
   27617           1 :                 *b_min = FLT2FIX(1);
   27618           1 :                 *b_max = FLT2FIX(15);
   27619             :                 return 1;
   27620             :         default:
   27621             :                 return 0;
   27622             :         }
   27623             : }
   27624             : 
   27625             : 
   27626             : 
   27627           1 : GF_Node *ProceduralTexture_Create()
   27628             : {
   27629             :         M_ProceduralTexture *p;
   27630           1 :         GF_SAFEALLOC(p, M_ProceduralTexture);
   27631           1 :         if(!p) return NULL;
   27632           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ProceduralTexture);
   27633             : 
   27634             :         /*default field values*/
   27635           1 :         p->aWarpmap.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   27636           1 :         p->aWarpmap.count = 2;
   27637           1 :         p->aWarpmap.vals[0].x = FLT2FIX(0);
   27638           1 :         p->aWarpmap.vals[0].y = FLT2FIX(0);
   27639           1 :         p->aWarpmap.vals[1].x = FLT2FIX(1);
   27640           1 :         p->aWarpmap.vals[1].y = FLT2FIX(1);
   27641           1 :         p->aWeights.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*16);
   27642           1 :         p->aWeights.count = 16;
   27643           1 :         p->aWeights.vals[0] = FLT2FIX(0);
   27644           1 :         p->aWeights.vals[1] = FLT2FIX(0);
   27645           1 :         p->aWeights.vals[2] = FLT2FIX(0);
   27646           1 :         p->aWeights.vals[3] = FLT2FIX(0);
   27647           1 :         p->aWeights.vals[4] = FLT2FIX(0);
   27648           1 :         p->aWeights.vals[5] = FLT2FIX(0);
   27649           1 :         p->aWeights.vals[6] = FLT2FIX(0);
   27650           1 :         p->aWeights.vals[7] = FLT2FIX(0);
   27651           1 :         p->aWeights.vals[8] = FLT2FIX(0);
   27652           1 :         p->aWeights.vals[9] = FLT2FIX(0);
   27653           1 :         p->aWeights.vals[10] = FLT2FIX(0);
   27654           1 :         p->aWeights.vals[11] = FLT2FIX(0);
   27655           1 :         p->aWeights.vals[12] = FLT2FIX(1);
   27656           1 :         p->aWeights.vals[13] = FLT2FIX(0);
   27657           1 :         p->aWeights.vals[14] = FLT2FIX(0);
   27658           1 :         p->aWeights.vals[15] = FLT2FIX(0);
   27659           1 :         p->bWarpmap.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   27660           1 :         p->bWarpmap.count = 2;
   27661           1 :         p->bWarpmap.vals[0].x = FLT2FIX(0);
   27662           1 :         p->bWarpmap.vals[0].y = FLT2FIX(0);
   27663           1 :         p->bWarpmap.vals[1].x = FLT2FIX(1);
   27664           1 :         p->bWarpmap.vals[1].y = FLT2FIX(1);
   27665           1 :         p->bWeights.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*16);
   27666           1 :         p->bWeights.count = 16;
   27667           1 :         p->bWeights.vals[0] = FLT2FIX(0);
   27668           1 :         p->bWeights.vals[1] = FLT2FIX(0);
   27669           1 :         p->bWeights.vals[2] = FLT2FIX(0);
   27670           1 :         p->bWeights.vals[3] = FLT2FIX(0);
   27671           1 :         p->bWeights.vals[4] = FLT2FIX(0);
   27672           1 :         p->bWeights.vals[5] = FLT2FIX(1);
   27673           1 :         p->bWeights.vals[6] = FLT2FIX(0);
   27674           1 :         p->bWeights.vals[7] = FLT2FIX(0);
   27675           1 :         p->bWeights.vals[8] = FLT2FIX(0);
   27676           1 :         p->bWeights.vals[9] = FLT2FIX(0);
   27677           1 :         p->bWeights.vals[10] = FLT2FIX(0);
   27678           1 :         p->bWeights.vals[11] = FLT2FIX(0);
   27679           1 :         p->bWeights.vals[12] = FLT2FIX(0);
   27680           1 :         p->bWeights.vals[13] = FLT2FIX(0);
   27681           1 :         p->bWeights.vals[14] = FLT2FIX(0);
   27682           1 :         p->bWeights.vals[15] = FLT2FIX(0);
   27683           1 :         p->cellWidth = 4;
   27684           1 :         p->cellHeight = 4;
   27685           1 :         p->color.vals = (SFColor*)gf_malloc(sizeof(SFColor)*4);
   27686           1 :         p->color.count = 4;
   27687           1 :         p->color.vals[0].red = FLT2FIX(0.3);
   27688           1 :         p->color.vals[0].green = FLT2FIX(0.698);
   27689           1 :         p->color.vals[0].blue = FLT2FIX(1);
   27690           1 :         p->color.vals[1].red = FLT2FIX(0.8);
   27691           1 :         p->color.vals[1].green = FLT2FIX(0.8);
   27692           1 :         p->color.vals[1].blue = FLT2FIX(0.8);
   27693           1 :         p->color.vals[2].red = FLT2FIX(1);
   27694           1 :         p->color.vals[2].green = FLT2FIX(1);
   27695           1 :         p->color.vals[2].blue = FLT2FIX(1);
   27696           1 :         p->color.vals[3].red = FLT2FIX(0);
   27697           1 :         p->color.vals[3].green = FLT2FIX(0);
   27698           1 :         p->color.vals[3].blue = FLT2FIX(0);
   27699           1 :         p->distortion = FLT2FIX(0);
   27700           1 :         p->height = 7;
   27701           1 :         p->roughness = 0;
   27702           1 :         p->seed = 129093;
   27703           1 :         p->type = 0;
   27704           1 :         p->width = 7;
   27705           1 :         return (GF_Node *)p;
   27706             : }
   27707             : 
   27708             : 
   27709             : /*
   27710             :         Quadric Node deletion
   27711             : */
   27712             : 
   27713             : static void Quadric_Del(GF_Node *node)
   27714             : {
   27715             :         M_Quadric *p = (M_Quadric *) node;
   27716           1 :         gf_sg_mfint32_del(p->densities);
   27717           1 :         gf_node_free((GF_Node *) p);
   27718             : }
   27719             : 
   27720             : static const u16 Quadric_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27721             : static const u16 Quadric_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27722             : static const u16 Quadric_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   27723             : static const u16 Quadric_Dyn2All[] = { 0, 3, 4, 5, 6, 7, 8};
   27724             : 
   27725             : static u32 Quadric_get_field_count(GF_Node *node, u8 IndexMode)
   27726             : {
   27727           6 :         switch(IndexMode) {
   27728             :         case GF_SG_FIELD_CODING_IN:
   27729             :                 return 10;
   27730             :         case GF_SG_FIELD_CODING_DEF:
   27731             :                 return 10;
   27732             :         case GF_SG_FIELD_CODING_OUT:
   27733             :                 return 10;
   27734           1 :         case GF_SG_FIELD_CODING_DYN:
   27735             :                 return 7;
   27736             :         default:
   27737             :                 return 10;
   27738             :         }
   27739             : }
   27740             : 
   27741             : static GF_Err Quadric_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27742             : {
   27743          10 :         switch(IndexMode) {
   27744           0 :         case GF_SG_FIELD_CODING_IN:
   27745           0 :                 *allField = Quadric_In2All[inField];
   27746             :                 return GF_OK;
   27747           0 :         case GF_SG_FIELD_CODING_DEF:
   27748           0 :                 *allField = Quadric_Def2All[inField];
   27749             :                 return GF_OK;
   27750           0 :         case GF_SG_FIELD_CODING_OUT:
   27751           0 :                 *allField = Quadric_Out2All[inField];
   27752             :                 return GF_OK;
   27753           0 :         case GF_SG_FIELD_CODING_DYN:
   27754           0 :                 *allField = Quadric_Dyn2All[inField];
   27755             :                 return GF_OK;
   27756             :         default:
   27757             :                 return GF_BAD_PARAM;
   27758             :         }
   27759             : }
   27760          20 : static GF_Err Quadric_get_field(GF_Node *node, GF_FieldInfo *info)
   27761             : {
   27762          20 :         switch (info->fieldIndex) {
   27763           2 :         case 0:
   27764           2 :                 info->name = "bboxSize";
   27765           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27766           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   27767           2 :                 info->far_ptr = & ((M_Quadric *) node)->bboxSize;
   27768           2 :                 return GF_OK;
   27769           2 :         case 1:
   27770           2 :                 info->name = "densities";
   27771           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27772           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   27773           2 :                 info->far_ptr = & ((M_Quadric *) node)->densities;
   27774           2 :                 return GF_OK;
   27775           2 :         case 2:
   27776           2 :                 info->name = "dual";
   27777           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27778           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27779           2 :                 info->far_ptr = & ((M_Quadric *) node)->dual;
   27780           2 :                 return GF_OK;
   27781           2 :         case 3:
   27782           2 :                 info->name = "P0";
   27783           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27784           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27785           2 :                 info->far_ptr = & ((M_Quadric *) node)->P0;
   27786           2 :                 return GF_OK;
   27787           2 :         case 4:
   27788           2 :                 info->name = "P1";
   27789           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27790           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27791           2 :                 info->far_ptr = & ((M_Quadric *) node)->P1;
   27792           2 :                 return GF_OK;
   27793           2 :         case 5:
   27794           2 :                 info->name = "P2";
   27795           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27796           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27797           2 :                 info->far_ptr = & ((M_Quadric *) node)->P2;
   27798           2 :                 return GF_OK;
   27799           2 :         case 6:
   27800           2 :                 info->name = "P3";
   27801           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27802           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27803           2 :                 info->far_ptr = & ((M_Quadric *) node)->P3;
   27804           2 :                 return GF_OK;
   27805           2 :         case 7:
   27806           2 :                 info->name = "P4";
   27807           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27808           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27809           2 :                 info->far_ptr = & ((M_Quadric *) node)->P4;
   27810           2 :                 return GF_OK;
   27811           2 :         case 8:
   27812           2 :                 info->name = "P5";
   27813           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27814           2 :                 info->fieldType = GF_SG_VRML_SFVEC4F;
   27815           2 :                 info->far_ptr = & ((M_Quadric *) node)->P5;
   27816           2 :                 return GF_OK;
   27817           2 :         case 9:
   27818           2 :                 info->name = "solid";
   27819           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   27820           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   27821           2 :                 info->far_ptr = & ((M_Quadric *) node)->solid;
   27822           2 :                 return GF_OK;
   27823             :         default:
   27824             :                 return GF_BAD_PARAM;
   27825             :         }
   27826             : }
   27827             : 
   27828             : 
   27829          10 : static s32 Quadric_get_field_index_by_name(char *name)
   27830             : {
   27831          10 :         if (!strcmp("bboxSize", name)) return 0;
   27832           9 :         if (!strcmp("densities", name)) return 1;
   27833           8 :         if (!strcmp("dual", name)) return 2;
   27834           7 :         if (!strcmp("P0", name)) return 3;
   27835           6 :         if (!strcmp("P1", name)) return 4;
   27836           5 :         if (!strcmp("P2", name)) return 5;
   27837           4 :         if (!strcmp("P3", name)) return 6;
   27838           3 :         if (!strcmp("P4", name)) return 7;
   27839           2 :         if (!strcmp("P5", name)) return 8;
   27840           1 :         if (!strcmp("solid", name)) return 9;
   27841           0 :         return -1;
   27842             : }
   27843          10 : static Bool Quadric_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   27844             : {
   27845          10 :         switch (FieldIndex) {
   27846           1 :         case 0:
   27847           1 :                 *AType = 11;
   27848           1 :                 *QType = 11;
   27849           1 :                 *b_min = FLT2FIX(0);
   27850           1 :                 *b_max = FIX_MAX;
   27851             :                 return 1;
   27852           1 :         case 3:
   27853           1 :                 *AType = 15;
   27854           1 :                 *QType = 15;
   27855           1 :                 *b_min = FIX_MIN;
   27856           1 :                 *b_max = FIX_MAX;
   27857             :                 return 1;
   27858           1 :         case 4:
   27859           1 :                 *AType = 15;
   27860           1 :                 *QType = 15;
   27861           1 :                 *b_min = FIX_MIN;
   27862           1 :                 *b_max = FIX_MAX;
   27863             :                 return 1;
   27864           1 :         case 5:
   27865           1 :                 *AType = 15;
   27866           1 :                 *QType = 15;
   27867           1 :                 *b_min = FIX_MIN;
   27868           1 :                 *b_max = FIX_MAX;
   27869             :                 return 1;
   27870           1 :         case 6:
   27871           1 :                 *AType = 15;
   27872           1 :                 *QType = 15;
   27873           1 :                 *b_min = FIX_MIN;
   27874           1 :                 *b_max = FIX_MAX;
   27875             :                 return 1;
   27876           1 :         case 7:
   27877           1 :                 *AType = 15;
   27878           1 :                 *QType = 15;
   27879           1 :                 *b_min = FIX_MIN;
   27880           1 :                 *b_max = FIX_MAX;
   27881             :                 return 1;
   27882           1 :         case 8:
   27883           1 :                 *AType = 15;
   27884           1 :                 *QType = 15;
   27885           1 :                 *b_min = FIX_MIN;
   27886           1 :                 *b_max = FIX_MAX;
   27887             :                 return 1;
   27888             :         default:
   27889             :                 return 0;
   27890             :         }
   27891             : }
   27892             : 
   27893             : 
   27894             : 
   27895           1 : GF_Node *Quadric_Create()
   27896             : {
   27897             :         M_Quadric *p;
   27898           1 :         GF_SAFEALLOC(p, M_Quadric);
   27899           1 :         if(!p) return NULL;
   27900           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Quadric);
   27901             : 
   27902             :         /*default field values*/
   27903           1 :         p->bboxSize.x = FLT2FIX(2);
   27904           1 :         p->bboxSize.y = FLT2FIX(2);
   27905           1 :         p->bboxSize.z = FLT2FIX(2);
   27906           1 :         p->P0.x = FLT2FIX(-1);
   27907           1 :         p->P0.y = FLT2FIX(0);
   27908           1 :         p->P0.z = FLT2FIX(0);
   27909           1 :         p->P0.q = FLT2FIX(1);
   27910           1 :         p->P1.x = FLT2FIX(1);
   27911           1 :         p->P1.y = FLT2FIX(0);
   27912           1 :         p->P1.z = FLT2FIX(0);
   27913           1 :         p->P1.q = FLT2FIX(1);
   27914           1 :         p->P2.x = FLT2FIX(0);
   27915           1 :         p->P2.y = FLT2FIX(1);
   27916           1 :         p->P2.z = FLT2FIX(0);
   27917           1 :         p->P2.q = FLT2FIX(0);
   27918           1 :         p->P3.x = FLT2FIX(0);
   27919           1 :         p->P3.y = FLT2FIX(0);
   27920           1 :         p->P3.z = FLT2FIX(1);
   27921           1 :         p->P3.q = FLT2FIX(0);
   27922           1 :         p->P4.x = FLT2FIX(0);
   27923           1 :         p->P4.y = FLT2FIX(1);
   27924           1 :         p->P4.z = FLT2FIX(0);
   27925           1 :         p->P4.q = FLT2FIX(1);
   27926           1 :         p->P5.x = FLT2FIX(0);
   27927           1 :         p->P5.y = FLT2FIX(0);
   27928           1 :         p->P5.z = FLT2FIX(1);
   27929           1 :         p->P5.q = FLT2FIX(1);
   27930           1 :         return (GF_Node *)p;
   27931             : }
   27932             : 
   27933             : 
   27934             : /*
   27935             :         SBBone Node deletion
   27936             : */
   27937             : 
   27938           1 : static void SBBone_Del(GF_Node *node)
   27939             : {
   27940             :         M_SBBone *p = (M_SBBone *) node;
   27941           1 :         gf_sg_mffloat_del(p->ikPitchLimit);
   27942           1 :         gf_sg_mffloat_del(p->ikRollLimit);
   27943           1 :         gf_sg_mffloat_del(p->ikTxLimit);
   27944           1 :         gf_sg_mffloat_del(p->ikTyLimit);
   27945           1 :         gf_sg_mffloat_del(p->ikTzLimit);
   27946           1 :         gf_sg_mffloat_del(p->ikYawLimit);
   27947           1 :         gf_sg_mffloat_del(p->sectionInner);
   27948           1 :         gf_sg_mffloat_del(p->sectionOuter);
   27949           1 :         gf_sg_mffloat_del(p->sectionPosition);
   27950           1 :         gf_sg_mfint32_del(p->skinCoordIndex);
   27951           1 :         gf_sg_mffloat_del(p->skinCoordWeight);
   27952           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   27953           1 :         gf_node_free((GF_Node *) p);
   27954           1 : }
   27955             : 
   27956             : static const u16 SBBone_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
   27957             : static const u16 SBBone_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
   27958             : static const u16 SBBone_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
   27959             : static const u16 SBBone_Dyn2All[] = { 3, 5, 14, 16, 17, 23};
   27960             : 
   27961             : static u32 SBBone_get_field_count(GF_Node *node, u8 IndexMode)
   27962             : {
   27963             :         switch(IndexMode) {
   27964             :         case GF_SG_FIELD_CODING_IN:
   27965             :                 return 24;
   27966             :         case GF_SG_FIELD_CODING_DEF:
   27967             :                 return 22;
   27968             :         case GF_SG_FIELD_CODING_OUT:
   27969             :                 return 22;
   27970             :         case GF_SG_FIELD_CODING_DYN:
   27971             :                 return 6;
   27972             :         default:
   27973             :                 return 24;
   27974             :         }
   27975             : }
   27976             : 
   27977             : static GF_Err SBBone_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   27978             : {
   27979          24 :         switch(IndexMode) {
   27980           0 :         case GF_SG_FIELD_CODING_IN:
   27981           0 :                 *allField = SBBone_In2All[inField];
   27982             :                 return GF_OK;
   27983           0 :         case GF_SG_FIELD_CODING_DEF:
   27984           0 :                 *allField = SBBone_Def2All[inField];
   27985             :                 return GF_OK;
   27986           0 :         case GF_SG_FIELD_CODING_OUT:
   27987           0 :                 *allField = SBBone_Out2All[inField];
   27988             :                 return GF_OK;
   27989           0 :         case GF_SG_FIELD_CODING_DYN:
   27990           0 :                 *allField = SBBone_Dyn2All[inField];
   27991             :                 return GF_OK;
   27992             :         default:
   27993             :                 return GF_BAD_PARAM;
   27994             :         }
   27995             : }
   27996          48 : static GF_Err SBBone_get_field(GF_Node *node, GF_FieldInfo *info)
   27997             : {
   27998          48 :         switch (info->fieldIndex) {
   27999           2 :         case 0:
   28000           2 :                 info->name = "addChildren";
   28001           2 :                 info->eventType = GF_SG_EVENT_IN;
   28002           2 :                 info->on_event_in = ((M_SBBone *)node)->on_addChildren;
   28003           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28004           2 :                 info->NDTtype = NDT_SF3DNode;
   28005           2 :                 info->far_ptr = & ((M_SBBone *)node)->addChildren;
   28006           2 :                 return GF_OK;
   28007           2 :         case 1:
   28008           2 :                 info->name = "removeChildren";
   28009           2 :                 info->eventType = GF_SG_EVENT_IN;
   28010           2 :                 info->on_event_in = ((M_SBBone *)node)->on_removeChildren;
   28011           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28012           2 :                 info->NDTtype = NDT_SF3DNode;
   28013           2 :                 info->far_ptr = & ((M_SBBone *)node)->removeChildren;
   28014           2 :                 return GF_OK;
   28015           2 :         case 2:
   28016           2 :                 info->name = "boneID";
   28017           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28018           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28019           2 :                 info->far_ptr = & ((M_SBBone *) node)->boneID;
   28020           2 :                 return GF_OK;
   28021           2 :         case 3:
   28022           2 :                 info->name = "center";
   28023           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28024           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28025           2 :                 info->far_ptr = & ((M_SBBone *) node)->center;
   28026           2 :                 return GF_OK;
   28027           2 :         case 4:
   28028           2 :                 info->name = "children";
   28029           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28030           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28031           2 :                 info->NDTtype = NDT_SF3DNode;
   28032           2 :                 info->far_ptr = & ((M_SBBone *)node)->children;
   28033           2 :                 return GF_OK;
   28034           2 :         case 5:
   28035           2 :                 info->name = "endpoint";
   28036           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28037           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28038           2 :                 info->far_ptr = & ((M_SBBone *) node)->endpoint;
   28039           2 :                 return GF_OK;
   28040           2 :         case 6:
   28041           2 :                 info->name = "falloff";
   28042           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28043           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28044           2 :                 info->far_ptr = & ((M_SBBone *) node)->falloff;
   28045           2 :                 return GF_OK;
   28046           2 :         case 7:
   28047           2 :                 info->name = "ikChainPosition";
   28048           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28049           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28050           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikChainPosition;
   28051           2 :                 return GF_OK;
   28052           2 :         case 8:
   28053           2 :                 info->name = "ikPitchLimit";
   28054           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28055           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28056           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikPitchLimit;
   28057           2 :                 return GF_OK;
   28058           2 :         case 9:
   28059           2 :                 info->name = "ikRollLimit";
   28060           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28061           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28062           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikRollLimit;
   28063           2 :                 return GF_OK;
   28064           2 :         case 10:
   28065           2 :                 info->name = "ikTxLimit";
   28066           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28067           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28068           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikTxLimit;
   28069           2 :                 return GF_OK;
   28070           2 :         case 11:
   28071           2 :                 info->name = "ikTyLimit";
   28072           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28073           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28074           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikTyLimit;
   28075           2 :                 return GF_OK;
   28076           2 :         case 12:
   28077           2 :                 info->name = "ikTzLimit";
   28078           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28079           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28080           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikTzLimit;
   28081           2 :                 return GF_OK;
   28082           2 :         case 13:
   28083           2 :                 info->name = "ikYawLimit";
   28084           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28085           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28086           2 :                 info->far_ptr = & ((M_SBBone *) node)->ikYawLimit;
   28087           2 :                 return GF_OK;
   28088           2 :         case 14:
   28089           2 :                 info->name = "rotation";
   28090           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28091           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28092           2 :                 info->far_ptr = & ((M_SBBone *) node)->rotation;
   28093           2 :                 return GF_OK;
   28094           2 :         case 15:
   28095           2 :                 info->name = "rotationOrder";
   28096           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28097           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28098           2 :                 info->far_ptr = & ((M_SBBone *) node)->rotationOrder;
   28099           2 :                 return GF_OK;
   28100           2 :         case 16:
   28101           2 :                 info->name = "scale";
   28102           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28103           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28104           2 :                 info->far_ptr = & ((M_SBBone *) node)->scale;
   28105           2 :                 return GF_OK;
   28106           2 :         case 17:
   28107           2 :                 info->name = "scaleOrientation";
   28108           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28109           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28110           2 :                 info->far_ptr = & ((M_SBBone *) node)->scaleOrientation;
   28111           2 :                 return GF_OK;
   28112           2 :         case 18:
   28113           2 :                 info->name = "sectionInner";
   28114           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28115           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28116           2 :                 info->far_ptr = & ((M_SBBone *) node)->sectionInner;
   28117           2 :                 return GF_OK;
   28118           2 :         case 19:
   28119           2 :                 info->name = "sectionOuter";
   28120           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28121           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28122           2 :                 info->far_ptr = & ((M_SBBone *) node)->sectionOuter;
   28123           2 :                 return GF_OK;
   28124           2 :         case 20:
   28125           2 :                 info->name = "sectionPosition";
   28126           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28127           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28128           2 :                 info->far_ptr = & ((M_SBBone *) node)->sectionPosition;
   28129           2 :                 return GF_OK;
   28130           2 :         case 21:
   28131           2 :                 info->name = "skinCoordIndex";
   28132           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28133           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   28134           2 :                 info->far_ptr = & ((M_SBBone *) node)->skinCoordIndex;
   28135           2 :                 return GF_OK;
   28136           2 :         case 22:
   28137           2 :                 info->name = "skinCoordWeight";
   28138           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28139           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28140           2 :                 info->far_ptr = & ((M_SBBone *) node)->skinCoordWeight;
   28141           2 :                 return GF_OK;
   28142           2 :         case 23:
   28143           2 :                 info->name = "translation";
   28144           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28145           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28146           2 :                 info->far_ptr = & ((M_SBBone *) node)->translation;
   28147           2 :                 return GF_OK;
   28148             :         default:
   28149             :                 return GF_BAD_PARAM;
   28150             :         }
   28151             : }
   28152             : 
   28153             : 
   28154          24 : static s32 SBBone_get_field_index_by_name(char *name)
   28155             : {
   28156          24 :         if (!strcmp("addChildren", name)) return 0;
   28157          23 :         if (!strcmp("removeChildren", name)) return 1;
   28158          22 :         if (!strcmp("boneID", name)) return 2;
   28159          21 :         if (!strcmp("center", name)) return 3;
   28160          20 :         if (!strcmp("children", name)) return 4;
   28161          19 :         if (!strcmp("endpoint", name)) return 5;
   28162          18 :         if (!strcmp("falloff", name)) return 6;
   28163          17 :         if (!strcmp("ikChainPosition", name)) return 7;
   28164          16 :         if (!strcmp("ikPitchLimit", name)) return 8;
   28165          15 :         if (!strcmp("ikRollLimit", name)) return 9;
   28166          14 :         if (!strcmp("ikTxLimit", name)) return 10;
   28167          13 :         if (!strcmp("ikTyLimit", name)) return 11;
   28168          12 :         if (!strcmp("ikTzLimit", name)) return 12;
   28169          11 :         if (!strcmp("ikYawLimit", name)) return 13;
   28170          10 :         if (!strcmp("rotation", name)) return 14;
   28171           9 :         if (!strcmp("rotationOrder", name)) return 15;
   28172           8 :         if (!strcmp("scale", name)) return 16;
   28173           7 :         if (!strcmp("scaleOrientation", name)) return 17;
   28174           6 :         if (!strcmp("sectionInner", name)) return 18;
   28175           5 :         if (!strcmp("sectionOuter", name)) return 19;
   28176           4 :         if (!strcmp("sectionPosition", name)) return 20;
   28177           3 :         if (!strcmp("skinCoordIndex", name)) return 21;
   28178           2 :         if (!strcmp("skinCoordWeight", name)) return 22;
   28179           1 :         if (!strcmp("translation", name)) return 23;
   28180           0 :         return -1;
   28181             : }
   28182          24 : static Bool SBBone_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28183             : {
   28184          24 :         switch (FieldIndex) {
   28185           1 :         case 2:
   28186           1 :                 *AType = 0;
   28187           1 :                 *QType = 13;
   28188           1 :                 *QT13_bits = 10;
   28189           1 :                 *b_min = FLT2FIX(0);
   28190           1 :                 *b_max = FLT2FIX(1023);
   28191             :                 return 1;
   28192           1 :         case 3:
   28193           1 :                 *AType = 1;
   28194           1 :                 *QType = 1;
   28195             :                 return 1;
   28196           1 :         case 5:
   28197           1 :                 *AType = 1;
   28198           1 :                 *QType = 1;
   28199             :                 return 1;
   28200           1 :         case 6:
   28201           1 :                 *AType = 0;
   28202           1 :                 *QType = 13;
   28203           1 :                 *QT13_bits = 3;
   28204           1 :                 *b_min = FLT2FIX(-1);
   28205           1 :                 *b_max = FLT2FIX(4);
   28206             :                 return 1;
   28207           1 :         case 7:
   28208           1 :                 *AType = 0;
   28209           1 :                 *QType = 13;
   28210           1 :                 *QT13_bits = 2;
   28211           1 :                 *b_min = FLT2FIX(0);
   28212           1 :                 *b_max = FLT2FIX(3);
   28213             :                 return 1;
   28214           1 :         case 14:
   28215           1 :                 *AType = 10;
   28216           1 :                 *QType = 10;
   28217             :                 return 1;
   28218           1 :         case 15:
   28219           1 :                 *AType = 0;
   28220           1 :                 *QType = 13;
   28221           1 :                 *QT13_bits = 5;
   28222           1 :                 *b_min = FLT2FIX(0);
   28223           1 :                 *b_max = FLT2FIX(23);
   28224             :                 return 1;
   28225           1 :         case 16:
   28226           1 :                 *AType = 11;
   28227           1 :                 *QType = 7;
   28228             :                 return 1;
   28229           1 :         case 17:
   28230           1 :                 *AType = 10;
   28231           1 :                 *QType = 10;
   28232             :                 return 1;
   28233           1 :         case 21:
   28234           1 :                 *AType = 0;
   28235           1 :                 *QType = 14;
   28236             :                 return 1;
   28237           1 :         case 23:
   28238           1 :                 *AType = 1;
   28239           1 :                 *QType = 1;
   28240             :                 return 1;
   28241             :         default:
   28242             :                 return 0;
   28243             :         }
   28244             : }
   28245             : 
   28246             : 
   28247             : 
   28248           1 : GF_Node *SBBone_Create()
   28249             : {
   28250             :         M_SBBone *p;
   28251           1 :         GF_SAFEALLOC(p, M_SBBone);
   28252           1 :         if(!p) return NULL;
   28253           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBBone);
   28254           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   28255             : 
   28256             :         /*default field values*/
   28257           1 :         p->boneID = 0;
   28258           1 :         p->center.x = FLT2FIX(0);
   28259           1 :         p->center.y = FLT2FIX(0);
   28260           1 :         p->center.z = FLT2FIX(0);
   28261           1 :         p->endpoint.x = FLT2FIX(0);
   28262           1 :         p->endpoint.y = FLT2FIX(0);
   28263           1 :         p->endpoint.z = FLT2FIX(1);
   28264           1 :         p->falloff = 1;
   28265           1 :         p->ikChainPosition = 0;
   28266           1 :         p->rotation.x = FLT2FIX(0);
   28267           1 :         p->rotation.y = FLT2FIX(0);
   28268           1 :         p->rotation.z = FLT2FIX(1);
   28269           1 :         p->rotation.q = FLT2FIX(0);
   28270           1 :         p->rotationOrder = 0;
   28271           1 :         p->scale.x = FLT2FIX(0);
   28272           1 :         p->scale.y = FLT2FIX(0);
   28273           1 :         p->scale.z = FLT2FIX(0);
   28274           1 :         p->scaleOrientation.x = FLT2FIX(0);
   28275           1 :         p->scaleOrientation.y = FLT2FIX(0);
   28276           1 :         p->scaleOrientation.z = FLT2FIX(1);
   28277           1 :         p->scaleOrientation.q = FLT2FIX(0);
   28278           1 :         p->translation.x = FLT2FIX(0);
   28279           1 :         p->translation.y = FLT2FIX(0);
   28280           1 :         p->translation.z = FLT2FIX(0);
   28281           1 :         return (GF_Node *)p;
   28282             : }
   28283             : 
   28284             : 
   28285             : /*
   28286             :         SBMuscle Node deletion
   28287             : */
   28288             : 
   28289           1 : static void SBMuscle_Del(GF_Node *node)
   28290             : {
   28291             :         M_SBMuscle *p = (M_SBMuscle *) node;
   28292           1 :         gf_node_unregister((GF_Node *) p->muscleCurve, (GF_Node *) p);
   28293           1 :         gf_sg_mfint32_del(p->skinCoordIndex);
   28294           1 :         gf_sg_mffloat_del(p->skinCoordWeight);
   28295           1 :         gf_node_free((GF_Node *) p);
   28296           1 : }
   28297             : 
   28298             : static const u16 SBMuscle_Def2All[] = { 0, 1, 2, 3, 4, 5};
   28299             : static const u16 SBMuscle_In2All[] = { 0, 1, 2, 3, 4, 5};
   28300             : static const u16 SBMuscle_Out2All[] = { 0, 1, 2, 3, 4, 5};
   28301             : static const u16 SBMuscle_Dyn2All[] = { 3};
   28302             : 
   28303             : static u32 SBMuscle_get_field_count(GF_Node *node, u8 IndexMode)
   28304             : {
   28305           6 :         switch(IndexMode) {
   28306             :         case GF_SG_FIELD_CODING_IN:
   28307             :                 return 6;
   28308             :         case GF_SG_FIELD_CODING_DEF:
   28309             :                 return 6;
   28310             :         case GF_SG_FIELD_CODING_OUT:
   28311             :                 return 6;
   28312           1 :         case GF_SG_FIELD_CODING_DYN:
   28313             :                 return 1;
   28314             :         default:
   28315             :                 return 6;
   28316             :         }
   28317             : }
   28318             : 
   28319             : static GF_Err SBMuscle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28320             : {
   28321           6 :         switch(IndexMode) {
   28322           0 :         case GF_SG_FIELD_CODING_IN:
   28323           0 :                 *allField = SBMuscle_In2All[inField];
   28324             :                 return GF_OK;
   28325           0 :         case GF_SG_FIELD_CODING_DEF:
   28326           0 :                 *allField = SBMuscle_Def2All[inField];
   28327             :                 return GF_OK;
   28328           0 :         case GF_SG_FIELD_CODING_OUT:
   28329           0 :                 *allField = SBMuscle_Out2All[inField];
   28330             :                 return GF_OK;
   28331           0 :         case GF_SG_FIELD_CODING_DYN:
   28332           0 :                 *allField = SBMuscle_Dyn2All[inField];
   28333             :                 return GF_OK;
   28334             :         default:
   28335             :                 return GF_BAD_PARAM;
   28336             :         }
   28337             : }
   28338          12 : static GF_Err SBMuscle_get_field(GF_Node *node, GF_FieldInfo *info)
   28339             : {
   28340          12 :         switch (info->fieldIndex) {
   28341           2 :         case 0:
   28342           2 :                 info->name = "falloff";
   28343           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28344           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28345           2 :                 info->far_ptr = & ((M_SBMuscle *) node)->falloff;
   28346           2 :                 return GF_OK;
   28347           2 :         case 1:
   28348           2 :                 info->name = "muscleCurve";
   28349           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28350           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28351           2 :                 info->NDTtype = NDT_SFGeometryNode;
   28352           2 :                 info->far_ptr = & ((M_SBMuscle *)node)->muscleCurve;
   28353           2 :                 return GF_OK;
   28354           2 :         case 2:
   28355           2 :                 info->name = "muscleID";
   28356           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28357           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28358           2 :                 info->far_ptr = & ((M_SBMuscle *) node)->muscleID;
   28359           2 :                 return GF_OK;
   28360           2 :         case 3:
   28361           2 :                 info->name = "radius";
   28362           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28363           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   28364           2 :                 info->far_ptr = & ((M_SBMuscle *) node)->radius;
   28365           2 :                 return GF_OK;
   28366           2 :         case 4:
   28367           2 :                 info->name = "skinCoordIndex";
   28368           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28369           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   28370           2 :                 info->far_ptr = & ((M_SBMuscle *) node)->skinCoordIndex;
   28371           2 :                 return GF_OK;
   28372           2 :         case 5:
   28373           2 :                 info->name = "skinCoordWeight";
   28374           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28375           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   28376           2 :                 info->far_ptr = & ((M_SBMuscle *) node)->skinCoordWeight;
   28377           2 :                 return GF_OK;
   28378             :         default:
   28379             :                 return GF_BAD_PARAM;
   28380             :         }
   28381             : }
   28382             : 
   28383             : 
   28384           6 : static s32 SBMuscle_get_field_index_by_name(char *name)
   28385             : {
   28386           6 :         if (!strcmp("falloff", name)) return 0;
   28387           5 :         if (!strcmp("muscleCurve", name)) return 1;
   28388           4 :         if (!strcmp("muscleID", name)) return 2;
   28389           3 :         if (!strcmp("radius", name)) return 3;
   28390           2 :         if (!strcmp("skinCoordIndex", name)) return 4;
   28391           1 :         if (!strcmp("skinCoordWeight", name)) return 5;
   28392           0 :         return -1;
   28393             : }
   28394             : static Bool SBMuscle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28395             : {
   28396           6 :         switch (FieldIndex) {
   28397           1 :         case 0:
   28398           1 :                 *AType = 0;
   28399           1 :                 *QType = 13;
   28400           1 :                 *QT13_bits = 3;
   28401           1 :                 *b_min = FLT2FIX(-1);
   28402           1 :                 *b_max = FLT2FIX(4);
   28403             :                 return 1;
   28404           1 :         case 2:
   28405           1 :                 *AType = 0;
   28406           1 :                 *QType = 13;
   28407           1 :                 *QT13_bits = 10;
   28408           1 :                 *b_min = FLT2FIX(0);
   28409           1 :                 *b_max = FLT2FIX(1023);
   28410             :                 return 1;
   28411           1 :         case 3:
   28412           1 :                 *AType = 11;
   28413           1 :                 *QType = 7;
   28414             :                 return 1;
   28415           1 :         case 4:
   28416           1 :                 *AType = 0;
   28417           1 :                 *QType = 14;
   28418           1 :                 *b_min = FLT2FIX(0);
   28419           1 :                 *b_max = FIX_MAX;
   28420             :                 return 1;
   28421             :         default:
   28422             :                 return 0;
   28423             :         }
   28424             : }
   28425             : 
   28426             : 
   28427             : 
   28428           1 : GF_Node *SBMuscle_Create()
   28429             : {
   28430             :         M_SBMuscle *p;
   28431           1 :         GF_SAFEALLOC(p, M_SBMuscle);
   28432           1 :         if(!p) return NULL;
   28433           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBMuscle);
   28434             : 
   28435             :         /*default field values*/
   28436           1 :         p->falloff = 1;
   28437           1 :         p->muscleID = 0;
   28438           1 :         p->radius = 1;
   28439           1 :         return (GF_Node *)p;
   28440             : }
   28441             : 
   28442             : 
   28443             : /*
   28444             :         SBSegment Node deletion
   28445             : */
   28446             : 
   28447           1 : static void SBSegment_Del(GF_Node *node)
   28448             : {
   28449             :         M_SBSegment *p = (M_SBSegment *) node;
   28450           1 :         gf_sg_mfvec3f_del(p->momentsOfInertia);
   28451           1 :         gf_sg_sfstring_del(p->name);
   28452           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   28453           1 :         gf_node_free((GF_Node *) p);
   28454           1 : }
   28455             : 
   28456             : static const u16 SBSegment_Def2All[] = { 2, 3, 4, 5, 6};
   28457             : static const u16 SBSegment_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   28458             : static const u16 SBSegment_Out2All[] = { 2, 3, 4, 5, 6};
   28459             : static const u16 SBSegment_Dyn2All[] = { 2};
   28460             : 
   28461             : static u32 SBSegment_get_field_count(GF_Node *node, u8 IndexMode)
   28462             : {
   28463             :         switch(IndexMode) {
   28464             :         case GF_SG_FIELD_CODING_IN:
   28465             :                 return 7;
   28466             :         case GF_SG_FIELD_CODING_DEF:
   28467             :                 return 5;
   28468             :         case GF_SG_FIELD_CODING_OUT:
   28469             :                 return 5;
   28470             :         case GF_SG_FIELD_CODING_DYN:
   28471             :                 return 1;
   28472             :         default:
   28473             :                 return 7;
   28474             :         }
   28475             : }
   28476             : 
   28477             : static GF_Err SBSegment_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28478             : {
   28479           7 :         switch(IndexMode) {
   28480           0 :         case GF_SG_FIELD_CODING_IN:
   28481           0 :                 *allField = SBSegment_In2All[inField];
   28482             :                 return GF_OK;
   28483           0 :         case GF_SG_FIELD_CODING_DEF:
   28484           0 :                 *allField = SBSegment_Def2All[inField];
   28485             :                 return GF_OK;
   28486           0 :         case GF_SG_FIELD_CODING_OUT:
   28487           0 :                 *allField = SBSegment_Out2All[inField];
   28488             :                 return GF_OK;
   28489           0 :         case GF_SG_FIELD_CODING_DYN:
   28490           0 :                 *allField = SBSegment_Dyn2All[inField];
   28491             :                 return GF_OK;
   28492             :         default:
   28493             :                 return GF_BAD_PARAM;
   28494             :         }
   28495             : }
   28496          14 : static GF_Err SBSegment_get_field(GF_Node *node, GF_FieldInfo *info)
   28497             : {
   28498          14 :         switch (info->fieldIndex) {
   28499           2 :         case 0:
   28500           2 :                 info->name = "addChildren";
   28501           2 :                 info->eventType = GF_SG_EVENT_IN;
   28502           2 :                 info->on_event_in = ((M_SBSegment *)node)->on_addChildren;
   28503           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28504           2 :                 info->NDTtype = NDT_SF3DNode;
   28505           2 :                 info->far_ptr = & ((M_SBSegment *)node)->addChildren;
   28506           2 :                 return GF_OK;
   28507           2 :         case 1:
   28508           2 :                 info->name = "removeChildren";
   28509           2 :                 info->eventType = GF_SG_EVENT_IN;
   28510           2 :                 info->on_event_in = ((M_SBSegment *)node)->on_removeChildren;
   28511           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28512           2 :                 info->NDTtype = NDT_SF3DNode;
   28513           2 :                 info->far_ptr = & ((M_SBSegment *)node)->removeChildren;
   28514           2 :                 return GF_OK;
   28515           2 :         case 2:
   28516           2 :                 info->name = "centerOfMass";
   28517           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28518           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28519           2 :                 info->far_ptr = & ((M_SBSegment *) node)->centerOfMass;
   28520           2 :                 return GF_OK;
   28521           2 :         case 3:
   28522           2 :                 info->name = "children";
   28523           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28524           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28525           2 :                 info->NDTtype = NDT_SF3DNode;
   28526           2 :                 info->far_ptr = & ((M_SBSegment *)node)->children;
   28527           2 :                 return GF_OK;
   28528           2 :         case 4:
   28529           2 :                 info->name = "mass";
   28530           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28531           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   28532           2 :                 info->far_ptr = & ((M_SBSegment *) node)->mass;
   28533           2 :                 return GF_OK;
   28534           2 :         case 5:
   28535           2 :                 info->name = "momentsOfInertia";
   28536           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28537           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   28538           2 :                 info->far_ptr = & ((M_SBSegment *) node)->momentsOfInertia;
   28539           2 :                 return GF_OK;
   28540           2 :         case 6:
   28541           2 :                 info->name = "name";
   28542           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28543           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   28544           2 :                 info->far_ptr = & ((M_SBSegment *) node)->name;
   28545           2 :                 return GF_OK;
   28546             :         default:
   28547             :                 return GF_BAD_PARAM;
   28548             :         }
   28549             : }
   28550             : 
   28551             : 
   28552           7 : static s32 SBSegment_get_field_index_by_name(char *name)
   28553             : {
   28554           7 :         if (!strcmp("addChildren", name)) return 0;
   28555           6 :         if (!strcmp("removeChildren", name)) return 1;
   28556           5 :         if (!strcmp("centerOfMass", name)) return 2;
   28557           4 :         if (!strcmp("children", name)) return 3;
   28558           3 :         if (!strcmp("mass", name)) return 4;
   28559           2 :         if (!strcmp("momentsOfInertia", name)) return 5;
   28560           1 :         if (!strcmp("name", name)) return 6;
   28561           0 :         return -1;
   28562             : }
   28563             : static Bool SBSegment_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28564             : {
   28565           7 :         switch (FieldIndex) {
   28566           1 :         case 2:
   28567           1 :                 *AType = 1;
   28568           1 :                 *QType = 1;
   28569             :                 return 1;
   28570             :         default:
   28571             :                 return 0;
   28572             :         }
   28573             : }
   28574             : 
   28575             : 
   28576             : 
   28577           1 : GF_Node *SBSegment_Create()
   28578             : {
   28579             :         M_SBSegment *p;
   28580           1 :         GF_SAFEALLOC(p, M_SBSegment);
   28581           1 :         if(!p) return NULL;
   28582           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBSegment);
   28583           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   28584             : 
   28585             :         /*default field values*/
   28586           1 :         p->centerOfMass.x = FLT2FIX(0);
   28587           1 :         p->centerOfMass.y = FLT2FIX(0);
   28588           1 :         p->centerOfMass.z = FLT2FIX(0);
   28589           1 :         p->mass = FLT2FIX(0);
   28590           1 :         p->momentsOfInertia.vals = (SFVec3f *)gf_malloc(sizeof(SFVec3f)*3);
   28591           1 :         p->momentsOfInertia.count = 3;
   28592           1 :         p->momentsOfInertia.vals[0].x = FLT2FIX(0);
   28593           1 :         p->momentsOfInertia.vals[0].y = FLT2FIX(0);
   28594           1 :         p->momentsOfInertia.vals[0].z = FLT2FIX(0);
   28595           1 :         p->momentsOfInertia.vals[1].x = FLT2FIX(0);
   28596           1 :         p->momentsOfInertia.vals[1].y = FLT2FIX(0);
   28597           1 :         p->momentsOfInertia.vals[1].z = FLT2FIX(0);
   28598           1 :         p->momentsOfInertia.vals[2].x = FLT2FIX(0);
   28599           1 :         p->momentsOfInertia.vals[2].y = FLT2FIX(0);
   28600           1 :         p->momentsOfInertia.vals[2].z = FLT2FIX(0);
   28601           1 :         return (GF_Node *)p;
   28602             : }
   28603             : 
   28604             : 
   28605             : /*
   28606             :         SBSite Node deletion
   28607             : */
   28608             : 
   28609           1 : static void SBSite_Del(GF_Node *node)
   28610             : {
   28611             :         M_SBSite *p = (M_SBSite *) node;
   28612           1 :         gf_sg_sfstring_del(p->name);
   28613           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   28614           1 :         gf_node_free((GF_Node *) p);
   28615           1 : }
   28616             : 
   28617             : static const u16 SBSite_Def2All[] = { 2, 3, 4, 5, 6, 7, 8};
   28618             : static const u16 SBSite_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   28619             : static const u16 SBSite_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
   28620             : static const u16 SBSite_Dyn2All[] = { 2, 5, 6, 7, 8};
   28621             : 
   28622             : static u32 SBSite_get_field_count(GF_Node *node, u8 IndexMode)
   28623             : {
   28624             :         switch(IndexMode) {
   28625             :         case GF_SG_FIELD_CODING_IN:
   28626             :                 return 9;
   28627             :         case GF_SG_FIELD_CODING_DEF:
   28628             :                 return 7;
   28629             :         case GF_SG_FIELD_CODING_OUT:
   28630             :                 return 7;
   28631             :         case GF_SG_FIELD_CODING_DYN:
   28632             :                 return 5;
   28633             :         default:
   28634             :                 return 9;
   28635             :         }
   28636             : }
   28637             : 
   28638             : static GF_Err SBSite_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28639             : {
   28640           9 :         switch(IndexMode) {
   28641           0 :         case GF_SG_FIELD_CODING_IN:
   28642           0 :                 *allField = SBSite_In2All[inField];
   28643             :                 return GF_OK;
   28644           0 :         case GF_SG_FIELD_CODING_DEF:
   28645           0 :                 *allField = SBSite_Def2All[inField];
   28646             :                 return GF_OK;
   28647           0 :         case GF_SG_FIELD_CODING_OUT:
   28648           0 :                 *allField = SBSite_Out2All[inField];
   28649             :                 return GF_OK;
   28650           0 :         case GF_SG_FIELD_CODING_DYN:
   28651           0 :                 *allField = SBSite_Dyn2All[inField];
   28652             :                 return GF_OK;
   28653             :         default:
   28654             :                 return GF_BAD_PARAM;
   28655             :         }
   28656             : }
   28657          18 : static GF_Err SBSite_get_field(GF_Node *node, GF_FieldInfo *info)
   28658             : {
   28659          18 :         switch (info->fieldIndex) {
   28660           2 :         case 0:
   28661           2 :                 info->name = "addChildren";
   28662           2 :                 info->eventType = GF_SG_EVENT_IN;
   28663           2 :                 info->on_event_in = ((M_SBSite *)node)->on_addChildren;
   28664           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28665           2 :                 info->NDTtype = NDT_SF3DNode;
   28666           2 :                 info->far_ptr = & ((M_SBSite *)node)->addChildren;
   28667           2 :                 return GF_OK;
   28668           2 :         case 1:
   28669           2 :                 info->name = "removeChildren";
   28670           2 :                 info->eventType = GF_SG_EVENT_IN;
   28671           2 :                 info->on_event_in = ((M_SBSite *)node)->on_removeChildren;
   28672           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28673           2 :                 info->NDTtype = NDT_SF3DNode;
   28674           2 :                 info->far_ptr = & ((M_SBSite *)node)->removeChildren;
   28675           2 :                 return GF_OK;
   28676           2 :         case 2:
   28677           2 :                 info->name = "center";
   28678           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28679           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28680           2 :                 info->far_ptr = & ((M_SBSite *) node)->center;
   28681           2 :                 return GF_OK;
   28682           2 :         case 3:
   28683           2 :                 info->name = "children";
   28684           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28685           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28686           2 :                 info->NDTtype = NDT_SF3DNode;
   28687           2 :                 info->far_ptr = & ((M_SBSite *)node)->children;
   28688           2 :                 return GF_OK;
   28689           2 :         case 4:
   28690           2 :                 info->name = "name";
   28691           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28692           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   28693           2 :                 info->far_ptr = & ((M_SBSite *) node)->name;
   28694           2 :                 return GF_OK;
   28695           2 :         case 5:
   28696           2 :                 info->name = "rotation";
   28697           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28698           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28699           2 :                 info->far_ptr = & ((M_SBSite *) node)->rotation;
   28700           2 :                 return GF_OK;
   28701           2 :         case 6:
   28702           2 :                 info->name = "scale";
   28703           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28704           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28705           2 :                 info->far_ptr = & ((M_SBSite *) node)->scale;
   28706           2 :                 return GF_OK;
   28707           2 :         case 7:
   28708           2 :                 info->name = "scaleOrientation";
   28709           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28710           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28711           2 :                 info->far_ptr = & ((M_SBSite *) node)->scaleOrientation;
   28712           2 :                 return GF_OK;
   28713           2 :         case 8:
   28714           2 :                 info->name = "translation";
   28715           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28716           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28717           2 :                 info->far_ptr = & ((M_SBSite *) node)->translation;
   28718           2 :                 return GF_OK;
   28719             :         default:
   28720             :                 return GF_BAD_PARAM;
   28721             :         }
   28722             : }
   28723             : 
   28724             : 
   28725           9 : static s32 SBSite_get_field_index_by_name(char *name)
   28726             : {
   28727           9 :         if (!strcmp("addChildren", name)) return 0;
   28728           8 :         if (!strcmp("removeChildren", name)) return 1;
   28729           7 :         if (!strcmp("center", name)) return 2;
   28730           6 :         if (!strcmp("children", name)) return 3;
   28731           5 :         if (!strcmp("name", name)) return 4;
   28732           4 :         if (!strcmp("rotation", name)) return 5;
   28733           3 :         if (!strcmp("scale", name)) return 6;
   28734           2 :         if (!strcmp("scaleOrientation", name)) return 7;
   28735           1 :         if (!strcmp("translation", name)) return 8;
   28736           0 :         return -1;
   28737             : }
   28738             : static Bool SBSite_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28739             : {
   28740           9 :         switch (FieldIndex) {
   28741           1 :         case 2:
   28742           1 :                 *AType = 1;
   28743           1 :                 *QType = 1;
   28744             :                 return 1;
   28745           1 :         case 5:
   28746           1 :                 *AType = 10;
   28747           1 :                 *QType = 10;
   28748             :                 return 1;
   28749           1 :         case 6:
   28750           1 :                 *AType = 11;
   28751           1 :                 *QType = 7;
   28752             :                 return 1;
   28753           1 :         case 7:
   28754           1 :                 *AType = 10;
   28755           1 :                 *QType = 10;
   28756             :                 return 1;
   28757           1 :         case 8:
   28758           1 :                 *AType = 1;
   28759           1 :                 *QType = 1;
   28760             :                 return 1;
   28761             :         default:
   28762             :                 return 0;
   28763             :         }
   28764             : }
   28765             : 
   28766             : 
   28767             : 
   28768           1 : GF_Node *SBSite_Create()
   28769             : {
   28770             :         M_SBSite *p;
   28771           1 :         GF_SAFEALLOC(p, M_SBSite);
   28772           1 :         if(!p) return NULL;
   28773           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBSite);
   28774           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   28775             : 
   28776             :         /*default field values*/
   28777           1 :         p->center.x = FLT2FIX(0);
   28778           1 :         p->center.y = FLT2FIX(0);
   28779           1 :         p->center.z = FLT2FIX(0);
   28780           1 :         p->rotation.x = FLT2FIX(0);
   28781           1 :         p->rotation.y = FLT2FIX(0);
   28782           1 :         p->rotation.z = FLT2FIX(1);
   28783           1 :         p->rotation.q = FLT2FIX(0);
   28784           1 :         p->scale.x = FLT2FIX(1);
   28785           1 :         p->scale.y = FLT2FIX(1);
   28786           1 :         p->scale.z = FLT2FIX(1);
   28787           1 :         p->scaleOrientation.x = FLT2FIX(0);
   28788           1 :         p->scaleOrientation.y = FLT2FIX(0);
   28789           1 :         p->scaleOrientation.z = FLT2FIX(1);
   28790           1 :         p->scaleOrientation.q = FLT2FIX(0);
   28791           1 :         p->translation.x = FLT2FIX(0);
   28792           1 :         p->translation.y = FLT2FIX(0);
   28793           1 :         p->translation.z = FLT2FIX(0);
   28794           1 :         return (GF_Node *)p;
   28795             : }
   28796             : 
   28797             : 
   28798             : /*
   28799             :         SBSkinnedModel Node deletion
   28800             : */
   28801             : 
   28802           1 : static void SBSkinnedModel_Del(GF_Node *node)
   28803             : {
   28804             :         M_SBSkinnedModel *p = (M_SBSkinnedModel *) node;
   28805           1 :         gf_node_unregister_children((GF_Node *) p, p->bones);
   28806           1 :         gf_node_unregister_children((GF_Node *) p, p->muscles);
   28807           1 :         gf_sg_sfstring_del(p->name);
   28808           1 :         gf_node_unregister_children((GF_Node *) p, p->segments);
   28809           1 :         gf_node_unregister_children((GF_Node *) p, p->sites);
   28810           1 :         gf_node_unregister_children((GF_Node *) p, p->skeleton);
   28811           1 :         gf_node_unregister_children((GF_Node *) p, p->skin);
   28812           1 :         gf_node_unregister((GF_Node *) p->skinCoord, (GF_Node *) p);
   28813           1 :         gf_node_unregister((GF_Node *) p->skinNormal, (GF_Node *) p);
   28814           1 :         gf_node_unregister((GF_Node *) p->weighsComputationSkinCoord, (GF_Node *) p);
   28815           1 :         gf_node_free((GF_Node *) p);
   28816           1 : }
   28817             : 
   28818             : static const u16 SBSkinnedModel_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   28819             : static const u16 SBSkinnedModel_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   28820             : static const u16 SBSkinnedModel_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   28821             : static const u16 SBSkinnedModel_Dyn2All[] = { 1, 4, 6, 7, 13};
   28822             : 
   28823             : static u32 SBSkinnedModel_get_field_count(GF_Node *node, u8 IndexMode)
   28824             : {
   28825           6 :         switch(IndexMode) {
   28826             :         case GF_SG_FIELD_CODING_IN:
   28827             :                 return 15;
   28828             :         case GF_SG_FIELD_CODING_DEF:
   28829             :                 return 15;
   28830             :         case GF_SG_FIELD_CODING_OUT:
   28831             :                 return 15;
   28832           1 :         case GF_SG_FIELD_CODING_DYN:
   28833             :                 return 5;
   28834             :         default:
   28835             :                 return 15;
   28836             :         }
   28837             : }
   28838             : 
   28839             : static GF_Err SBSkinnedModel_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   28840             : {
   28841          15 :         switch(IndexMode) {
   28842           0 :         case GF_SG_FIELD_CODING_IN:
   28843           0 :                 *allField = SBSkinnedModel_In2All[inField];
   28844             :                 return GF_OK;
   28845           0 :         case GF_SG_FIELD_CODING_DEF:
   28846           0 :                 *allField = SBSkinnedModel_Def2All[inField];
   28847             :                 return GF_OK;
   28848           0 :         case GF_SG_FIELD_CODING_OUT:
   28849           0 :                 *allField = SBSkinnedModel_Out2All[inField];
   28850             :                 return GF_OK;
   28851           0 :         case GF_SG_FIELD_CODING_DYN:
   28852           0 :                 *allField = SBSkinnedModel_Dyn2All[inField];
   28853             :                 return GF_OK;
   28854             :         default:
   28855             :                 return GF_BAD_PARAM;
   28856             :         }
   28857             : }
   28858          30 : static GF_Err SBSkinnedModel_get_field(GF_Node *node, GF_FieldInfo *info)
   28859             : {
   28860          30 :         switch (info->fieldIndex) {
   28861           2 :         case 0:
   28862           2 :                 info->name = "bones";
   28863           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28864           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28865           2 :                 info->NDTtype = NDT_SFSBBoneNode;
   28866           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->bones;
   28867           2 :                 return GF_OK;
   28868           2 :         case 1:
   28869           2 :                 info->name = "center";
   28870           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28871           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28872           2 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->center;
   28873           2 :                 return GF_OK;
   28874           2 :         case 2:
   28875           2 :                 info->name = "muscles";
   28876           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28877           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28878           2 :                 info->NDTtype = NDT_SFSBMuscleNode;
   28879           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->muscles;
   28880           2 :                 return GF_OK;
   28881           2 :         case 3:
   28882           2 :                 info->name = "name";
   28883           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28884           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   28885           2 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->name;
   28886           2 :                 return GF_OK;
   28887           2 :         case 4:
   28888           2 :                 info->name = "rotation";
   28889           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28890           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28891           2 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->rotation;
   28892           2 :                 return GF_OK;
   28893           2 :         case 5:
   28894           2 :                 info->name = "segments";
   28895           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28896           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28897           2 :                 info->NDTtype = NDT_SFSBSegmentNode;
   28898           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->segments;
   28899           2 :                 return GF_OK;
   28900           2 :         case 6:
   28901           2 :                 info->name = "scale";
   28902           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28903           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28904           2 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->scale;
   28905           2 :                 return GF_OK;
   28906           2 :         case 7:
   28907           2 :                 info->name = "scaleOrientation";
   28908           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28909           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   28910           2 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->scaleOrientation;
   28911           2 :                 return GF_OK;
   28912           2 :         case 8:
   28913           2 :                 info->name = "sites";
   28914           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28915           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28916           2 :                 info->NDTtype = NDT_SFSBSiteNode;
   28917           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->sites;
   28918           2 :                 return GF_OK;
   28919           2 :         case 9:
   28920           2 :                 info->name = "skeleton";
   28921           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28922           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28923           2 :                 info->NDTtype = NDT_SF3DNode;
   28924           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skeleton;
   28925           2 :                 return GF_OK;
   28926           2 :         case 10:
   28927           2 :                 info->name = "skin";
   28928           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28929           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   28930           2 :                 info->NDTtype = NDT_SF3DNode;
   28931           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skin;
   28932           2 :                 return GF_OK;
   28933           2 :         case 11:
   28934           2 :                 info->name = "skinCoord";
   28935           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28936           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28937           2 :                 info->NDTtype = NDT_SFCoordinateNode;
   28938           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skinCoord;
   28939           2 :                 return GF_OK;
   28940           2 :         case 12:
   28941           2 :                 info->name = "skinNormal";
   28942           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28943           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28944           2 :                 info->NDTtype = NDT_SFNormalNode;
   28945           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->skinNormal;
   28946           2 :                 return GF_OK;
   28947           2 :         case 13:
   28948           2 :                 info->name = "translation";
   28949           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28950           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   28951           2 :                 info->far_ptr = & ((M_SBSkinnedModel *) node)->translation;
   28952           2 :                 return GF_OK;
   28953           2 :         case 14:
   28954           2 :                 info->name = "weighsComputationSkinCoord";
   28955           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   28956           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   28957           2 :                 info->NDTtype = NDT_SF3DNode;
   28958           2 :                 info->far_ptr = & ((M_SBSkinnedModel *)node)->weighsComputationSkinCoord;
   28959           2 :                 return GF_OK;
   28960             :         default:
   28961             :                 return GF_BAD_PARAM;
   28962             :         }
   28963             : }
   28964             : 
   28965             : 
   28966          15 : static s32 SBSkinnedModel_get_field_index_by_name(char *name)
   28967             : {
   28968          15 :         if (!strcmp("bones", name)) return 0;
   28969          14 :         if (!strcmp("center", name)) return 1;
   28970          13 :         if (!strcmp("muscles", name)) return 2;
   28971          12 :         if (!strcmp("name", name)) return 3;
   28972          11 :         if (!strcmp("rotation", name)) return 4;
   28973          10 :         if (!strcmp("segments", name)) return 5;
   28974           9 :         if (!strcmp("scale", name)) return 6;
   28975           8 :         if (!strcmp("scaleOrientation", name)) return 7;
   28976           7 :         if (!strcmp("sites", name)) return 8;
   28977           6 :         if (!strcmp("skeleton", name)) return 9;
   28978           5 :         if (!strcmp("skin", name)) return 10;
   28979           4 :         if (!strcmp("skinCoord", name)) return 11;
   28980           3 :         if (!strcmp("skinNormal", name)) return 12;
   28981           2 :         if (!strcmp("translation", name)) return 13;
   28982           1 :         if (!strcmp("weighsComputationSkinCoord", name)) return 14;
   28983           0 :         return -1;
   28984             : }
   28985             : static Bool SBSkinnedModel_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   28986             : {
   28987          15 :         switch (FieldIndex) {
   28988           1 :         case 1:
   28989           1 :                 *AType = 1;
   28990           1 :                 *QType = 1;
   28991             :                 return 1;
   28992           1 :         case 4:
   28993           1 :                 *AType = 10;
   28994           1 :                 *QType = 10;
   28995             :                 return 1;
   28996           1 :         case 6:
   28997           1 :                 *AType = 11;
   28998           1 :                 *QType = 7;
   28999             :                 return 1;
   29000           1 :         case 7:
   29001           1 :                 *AType = 10;
   29002           1 :                 *QType = 10;
   29003             :                 return 1;
   29004           1 :         case 13:
   29005           1 :                 *AType = 1;
   29006           1 :                 *QType = 1;
   29007             :                 return 1;
   29008             :         default:
   29009             :                 return 0;
   29010             :         }
   29011             : }
   29012             : 
   29013             : 
   29014             : 
   29015           1 : GF_Node *SBSkinnedModel_Create()
   29016             : {
   29017             :         M_SBSkinnedModel *p;
   29018           1 :         GF_SAFEALLOC(p, M_SBSkinnedModel);
   29019           1 :         if(!p) return NULL;
   29020           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBSkinnedModel);
   29021             : 
   29022             :         /*default field values*/
   29023           1 :         p->center.x = FLT2FIX(0);
   29024           1 :         p->center.y = FLT2FIX(0);
   29025           1 :         p->center.z = FLT2FIX(0);
   29026           1 :         p->rotation.x = FLT2FIX(0);
   29027           1 :         p->rotation.y = FLT2FIX(0);
   29028           1 :         p->rotation.z = FLT2FIX(1);
   29029           1 :         p->rotation.q = FLT2FIX(0);
   29030           1 :         p->scale.x = FLT2FIX(1);
   29031           1 :         p->scale.y = FLT2FIX(1);
   29032           1 :         p->scale.z = FLT2FIX(1);
   29033           1 :         p->scaleOrientation.x = FLT2FIX(0);
   29034           1 :         p->scaleOrientation.y = FLT2FIX(0);
   29035           1 :         p->scaleOrientation.z = FLT2FIX(1);
   29036           1 :         p->scaleOrientation.q = FLT2FIX(0);
   29037           1 :         p->translation.x = FLT2FIX(0);
   29038           1 :         p->translation.y = FLT2FIX(0);
   29039           1 :         p->translation.z = FLT2FIX(0);
   29040           1 :         return (GF_Node *)p;
   29041             : }
   29042             : 
   29043             : 
   29044             : /*
   29045             :         SBVCAnimation Node deletion
   29046             : */
   29047             : 
   29048           1 : static void SBVCAnimation_Del(GF_Node *node)
   29049             : {
   29050             :         M_SBVCAnimation *p = (M_SBVCAnimation *) node;
   29051           1 :         gf_sg_mfurl_del(p->url);
   29052           1 :         gf_node_unregister_children((GF_Node *) p, p->virtualCharacters);
   29053           1 :         gf_node_free((GF_Node *) p);
   29054           1 : }
   29055             : 
   29056             : static const u16 SBVCAnimation_Def2All[] = { 0, 1};
   29057             : static const u16 SBVCAnimation_In2All[] = { 0, 1};
   29058             : static const u16 SBVCAnimation_Out2All[] = { 0, 1};
   29059             : 
   29060             : static u32 SBVCAnimation_get_field_count(GF_Node *node, u8 IndexMode)
   29061             : {
   29062           6 :         switch(IndexMode) {
   29063             :         case GF_SG_FIELD_CODING_IN:
   29064             :                 return 2;
   29065             :         case GF_SG_FIELD_CODING_DEF:
   29066             :                 return 2;
   29067             :         case GF_SG_FIELD_CODING_OUT:
   29068             :                 return 2;
   29069           1 :         case GF_SG_FIELD_CODING_DYN:
   29070             :                 return 0;
   29071             :         default:
   29072             :                 return 2;
   29073             :         }
   29074             : }
   29075             : 
   29076             : static GF_Err SBVCAnimation_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29077             : {
   29078           2 :         switch(IndexMode) {
   29079           0 :         case GF_SG_FIELD_CODING_IN:
   29080           0 :                 *allField = SBVCAnimation_In2All[inField];
   29081             :                 return GF_OK;
   29082           0 :         case GF_SG_FIELD_CODING_DEF:
   29083           0 :                 *allField = SBVCAnimation_Def2All[inField];
   29084             :                 return GF_OK;
   29085           0 :         case GF_SG_FIELD_CODING_OUT:
   29086           0 :                 *allField = SBVCAnimation_Out2All[inField];
   29087             :                 return GF_OK;
   29088             :         default:
   29089             :                 return GF_BAD_PARAM;
   29090             :         }
   29091             : }
   29092             : static GF_Err SBVCAnimation_get_field(GF_Node *node, GF_FieldInfo *info)
   29093             : {
   29094           4 :         switch (info->fieldIndex) {
   29095           2 :         case 0:
   29096           2 :                 info->name = "url";
   29097           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29098           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   29099           2 :                 info->far_ptr = & ((M_SBVCAnimation *) node)->url;
   29100             :                 return GF_OK;
   29101           2 :         case 1:
   29102           2 :                 info->name = "virtualCharacters";
   29103           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29104           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   29105           2 :                 info->NDTtype = NDT_SF3DNode;
   29106           2 :                 info->far_ptr = & ((M_SBVCAnimation *)node)->virtualCharacters;
   29107             :                 return GF_OK;
   29108             :         default:
   29109             :                 return GF_BAD_PARAM;
   29110             :         }
   29111             : }
   29112             : 
   29113             : 
   29114           2 : static s32 SBVCAnimation_get_field_index_by_name(char *name)
   29115             : {
   29116           2 :         if (!strcmp("url", name)) return 0;
   29117           1 :         if (!strcmp("virtualCharacters", name)) return 1;
   29118           0 :         return -1;
   29119             : }
   29120             : static Bool SBVCAnimation_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29121             : {
   29122             :         switch (FieldIndex) {
   29123             :         default:
   29124             :                 return 0;
   29125             :         }
   29126             : }
   29127             : 
   29128             : 
   29129             : 
   29130           1 : GF_Node *SBVCAnimation_Create()
   29131             : {
   29132             :         M_SBVCAnimation *p;
   29133           1 :         GF_SAFEALLOC(p, M_SBVCAnimation);
   29134           1 :         if(!p) return NULL;
   29135           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBVCAnimation);
   29136             : 
   29137             :         /*default field values*/
   29138           1 :         return (GF_Node *)p;
   29139             : }
   29140             : 
   29141             : 
   29142             : /*
   29143             :         ScalarAnimator Node deletion
   29144             : */
   29145             : 
   29146           2 : static void ScalarAnimator_Del(GF_Node *node)
   29147             : {
   29148             :         M_ScalarAnimator *p = (M_ScalarAnimator *) node;
   29149           2 :         gf_sg_mffloat_del(p->key);
   29150           2 :         gf_sg_mfvec2f_del(p->keySpline);
   29151           2 :         gf_sg_mffloat_del(p->keyValue);
   29152           2 :         gf_sg_mffloat_del(p->weight);
   29153           2 :         gf_node_free((GF_Node *) p);
   29154           2 : }
   29155             : 
   29156             : static const u16 ScalarAnimator_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8};
   29157             : static const u16 ScalarAnimator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   29158             : static const u16 ScalarAnimator_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   29159             : 
   29160             : static u32 ScalarAnimator_get_field_count(GF_Node *node, u8 IndexMode)
   29161             : {
   29162             :         switch(IndexMode) {
   29163             :         case GF_SG_FIELD_CODING_IN:
   29164             :                 return 9;
   29165             :         case GF_SG_FIELD_CODING_DEF:
   29166             :                 return 8;
   29167             :         case GF_SG_FIELD_CODING_OUT:
   29168             :                 return 10;
   29169             :         case GF_SG_FIELD_CODING_DYN:
   29170             :                 return 0;
   29171             :         default:
   29172             :                 return 11;
   29173             :         }
   29174             : }
   29175             : 
   29176             : static GF_Err ScalarAnimator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29177             : {
   29178          11 :         switch(IndexMode) {
   29179           0 :         case GF_SG_FIELD_CODING_IN:
   29180           0 :                 *allField = ScalarAnimator_In2All[inField];
   29181             :                 return GF_OK;
   29182           0 :         case GF_SG_FIELD_CODING_DEF:
   29183           0 :                 *allField = ScalarAnimator_Def2All[inField];
   29184             :                 return GF_OK;
   29185           0 :         case GF_SG_FIELD_CODING_OUT:
   29186           0 :                 *allField = ScalarAnimator_Out2All[inField];
   29187             :                 return GF_OK;
   29188             :         default:
   29189             :                 return GF_BAD_PARAM;
   29190             :         }
   29191             : }
   29192          30 : static GF_Err ScalarAnimator_get_field(GF_Node *node, GF_FieldInfo *info)
   29193             : {
   29194          30 :         switch (info->fieldIndex) {
   29195           4 :         case 0:
   29196           4 :                 info->name = "set_fraction";
   29197           4 :                 info->eventType = GF_SG_EVENT_IN;
   29198           4 :                 info->on_event_in = ((M_ScalarAnimator *)node)->on_set_fraction;
   29199           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29200           4 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->set_fraction;
   29201           4 :                 return GF_OK;
   29202           2 :         case 1:
   29203           2 :                 info->name = "fromTo";
   29204           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29205           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   29206           2 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->fromTo;
   29207           2 :                 return GF_OK;
   29208           2 :         case 2:
   29209           2 :                 info->name = "key";
   29210           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29211           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   29212           2 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->key;
   29213           2 :                 return GF_OK;
   29214           3 :         case 3:
   29215           3 :                 info->name = "keyType";
   29216           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29217           3 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29218           3 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keyType;
   29219           3 :                 return GF_OK;
   29220           3 :         case 4:
   29221           3 :                 info->name = "keySpline";
   29222           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29223           3 :                 info->fieldType = GF_SG_VRML_MFVEC2F;
   29224           3 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keySpline;
   29225           3 :                 return GF_OK;
   29226           3 :         case 5:
   29227           3 :                 info->name = "keyValue";
   29228           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29229           3 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   29230           3 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keyValue;
   29231           3 :                 return GF_OK;
   29232           3 :         case 6:
   29233           3 :                 info->name = "keyValueType";
   29234           3 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29235           3 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29236           3 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->keyValueType;
   29237           3 :                 return GF_OK;
   29238           2 :         case 7:
   29239           2 :                 info->name = "offset";
   29240           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29241           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29242           2 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->offset;
   29243           2 :                 return GF_OK;
   29244           2 :         case 8:
   29245           2 :                 info->name = "weight";
   29246           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29247           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   29248           2 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->weight;
   29249           2 :                 return GF_OK;
   29250           2 :         case 9:
   29251           2 :                 info->name = "endValue";
   29252           2 :                 info->eventType = GF_SG_EVENT_OUT;
   29253           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29254           2 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->endValue;
   29255           2 :                 return GF_OK;
   29256           4 :         case 10:
   29257           4 :                 info->name = "value_changed";
   29258           4 :                 info->eventType = GF_SG_EVENT_OUT;
   29259           4 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29260           4 :                 info->far_ptr = & ((M_ScalarAnimator *) node)->value_changed;
   29261           4 :                 return GF_OK;
   29262             :         default:
   29263             :                 return GF_BAD_PARAM;
   29264             :         }
   29265             : }
   29266             : 
   29267             : 
   29268          17 : static s32 ScalarAnimator_get_field_index_by_name(char *name)
   29269             : {
   29270          17 :         if (!strcmp("set_fraction", name)) return 0;
   29271          15 :         if (!strcmp("fromTo", name)) return 1;
   29272          14 :         if (!strcmp("key", name)) return 2;
   29273          13 :         if (!strcmp("keyType", name)) return 3;
   29274          11 :         if (!strcmp("keySpline", name)) return 4;
   29275           9 :         if (!strcmp("keyValue", name)) return 5;
   29276           7 :         if (!strcmp("keyValueType", name)) return 6;
   29277           5 :         if (!strcmp("offset", name)) return 7;
   29278           4 :         if (!strcmp("weight", name)) return 8;
   29279           3 :         if (!strcmp("endValue", name)) return 9;
   29280           2 :         if (!strcmp("value_changed", name)) return 10;
   29281           0 :         return -1;
   29282             : }
   29283             : static Bool ScalarAnimator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29284             : {
   29285          11 :         switch (FieldIndex) {
   29286           1 :         case 1:
   29287           1 :                 *AType = 0;
   29288           1 :                 *QType = 8;
   29289             :                 return 1;
   29290           1 :         case 2:
   29291           1 :                 *AType = 0;
   29292           1 :                 *QType = 8;
   29293             :                 return 1;
   29294           1 :         case 4:
   29295           1 :                 *AType = 0;
   29296           1 :                 *QType = 8;
   29297             :                 return 1;
   29298           1 :         case 5:
   29299           1 :                 *AType = 0;
   29300           1 :                 *QType = 0;
   29301             :                 return 1;
   29302             :         default:
   29303             :                 return 0;
   29304             :         }
   29305             : }
   29306             : 
   29307             : 
   29308             : 
   29309           2 : GF_Node *ScalarAnimator_Create()
   29310             : {
   29311             :         M_ScalarAnimator *p;
   29312           2 :         GF_SAFEALLOC(p, M_ScalarAnimator);
   29313           2 :         if(!p) return NULL;
   29314           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ScalarAnimator);
   29315             : 
   29316             :         /*default field values*/
   29317           2 :         p->fromTo.x = FLT2FIX(0);
   29318           2 :         p->fromTo.y = FLT2FIX(1);
   29319           2 :         p->keyType = 0;
   29320           2 :         p->keySpline.vals = (SFVec2f*)gf_malloc(sizeof(SFVec2f)*2);
   29321           2 :         p->keySpline.count = 2;
   29322           2 :         p->keySpline.vals[0].x = FLT2FIX(0);
   29323           2 :         p->keySpline.vals[0].y = FLT2FIX(0);
   29324           2 :         p->keySpline.vals[1].x = FLT2FIX(1);
   29325           2 :         p->keySpline.vals[1].y = FLT2FIX(1);
   29326           2 :         p->keyValueType = 0;
   29327           2 :         p->offset = FLT2FIX(0);
   29328           2 :         return (GF_Node *)p;
   29329             : }
   29330             : 
   29331             : 
   29332             : /*
   29333             :         SimpleTexture Node deletion
   29334             : */
   29335             : 
   29336           1 : static void SimpleTexture_Del(GF_Node *node)
   29337             : {
   29338             :         M_SimpleTexture *p = (M_SimpleTexture *) node;
   29339           1 :         gf_node_unregister((GF_Node *) p->depth, (GF_Node *) p);
   29340           1 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
   29341           1 :         gf_node_free((GF_Node *) p);
   29342           1 : }
   29343             : 
   29344             : static const u16 SimpleTexture_Def2All[] = { 0, 1};
   29345             : 
   29346             : static u32 SimpleTexture_get_field_count(GF_Node *node, u8 IndexMode)
   29347             : {
   29348           6 :         switch(IndexMode) {
   29349             :         case GF_SG_FIELD_CODING_IN:
   29350             :                 return 0;
   29351           1 :         case GF_SG_FIELD_CODING_DEF:
   29352             :                 return 2;
   29353             :         case GF_SG_FIELD_CODING_OUT:
   29354             :                 return 0;
   29355             :         case GF_SG_FIELD_CODING_DYN:
   29356             :                 return 0;
   29357           2 :         default:
   29358             :                 return 2;
   29359             :         }
   29360             : }
   29361             : 
   29362             : static GF_Err SimpleTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29363             : {
   29364           2 :         switch(IndexMode) {
   29365           0 :         case GF_SG_FIELD_CODING_DEF:
   29366           0 :                 *allField = SimpleTexture_Def2All[inField];
   29367             :                 return GF_OK;
   29368             :         default:
   29369             :                 return GF_BAD_PARAM;
   29370             :         }
   29371             : }
   29372             : static GF_Err SimpleTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   29373             : {
   29374           4 :         switch (info->fieldIndex) {
   29375           2 :         case 0:
   29376           2 :                 info->name = "depth";
   29377           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29378           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29379           2 :                 info->NDTtype = NDT_SFTextureNode;
   29380           2 :                 info->far_ptr = & ((M_SimpleTexture *)node)->depth;
   29381             :                 return GF_OK;
   29382           2 :         case 1:
   29383           2 :                 info->name = "texture";
   29384           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29385           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29386           2 :                 info->NDTtype = NDT_SFTextureNode;
   29387           2 :                 info->far_ptr = & ((M_SimpleTexture *)node)->texture;
   29388             :                 return GF_OK;
   29389             :         default:
   29390             :                 return GF_BAD_PARAM;
   29391             :         }
   29392             : }
   29393             : 
   29394             : 
   29395           2 : static s32 SimpleTexture_get_field_index_by_name(char *name)
   29396             : {
   29397           2 :         if (!strcmp("depth", name)) return 0;
   29398           1 :         if (!strcmp("texture", name)) return 1;
   29399           0 :         return -1;
   29400             : }
   29401             : static Bool SimpleTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29402             : {
   29403             :         switch (FieldIndex) {
   29404             :         default:
   29405             :                 return 0;
   29406             :         }
   29407             : }
   29408             : 
   29409             : 
   29410             : 
   29411           1 : GF_Node *SimpleTexture_Create()
   29412             : {
   29413             :         M_SimpleTexture *p;
   29414           1 :         GF_SAFEALLOC(p, M_SimpleTexture);
   29415           1 :         if(!p) return NULL;
   29416           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SimpleTexture);
   29417             : 
   29418             :         /*default field values*/
   29419           1 :         return (GF_Node *)p;
   29420             : }
   29421             : 
   29422             : 
   29423             : /*
   29424             :         SolidRep Node deletion
   29425             : */
   29426             : 
   29427           1 : static void SolidRep_Del(GF_Node *node)
   29428             : {
   29429             :         M_SolidRep *p = (M_SolidRep *) node;
   29430           1 :         gf_sg_mfint32_del(p->densityList);
   29431           1 :         gf_node_unregister((GF_Node *) p->solidTree, (GF_Node *) p);
   29432           1 :         gf_node_free((GF_Node *) p);
   29433           1 : }
   29434             : 
   29435             : static const u16 SolidRep_Def2All[] = { 0, 1, 2};
   29436             : static const u16 SolidRep_In2All[] = { 0, 1, 2};
   29437             : static const u16 SolidRep_Out2All[] = { 0, 1, 2};
   29438             : static const u16 SolidRep_Dyn2All[] = { 0};
   29439             : 
   29440             : static u32 SolidRep_get_field_count(GF_Node *node, u8 IndexMode)
   29441             : {
   29442           6 :         switch(IndexMode) {
   29443             :         case GF_SG_FIELD_CODING_IN:
   29444             :                 return 3;
   29445             :         case GF_SG_FIELD_CODING_DEF:
   29446             :                 return 3;
   29447             :         case GF_SG_FIELD_CODING_OUT:
   29448             :                 return 3;
   29449           1 :         case GF_SG_FIELD_CODING_DYN:
   29450             :                 return 1;
   29451             :         default:
   29452             :                 return 3;
   29453             :         }
   29454             : }
   29455             : 
   29456             : static GF_Err SolidRep_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29457             : {
   29458           3 :         switch(IndexMode) {
   29459           0 :         case GF_SG_FIELD_CODING_IN:
   29460           0 :                 *allField = SolidRep_In2All[inField];
   29461             :                 return GF_OK;
   29462           0 :         case GF_SG_FIELD_CODING_DEF:
   29463           0 :                 *allField = SolidRep_Def2All[inField];
   29464             :                 return GF_OK;
   29465           0 :         case GF_SG_FIELD_CODING_OUT:
   29466           0 :                 *allField = SolidRep_Out2All[inField];
   29467             :                 return GF_OK;
   29468           0 :         case GF_SG_FIELD_CODING_DYN:
   29469           0 :                 *allField = SolidRep_Dyn2All[inField];
   29470             :                 return GF_OK;
   29471             :         default:
   29472             :                 return GF_BAD_PARAM;
   29473             :         }
   29474             : }
   29475             : static GF_Err SolidRep_get_field(GF_Node *node, GF_FieldInfo *info)
   29476             : {
   29477           6 :         switch (info->fieldIndex) {
   29478           2 :         case 0:
   29479           2 :                 info->name = "bboxSize";
   29480           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29481           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   29482           2 :                 info->far_ptr = & ((M_SolidRep *) node)->bboxSize;
   29483             :                 return GF_OK;
   29484           2 :         case 1:
   29485           2 :                 info->name = "densityList";
   29486           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29487           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29488           2 :                 info->far_ptr = & ((M_SolidRep *) node)->densityList;
   29489             :                 return GF_OK;
   29490           2 :         case 2:
   29491           2 :                 info->name = "solidTree";
   29492           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29493           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29494           2 :                 info->NDTtype = NDT_SF3DNode;
   29495           2 :                 info->far_ptr = & ((M_SolidRep *)node)->solidTree;
   29496             :                 return GF_OK;
   29497             :         default:
   29498             :                 return GF_BAD_PARAM;
   29499             :         }
   29500             : }
   29501             : 
   29502             : 
   29503           3 : static s32 SolidRep_get_field_index_by_name(char *name)
   29504             : {
   29505           3 :         if (!strcmp("bboxSize", name)) return 0;
   29506           2 :         if (!strcmp("densityList", name)) return 1;
   29507           1 :         if (!strcmp("solidTree", name)) return 2;
   29508           0 :         return -1;
   29509             : }
   29510             : static Bool SolidRep_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29511             : {
   29512           3 :         switch (FieldIndex) {
   29513           1 :         case 0:
   29514           1 :                 *AType = 11;
   29515           1 :                 *QType = 11;
   29516           1 :                 *b_min = FLT2FIX(0);
   29517           1 :                 *b_max = FIX_MAX;
   29518             :                 return 1;
   29519             :         default:
   29520             :                 return 0;
   29521             :         }
   29522             : }
   29523             : 
   29524             : 
   29525             : 
   29526           1 : GF_Node *SolidRep_Create()
   29527             : {
   29528             :         M_SolidRep *p;
   29529           1 :         GF_SAFEALLOC(p, M_SolidRep);
   29530           1 :         if(!p) return NULL;
   29531           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SolidRep);
   29532             : 
   29533             :         /*default field values*/
   29534           1 :         p->bboxSize.x = FLT2FIX(2);
   29535           1 :         p->bboxSize.y = FLT2FIX(2);
   29536           1 :         p->bboxSize.z = FLT2FIX(2);
   29537           1 :         return (GF_Node *)p;
   29538             : }
   29539             : 
   29540             : 
   29541             : /*
   29542             :         SubdivisionSurface Node deletion
   29543             : */
   29544             : 
   29545           1 : static void SubdivisionSurface_Del(GF_Node *node)
   29546             : {
   29547             :         M_SubdivisionSurface *p = (M_SubdivisionSurface *) node;
   29548           1 :         gf_sg_mfint32_del(p->set_colorIndex);
   29549           1 :         gf_sg_mfint32_del(p->set_coordIndex);
   29550           1 :         gf_sg_mfint32_del(p->set_cornerVertexIndex);
   29551           1 :         gf_sg_mfint32_del(p->set_creaseEdgeIndex);
   29552           1 :         gf_sg_mfint32_del(p->set_creaseVertexIndex);
   29553           1 :         gf_sg_mfint32_del(p->set_dartVertexIndex);
   29554           1 :         gf_sg_mfint32_del(p->set_texCoordIndex);
   29555           1 :         gf_node_unregister((GF_Node *) p->color, (GF_Node *) p);
   29556           1 :         gf_node_unregister((GF_Node *) p->coord, (GF_Node *) p);
   29557           1 :         gf_node_unregister((GF_Node *) p->texCoord, (GF_Node *) p);
   29558           1 :         gf_node_unregister_children((GF_Node *) p, p->sectors);
   29559           1 :         gf_sg_mfint32_del(p->invisibleEdgeIndex);
   29560           1 :         gf_sg_mfint32_del(p->colorIndex);
   29561           1 :         gf_sg_mfint32_del(p->coordIndex);
   29562           1 :         gf_sg_mfint32_del(p->cornerVertexIndex);
   29563           1 :         gf_sg_mfint32_del(p->creaseEdgeIndex);
   29564           1 :         gf_sg_mfint32_del(p->creaseVertexIndex);
   29565           1 :         gf_sg_mfint32_del(p->dartVertexIndex);
   29566           1 :         gf_sg_mfint32_del(p->texCoordIndex);
   29567           1 :         gf_node_free((GF_Node *) p);
   29568           1 : }
   29569             : 
   29570             : static const u16 SubdivisionSurface_Def2All[] = { 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25};
   29571             : static const u16 SubdivisionSurface_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
   29572             : static const u16 SubdivisionSurface_Out2All[] = { 7, 8, 9, 10, 11, 12, 13};
   29573             : 
   29574             : static u32 SubdivisionSurface_get_field_count(GF_Node *node, u8 IndexMode)
   29575             : {
   29576             :         switch(IndexMode) {
   29577             :         case GF_SG_FIELD_CODING_IN:
   29578             :                 return 14;
   29579             :         case GF_SG_FIELD_CODING_DEF:
   29580             :                 return 19;
   29581             :         case GF_SG_FIELD_CODING_OUT:
   29582             :                 return 7;
   29583             :         case GF_SG_FIELD_CODING_DYN:
   29584             :                 return 0;
   29585             :         default:
   29586             :                 return 26;
   29587             :         }
   29588             : }
   29589             : 
   29590             : static GF_Err SubdivisionSurface_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29591             : {
   29592          26 :         switch(IndexMode) {
   29593           0 :         case GF_SG_FIELD_CODING_IN:
   29594           0 :                 *allField = SubdivisionSurface_In2All[inField];
   29595             :                 return GF_OK;
   29596           0 :         case GF_SG_FIELD_CODING_DEF:
   29597           0 :                 *allField = SubdivisionSurface_Def2All[inField];
   29598             :                 return GF_OK;
   29599           0 :         case GF_SG_FIELD_CODING_OUT:
   29600           0 :                 *allField = SubdivisionSurface_Out2All[inField];
   29601             :                 return GF_OK;
   29602             :         default:
   29603             :                 return GF_BAD_PARAM;
   29604             :         }
   29605             : }
   29606          52 : static GF_Err SubdivisionSurface_get_field(GF_Node *node, GF_FieldInfo *info)
   29607             : {
   29608          52 :         switch (info->fieldIndex) {
   29609           2 :         case 0:
   29610           2 :                 info->name = "set_colorIndex";
   29611           2 :                 info->eventType = GF_SG_EVENT_IN;
   29612           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_colorIndex;
   29613           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29614           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_colorIndex;
   29615           2 :                 return GF_OK;
   29616           2 :         case 1:
   29617           2 :                 info->name = "set_coordIndex";
   29618           2 :                 info->eventType = GF_SG_EVENT_IN;
   29619           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_coordIndex;
   29620           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29621           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_coordIndex;
   29622           2 :                 return GF_OK;
   29623           2 :         case 2:
   29624           2 :                 info->name = "set_cornerVertexIndex";
   29625           2 :                 info->eventType = GF_SG_EVENT_IN;
   29626           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_cornerVertexIndex;
   29627           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29628           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_cornerVertexIndex;
   29629           2 :                 return GF_OK;
   29630           2 :         case 3:
   29631           2 :                 info->name = "set_creaseEdgeIndex";
   29632           2 :                 info->eventType = GF_SG_EVENT_IN;
   29633           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_creaseEdgeIndex;
   29634           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29635           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_creaseEdgeIndex;
   29636           2 :                 return GF_OK;
   29637           2 :         case 4:
   29638           2 :                 info->name = "set_creaseVertexIndex";
   29639           2 :                 info->eventType = GF_SG_EVENT_IN;
   29640           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_creaseVertexIndex;
   29641           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29642           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_creaseVertexIndex;
   29643           2 :                 return GF_OK;
   29644           2 :         case 5:
   29645           2 :                 info->name = "set_dartVertexIndex";
   29646           2 :                 info->eventType = GF_SG_EVENT_IN;
   29647           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_dartVertexIndex;
   29648           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29649           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_dartVertexIndex;
   29650           2 :                 return GF_OK;
   29651           2 :         case 6:
   29652           2 :                 info->name = "set_texCoordIndex";
   29653           2 :                 info->eventType = GF_SG_EVENT_IN;
   29654           2 :                 info->on_event_in = ((M_SubdivisionSurface *)node)->on_set_texCoordIndex;
   29655           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29656           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->set_texCoordIndex;
   29657           2 :                 return GF_OK;
   29658           2 :         case 7:
   29659           2 :                 info->name = "color";
   29660           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29661           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29662           2 :                 info->NDTtype = NDT_SFColorNode;
   29663           2 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->color;
   29664           2 :                 return GF_OK;
   29665           2 :         case 8:
   29666           2 :                 info->name = "coord";
   29667           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29668           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29669           2 :                 info->NDTtype = NDT_SFCoordinateNode;
   29670           2 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->coord;
   29671           2 :                 return GF_OK;
   29672           2 :         case 9:
   29673           2 :                 info->name = "texCoord";
   29674           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29675           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   29676           2 :                 info->NDTtype = NDT_SFTextureCoordinateNode;
   29677           2 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->texCoord;
   29678           2 :                 return GF_OK;
   29679           2 :         case 10:
   29680           2 :                 info->name = "sectors";
   29681           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29682           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   29683           2 :                 info->NDTtype = NDT_SFSubdivSurfaceSectorNode;
   29684           2 :                 info->far_ptr = & ((M_SubdivisionSurface *)node)->sectors;
   29685           2 :                 return GF_OK;
   29686           2 :         case 11:
   29687           2 :                 info->name = "subdivisionLevel";
   29688           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29689           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29690           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->subdivisionLevel;
   29691           2 :                 return GF_OK;
   29692           2 :         case 12:
   29693           2 :                 info->name = "subdivisionType";
   29694           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29695           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29696           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->subdivisionType;
   29697           2 :                 return GF_OK;
   29698           2 :         case 13:
   29699           2 :                 info->name = "subdivisionSubType";
   29700           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29701           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29702           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->subdivisionSubType;
   29703           2 :                 return GF_OK;
   29704           2 :         case 14:
   29705           2 :                 info->name = "invisibleEdgeIndex";
   29706           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29707           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29708           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->invisibleEdgeIndex;
   29709           2 :                 return GF_OK;
   29710           2 :         case 15:
   29711           2 :                 info->name = "ccw";
   29712           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29713           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29714           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->ccw;
   29715           2 :                 return GF_OK;
   29716           2 :         case 16:
   29717           2 :                 info->name = "colorIndex";
   29718           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29719           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29720           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->colorIndex;
   29721           2 :                 return GF_OK;
   29722           2 :         case 17:
   29723           2 :                 info->name = "colorPerVertex";
   29724           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29725           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29726           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->colorPerVertex;
   29727           2 :                 return GF_OK;
   29728           2 :         case 18:
   29729           2 :                 info->name = "convex";
   29730           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29731           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29732           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->convex;
   29733           2 :                 return GF_OK;
   29734           2 :         case 19:
   29735           2 :                 info->name = "coordIndex";
   29736           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29737           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29738           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->coordIndex;
   29739           2 :                 return GF_OK;
   29740           2 :         case 20:
   29741           2 :                 info->name = "cornerVertexIndex";
   29742           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29743           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29744           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->cornerVertexIndex;
   29745           2 :                 return GF_OK;
   29746           2 :         case 21:
   29747           2 :                 info->name = "creaseEdgeIndex";
   29748           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29749           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29750           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->creaseEdgeIndex;
   29751           2 :                 return GF_OK;
   29752           2 :         case 22:
   29753           2 :                 info->name = "creaseVertexIndex";
   29754           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29755           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29756           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->creaseVertexIndex;
   29757           2 :                 return GF_OK;
   29758           2 :         case 23:
   29759           2 :                 info->name = "dartVertexIndex";
   29760           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29761           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29762           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->dartVertexIndex;
   29763           2 :                 return GF_OK;
   29764           2 :         case 24:
   29765           2 :                 info->name = "solid";
   29766           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29767           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   29768           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->solid;
   29769           2 :                 return GF_OK;
   29770           2 :         case 25:
   29771           2 :                 info->name = "texCoordIndex";
   29772           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29773           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   29774           2 :                 info->far_ptr = & ((M_SubdivisionSurface *) node)->texCoordIndex;
   29775           2 :                 return GF_OK;
   29776             :         default:
   29777             :                 return GF_BAD_PARAM;
   29778             :         }
   29779             : }
   29780             : 
   29781             : 
   29782          26 : static s32 SubdivisionSurface_get_field_index_by_name(char *name)
   29783             : {
   29784          26 :         if (!strcmp("set_colorIndex", name)) return 0;
   29785          25 :         if (!strcmp("set_coordIndex", name)) return 1;
   29786          24 :         if (!strcmp("set_cornerVertexIndex", name)) return 2;
   29787          23 :         if (!strcmp("set_creaseEdgeIndex", name)) return 3;
   29788          22 :         if (!strcmp("set_creaseVertexIndex", name)) return 4;
   29789          21 :         if (!strcmp("set_dartVertexIndex", name)) return 5;
   29790          20 :         if (!strcmp("set_texCoordIndex", name)) return 6;
   29791          19 :         if (!strcmp("color", name)) return 7;
   29792          18 :         if (!strcmp("coord", name)) return 8;
   29793          17 :         if (!strcmp("texCoord", name)) return 9;
   29794          16 :         if (!strcmp("sectors", name)) return 10;
   29795          15 :         if (!strcmp("subdivisionLevel", name)) return 11;
   29796          14 :         if (!strcmp("subdivisionType", name)) return 12;
   29797          13 :         if (!strcmp("subdivisionSubType", name)) return 13;
   29798          12 :         if (!strcmp("invisibleEdgeIndex", name)) return 14;
   29799          11 :         if (!strcmp("ccw", name)) return 15;
   29800          10 :         if (!strcmp("colorIndex", name)) return 16;
   29801           9 :         if (!strcmp("colorPerVertex", name)) return 17;
   29802           8 :         if (!strcmp("convex", name)) return 18;
   29803           7 :         if (!strcmp("coordIndex", name)) return 19;
   29804           6 :         if (!strcmp("cornerVertexIndex", name)) return 20;
   29805           5 :         if (!strcmp("creaseEdgeIndex", name)) return 21;
   29806           4 :         if (!strcmp("creaseVertexIndex", name)) return 22;
   29807           3 :         if (!strcmp("dartVertexIndex", name)) return 23;
   29808           2 :         if (!strcmp("solid", name)) return 24;
   29809           1 :         if (!strcmp("texCoordIndex", name)) return 25;
   29810           0 :         return -1;
   29811             : }
   29812             : static Bool SubdivisionSurface_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29813             : {
   29814          26 :         switch (FieldIndex) {
   29815           1 :         case 12:
   29816           1 :                 *AType = 0;
   29817           1 :                 *QType = 13;
   29818           1 :                 *QT13_bits = 2;
   29819           1 :                 *b_min = FLT2FIX(0);
   29820           1 :                 *b_max = FLT2FIX(3);
   29821             :                 return 1;
   29822           1 :         case 13:
   29823           1 :                 *AType = 0;
   29824           1 :                 *QType = 13;
   29825           1 :                 *QT13_bits = 2;
   29826           1 :                 *b_min = FLT2FIX(0);
   29827           1 :                 *b_max = FLT2FIX(3);
   29828             :                 return 1;
   29829             :         default:
   29830             :                 return 0;
   29831             :         }
   29832             : }
   29833             : 
   29834             : 
   29835             : 
   29836           1 : GF_Node *SubdivisionSurface_Create()
   29837             : {
   29838             :         M_SubdivisionSurface *p;
   29839           1 :         GF_SAFEALLOC(p, M_SubdivisionSurface);
   29840           1 :         if(!p) return NULL;
   29841           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SubdivisionSurface);
   29842             : 
   29843             :         /*default field values*/
   29844           1 :         p->subdivisionLevel = 0;
   29845           1 :         p->subdivisionType = 0;
   29846           1 :         p->subdivisionSubType = 0;
   29847           1 :         p->ccw = 1;
   29848           1 :         p->colorPerVertex = 1;
   29849           1 :         p->convex = 1;
   29850           1 :         p->solid = 1;
   29851           1 :         return (GF_Node *)p;
   29852             : }
   29853             : 
   29854             : 
   29855             : /*
   29856             :         SubdivSurfaceSector Node deletion
   29857             : */
   29858             : 
   29859             : static void SubdivSurfaceSector_Del(GF_Node *node)
   29860             : {
   29861             :         M_SubdivSurfaceSector *p = (M_SubdivSurfaceSector *) node;
   29862           1 :         gf_node_free((GF_Node *) p);
   29863             : }
   29864             : 
   29865             : static const u16 SubdivSurfaceSector_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   29866             : static const u16 SubdivSurfaceSector_In2All[] = { 0, 1, 2, 3, 4};
   29867             : static const u16 SubdivSurfaceSector_Out2All[] = { 0, 1, 2, 3, 4};
   29868             : 
   29869             : static u32 SubdivSurfaceSector_get_field_count(GF_Node *node, u8 IndexMode)
   29870             : {
   29871             :         switch(IndexMode) {
   29872             :         case GF_SG_FIELD_CODING_IN:
   29873             :                 return 5;
   29874             :         case GF_SG_FIELD_CODING_DEF:
   29875             :                 return 7;
   29876             :         case GF_SG_FIELD_CODING_OUT:
   29877             :                 return 5;
   29878             :         case GF_SG_FIELD_CODING_DYN:
   29879             :                 return 0;
   29880             :         default:
   29881             :                 return 7;
   29882             :         }
   29883             : }
   29884             : 
   29885             : static GF_Err SubdivSurfaceSector_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   29886             : {
   29887           7 :         switch(IndexMode) {
   29888           0 :         case GF_SG_FIELD_CODING_IN:
   29889           0 :                 *allField = SubdivSurfaceSector_In2All[inField];
   29890             :                 return GF_OK;
   29891           0 :         case GF_SG_FIELD_CODING_DEF:
   29892           0 :                 *allField = SubdivSurfaceSector_Def2All[inField];
   29893             :                 return GF_OK;
   29894           0 :         case GF_SG_FIELD_CODING_OUT:
   29895           0 :                 *allField = SubdivSurfaceSector_Out2All[inField];
   29896             :                 return GF_OK;
   29897             :         default:
   29898             :                 return GF_BAD_PARAM;
   29899             :         }
   29900             : }
   29901          14 : static GF_Err SubdivSurfaceSector_get_field(GF_Node *node, GF_FieldInfo *info)
   29902             : {
   29903          14 :         switch (info->fieldIndex) {
   29904           2 :         case 0:
   29905           2 :                 info->name = "flatness";
   29906           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29907           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29908           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->flatness;
   29909           2 :                 return GF_OK;
   29910           2 :         case 1:
   29911           2 :                 info->name = "normal";
   29912           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29913           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   29914           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->normal;
   29915           2 :                 return GF_OK;
   29916           2 :         case 2:
   29917           2 :                 info->name = "normalTension";
   29918           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29919           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29920           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->normalTension;
   29921           2 :                 return GF_OK;
   29922           2 :         case 3:
   29923           2 :                 info->name = "tag";
   29924           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29925           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29926           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->_tag;
   29927           2 :                 return GF_OK;
   29928           2 :         case 4:
   29929           2 :                 info->name = "theta";
   29930           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   29931           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   29932           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->theta;
   29933           2 :                 return GF_OK;
   29934           2 :         case 5:
   29935           2 :                 info->name = "faceIndex";
   29936           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29937           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29938           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->faceIndex;
   29939           2 :                 return GF_OK;
   29940           2 :         case 6:
   29941           2 :                 info->name = "vertexIndex";
   29942           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   29943           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   29944           2 :                 info->far_ptr = & ((M_SubdivSurfaceSector *) node)->vertexIndex;
   29945           2 :                 return GF_OK;
   29946             :         default:
   29947             :                 return GF_BAD_PARAM;
   29948             :         }
   29949             : }
   29950             : 
   29951             : 
   29952           7 : static s32 SubdivSurfaceSector_get_field_index_by_name(char *name)
   29953             : {
   29954           7 :         if (!strcmp("flatness", name)) return 0;
   29955           6 :         if (!strcmp("normal", name)) return 1;
   29956           5 :         if (!strcmp("normalTension", name)) return 2;
   29957           4 :         if (!strcmp("tag", name)) return 3;
   29958           3 :         if (!strcmp("theta", name)) return 4;
   29959           2 :         if (!strcmp("faceIndex", name)) return 5;
   29960           1 :         if (!strcmp("vertexIndex", name)) return 6;
   29961           0 :         return -1;
   29962             : }
   29963           7 : static Bool SubdivSurfaceSector_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   29964             : {
   29965           7 :         switch (FieldIndex) {
   29966           1 :         case 0:
   29967           1 :                 *AType = 0;
   29968           1 :                 *QType = 7;
   29969           1 :                 *b_min = FLT2FIX(0);
   29970           1 :                 *b_max = FLT2FIX(1);
   29971             :                 return 1;
   29972           1 :         case 1:
   29973           1 :                 *AType = 0;
   29974           1 :                 *QType = 9;
   29975             :                 return 1;
   29976           1 :         case 2:
   29977           1 :                 *AType = 0;
   29978           1 :                 *QType = 7;
   29979           1 :                 *b_min = FLT2FIX(0);
   29980           1 :                 *b_max = FLT2FIX(1);
   29981             :                 return 1;
   29982           1 :         case 3:
   29983           1 :                 *AType = 0;
   29984           1 :                 *QType = 13;
   29985           1 :                 *QT13_bits = 2;
   29986           1 :                 *b_min = FLT2FIX(0);
   29987           1 :                 *b_max = FLT2FIX(2);
   29988             :                 return 1;
   29989           1 :         case 4:
   29990           1 :                 *AType = 0;
   29991           1 :                 *QType = 6;
   29992           1 :                 *b_min = FLT2FIX(0);
   29993           1 :                 *b_max = FLT2FIX(6.2831853);
   29994             :                 return 1;
   29995           1 :         case 5:
   29996           1 :                 *AType = 0;
   29997           1 :                 *QType = 14;
   29998             :                 return 1;
   29999           1 :         case 6:
   30000           1 :                 *AType = 0;
   30001           1 :                 *QType = 14;
   30002             :                 return 1;
   30003             :         default:
   30004             :                 return 0;
   30005             :         }
   30006             : }
   30007             : 
   30008             : 
   30009             : 
   30010           1 : GF_Node *SubdivSurfaceSector_Create()
   30011             : {
   30012             :         M_SubdivSurfaceSector *p;
   30013           1 :         GF_SAFEALLOC(p, M_SubdivSurfaceSector);
   30014           1 :         if(!p) return NULL;
   30015           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SubdivSurfaceSector);
   30016             : 
   30017             :         /*default field values*/
   30018           1 :         p->flatness = FLT2FIX(0);
   30019           1 :         p->normal.x = FLT2FIX(0);
   30020           1 :         p->normal.y = FLT2FIX(0);
   30021           1 :         p->normal.z = FLT2FIX(0);
   30022           1 :         p->normalTension = FLT2FIX(0);
   30023           1 :         p->_tag = 0;
   30024           1 :         p->theta = FLT2FIX(0);
   30025           1 :         p->faceIndex = 0;
   30026           1 :         p->vertexIndex = 0;
   30027           1 :         return (GF_Node *)p;
   30028             : }
   30029             : 
   30030             : 
   30031             : /*
   30032             :         WaveletSubdivisionSurface Node deletion
   30033             : */
   30034             : 
   30035             : static void WaveletSubdivisionSurface_Del(GF_Node *node)
   30036             : {
   30037             :         M_WaveletSubdivisionSurface *p = (M_WaveletSubdivisionSurface *) node;
   30038           1 :         gf_node_unregister((GF_Node *) p->baseMesh, (GF_Node *) p);
   30039           1 :         gf_node_free((GF_Node *) p);
   30040             : }
   30041             : 
   30042             : static const u16 WaveletSubdivisionSurface_Def2All[] = { 0, 1, 2, 3};
   30043             : static const u16 WaveletSubdivisionSurface_In2All[] = { 0, 1, 2, 3};
   30044             : static const u16 WaveletSubdivisionSurface_Out2All[] = { 0, 1, 2, 3};
   30045             : 
   30046             : static u32 WaveletSubdivisionSurface_get_field_count(GF_Node *node, u8 IndexMode)
   30047             : {
   30048           6 :         switch(IndexMode) {
   30049             :         case GF_SG_FIELD_CODING_IN:
   30050             :                 return 4;
   30051             :         case GF_SG_FIELD_CODING_DEF:
   30052             :                 return 4;
   30053             :         case GF_SG_FIELD_CODING_OUT:
   30054             :                 return 4;
   30055           1 :         case GF_SG_FIELD_CODING_DYN:
   30056             :                 return 0;
   30057             :         default:
   30058             :                 return 4;
   30059             :         }
   30060             : }
   30061             : 
   30062             : static GF_Err WaveletSubdivisionSurface_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30063             : {
   30064           4 :         switch(IndexMode) {
   30065           0 :         case GF_SG_FIELD_CODING_IN:
   30066           0 :                 *allField = WaveletSubdivisionSurface_In2All[inField];
   30067             :                 return GF_OK;
   30068           0 :         case GF_SG_FIELD_CODING_DEF:
   30069           0 :                 *allField = WaveletSubdivisionSurface_Def2All[inField];
   30070             :                 return GF_OK;
   30071           0 :         case GF_SG_FIELD_CODING_OUT:
   30072           0 :                 *allField = WaveletSubdivisionSurface_Out2All[inField];
   30073             :                 return GF_OK;
   30074             :         default:
   30075             :                 return GF_BAD_PARAM;
   30076             :         }
   30077             : }
   30078           8 : static GF_Err WaveletSubdivisionSurface_get_field(GF_Node *node, GF_FieldInfo *info)
   30079             : {
   30080           8 :         switch (info->fieldIndex) {
   30081           2 :         case 0:
   30082           2 :                 info->name = "baseMesh";
   30083           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30084           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30085           2 :                 info->NDTtype = NDT_SFGeometryNode;
   30086           2 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *)node)->baseMesh;
   30087           2 :                 return GF_OK;
   30088           2 :         case 1:
   30089           2 :                 info->name = "fieldOfView";
   30090           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30091           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30092           2 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *) node)->fieldOfView;
   30093           2 :                 return GF_OK;
   30094           2 :         case 2:
   30095           2 :                 info->name = "frequency";
   30096           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30097           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30098           2 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *) node)->frequency;
   30099           2 :                 return GF_OK;
   30100           2 :         case 3:
   30101           2 :                 info->name = "quality";
   30102           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30103           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   30104           2 :                 info->far_ptr = & ((M_WaveletSubdivisionSurface *) node)->quality;
   30105           2 :                 return GF_OK;
   30106             :         default:
   30107             :                 return GF_BAD_PARAM;
   30108             :         }
   30109             : }
   30110             : 
   30111             : 
   30112           4 : static s32 WaveletSubdivisionSurface_get_field_index_by_name(char *name)
   30113             : {
   30114           4 :         if (!strcmp("baseMesh", name)) return 0;
   30115           3 :         if (!strcmp("fieldOfView", name)) return 1;
   30116           2 :         if (!strcmp("frequency", name)) return 2;
   30117           1 :         if (!strcmp("quality", name)) return 3;
   30118           0 :         return -1;
   30119             : }
   30120             : static Bool WaveletSubdivisionSurface_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30121             : {
   30122             :         switch (FieldIndex) {
   30123             :         default:
   30124             :                 return 0;
   30125             :         }
   30126             : }
   30127             : 
   30128             : 
   30129             : 
   30130           1 : GF_Node *WaveletSubdivisionSurface_Create()
   30131             : {
   30132             :         M_WaveletSubdivisionSurface *p;
   30133           1 :         GF_SAFEALLOC(p, M_WaveletSubdivisionSurface);
   30134           1 :         if(!p) return NULL;
   30135           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_WaveletSubdivisionSurface);
   30136             : 
   30137             :         /*default field values*/
   30138           1 :         p->fieldOfView = FLT2FIX(0.785398);
   30139           1 :         p->frequency = FLT2FIX(1.0);
   30140           1 :         p->quality = 1;
   30141           1 :         return (GF_Node *)p;
   30142             : }
   30143             : 
   30144             : 
   30145             : /*
   30146             :         Clipper2D Node deletion
   30147             : */
   30148             : 
   30149          68 : static void Clipper2D_Del(GF_Node *node)
   30150             : {
   30151             :         M_Clipper2D *p = (M_Clipper2D *) node;
   30152          68 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   30153          68 :         gf_node_unregister((GF_Node *) p->transform, (GF_Node *) p);
   30154          68 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   30155          68 :         gf_node_free((GF_Node *) p);
   30156          68 : }
   30157             : 
   30158             : static const u16 Clipper2D_Def2All[] = { 2, 3, 4, 5, 6};
   30159             : static const u16 Clipper2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30160             : static const u16 Clipper2D_Out2All[] = { 2, 3, 4, 5, 6};
   30161             : 
   30162             : static u32 Clipper2D_get_field_count(GF_Node *node, u8 IndexMode)
   30163             : {
   30164             :         switch(IndexMode) {
   30165             :         case GF_SG_FIELD_CODING_IN:
   30166             :                 return 7;
   30167             :         case GF_SG_FIELD_CODING_DEF:
   30168             :                 return 5;
   30169             :         case GF_SG_FIELD_CODING_OUT:
   30170             :                 return 5;
   30171             :         case GF_SG_FIELD_CODING_DYN:
   30172             :                 return 0;
   30173             :         default:
   30174             :                 return 7;
   30175             :         }
   30176             : }
   30177             : 
   30178             : static GF_Err Clipper2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30179             : {
   30180         122 :         switch(IndexMode) {
   30181           0 :         case GF_SG_FIELD_CODING_IN:
   30182           0 :                 *allField = Clipper2D_In2All[inField];
   30183             :                 return GF_OK;
   30184         115 :         case GF_SG_FIELD_CODING_DEF:
   30185         115 :                 *allField = Clipper2D_Def2All[inField];
   30186             :                 return GF_OK;
   30187           0 :         case GF_SG_FIELD_CODING_OUT:
   30188           0 :                 *allField = Clipper2D_Out2All[inField];
   30189             :                 return GF_OK;
   30190             :         default:
   30191             :                 return GF_BAD_PARAM;
   30192             :         }
   30193             : }
   30194         362 : static GF_Err Clipper2D_get_field(GF_Node *node, GF_FieldInfo *info)
   30195             : {
   30196         362 :         switch (info->fieldIndex) {
   30197          17 :         case 0:
   30198          17 :                 info->name = "addChildren";
   30199          17 :                 info->eventType = GF_SG_EVENT_IN;
   30200          17 :                 info->on_event_in = ((M_Clipper2D *)node)->on_addChildren;
   30201          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30202          17 :                 info->NDTtype = NDT_SF2DNode;
   30203          17 :                 info->far_ptr = & ((M_Clipper2D *)node)->addChildren;
   30204          17 :                 return GF_OK;
   30205          17 :         case 1:
   30206          17 :                 info->name = "removeChildren";
   30207          17 :                 info->eventType = GF_SG_EVENT_IN;
   30208          17 :                 info->on_event_in = ((M_Clipper2D *)node)->on_removeChildren;
   30209          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30210          17 :                 info->NDTtype = NDT_SF2DNode;
   30211          17 :                 info->far_ptr = & ((M_Clipper2D *)node)->removeChildren;
   30212          17 :                 return GF_OK;
   30213          39 :         case 2:
   30214          39 :                 info->name = "children";
   30215          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30216          39 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30217          39 :                 info->NDTtype = NDT_SF2DNode;
   30218          39 :                 info->far_ptr = & ((M_Clipper2D *)node)->children;
   30219          39 :                 return GF_OK;
   30220          39 :         case 3:
   30221          39 :                 info->name = "geometry";
   30222          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30223          39 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30224          39 :                 info->NDTtype = NDT_SFGeometryNode;
   30225          39 :                 info->far_ptr = & ((M_Clipper2D *)node)->geometry;
   30226          39 :                 return GF_OK;
   30227         137 :         case 4:
   30228         137 :                 info->name = "inside";
   30229         137 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30230         137 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   30231         137 :                 info->far_ptr = & ((M_Clipper2D *) node)->inside;
   30232         137 :                 return GF_OK;
   30233          39 :         case 5:
   30234          39 :                 info->name = "transform";
   30235          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30236          39 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30237          39 :                 info->NDTtype = NDT_SF2DNode;
   30238          39 :                 info->far_ptr = & ((M_Clipper2D *)node)->transform;
   30239          39 :                 return GF_OK;
   30240          74 :         case 6:
   30241          74 :                 info->name = "XOR";
   30242          74 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30243          74 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   30244          74 :                 info->far_ptr = & ((M_Clipper2D *) node)->XOR;
   30245          74 :                 return GF_OK;
   30246             :         default:
   30247             :                 return GF_BAD_PARAM;
   30248             :         }
   30249             : }
   30250             : 
   30251             : 
   30252          36 : static s32 Clipper2D_get_field_index_by_name(char *name)
   30253             : {
   30254          36 :         if (!strcmp("addChildren", name)) return 0;
   30255          35 :         if (!strcmp("removeChildren", name)) return 1;
   30256          34 :         if (!strcmp("children", name)) return 2;
   30257          31 :         if (!strcmp("geometry", name)) return 3;
   30258          28 :         if (!strcmp("inside", name)) return 4;
   30259           6 :         if (!strcmp("transform", name)) return 5;
   30260           3 :         if (!strcmp("XOR", name)) return 6;
   30261           0 :         return -1;
   30262             : }
   30263             : static Bool Clipper2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30264             : {
   30265             :         switch (FieldIndex) {
   30266             :         default:
   30267             :                 return 0;
   30268             :         }
   30269             : }
   30270             : 
   30271             : 
   30272             : 
   30273          68 : GF_Node *Clipper2D_Create()
   30274             : {
   30275             :         M_Clipper2D *p;
   30276          68 :         GF_SAFEALLOC(p, M_Clipper2D);
   30277          68 :         if(!p) return NULL;
   30278          68 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Clipper2D);
   30279          68 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   30280             : 
   30281             :         /*default field values*/
   30282          68 :         p->inside = 1;
   30283          68 :         return (GF_Node *)p;
   30284             : }
   30285             : 
   30286             : 
   30287             : /*
   30288             :         ColorTransform Node deletion
   30289             : */
   30290             : 
   30291             : static void ColorTransform_Del(GF_Node *node)
   30292             : {
   30293             :         M_ColorTransform *p = (M_ColorTransform *) node;
   30294         633 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   30295         633 :         gf_node_free((GF_Node *) p);
   30296             : }
   30297             : 
   30298             : static const u16 ColorTransform_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30299             : static const u16 ColorTransform_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30300             : static const u16 ColorTransform_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30301             : static const u16 ColorTransform_Dyn2All[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
   30302             : 
   30303             : static u32 ColorTransform_get_field_count(GF_Node *node, u8 IndexMode)
   30304             : {
   30305             :         switch(IndexMode) {
   30306             :         case GF_SG_FIELD_CODING_IN:
   30307             :                 return 23;
   30308             :         case GF_SG_FIELD_CODING_DEF:
   30309             :                 return 21;
   30310             :         case GF_SG_FIELD_CODING_OUT:
   30311             :                 return 21;
   30312             :         case GF_SG_FIELD_CODING_DYN:
   30313             :                 return 20;
   30314             :         default:
   30315             :                 return 23;
   30316             :         }
   30317             : }
   30318             : 
   30319             : static GF_Err ColorTransform_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30320             : {
   30321        2024 :         switch(IndexMode) {
   30322           0 :         case GF_SG_FIELD_CODING_IN:
   30323           0 :                 *allField = ColorTransform_In2All[inField];
   30324             :                 return GF_OK;
   30325        2001 :         case GF_SG_FIELD_CODING_DEF:
   30326        2001 :                 *allField = ColorTransform_Def2All[inField];
   30327             :                 return GF_OK;
   30328           0 :         case GF_SG_FIELD_CODING_OUT:
   30329           0 :                 *allField = ColorTransform_Out2All[inField];
   30330             :                 return GF_OK;
   30331           0 :         case GF_SG_FIELD_CODING_DYN:
   30332           0 :                 *allField = ColorTransform_Dyn2All[inField];
   30333             :                 return GF_OK;
   30334             :         default:
   30335             :                 return GF_BAD_PARAM;
   30336             :         }
   30337             : }
   30338       25453 : static GF_Err ColorTransform_get_field(GF_Node *node, GF_FieldInfo *info)
   30339             : {
   30340       25453 :         switch (info->fieldIndex) {
   30341         798 :         case 0:
   30342         798 :                 info->name = "addChildren";
   30343         798 :                 info->eventType = GF_SG_EVENT_IN;
   30344         798 :                 info->on_event_in = ((M_ColorTransform *)node)->on_addChildren;
   30345         798 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30346         798 :                 info->NDTtype = NDT_SF3DNode;
   30347         798 :                 info->far_ptr = & ((M_ColorTransform *)node)->addChildren;
   30348         798 :                 return GF_OK;
   30349         798 :         case 1:
   30350         798 :                 info->name = "removeChildren";
   30351         798 :                 info->eventType = GF_SG_EVENT_IN;
   30352         798 :                 info->on_event_in = ((M_ColorTransform *)node)->on_removeChildren;
   30353         798 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30354         798 :                 info->NDTtype = NDT_SF3DNode;
   30355         798 :                 info->far_ptr = & ((M_ColorTransform *)node)->removeChildren;
   30356         798 :                 return GF_OK;
   30357        1054 :         case 2:
   30358        1054 :                 info->name = "children";
   30359        1054 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30360        1054 :                 info->fieldType = GF_SG_VRML_MFNODE;
   30361        1054 :                 info->NDTtype = NDT_SF3DNode;
   30362        1054 :                 info->far_ptr = & ((M_ColorTransform *)node)->children;
   30363        1054 :                 return GF_OK;
   30364        1088 :         case 3:
   30365        1088 :                 info->name = "mrr";
   30366        1088 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30367        1088 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30368        1088 :                 info->far_ptr = & ((M_ColorTransform *) node)->mrr;
   30369        1088 :                 return GF_OK;
   30370        1023 :         case 4:
   30371        1023 :                 info->name = "mrg";
   30372        1023 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30373        1023 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30374        1023 :                 info->far_ptr = & ((M_ColorTransform *) node)->mrg;
   30375        1023 :                 return GF_OK;
   30376        1000 :         case 5:
   30377        1000 :                 info->name = "mrb";
   30378        1000 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30379        1000 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30380        1000 :                 info->far_ptr = & ((M_ColorTransform *) node)->mrb;
   30381        1000 :                 return GF_OK;
   30382         994 :         case 6:
   30383         994 :                 info->name = "mra";
   30384         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30385         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30386         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mra;
   30387         994 :                 return GF_OK;
   30388        1808 :         case 7:
   30389        1808 :                 info->name = "tr";
   30390        1808 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30391        1808 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30392        1808 :                 info->far_ptr = & ((M_ColorTransform *) node)->tr;
   30393        1808 :                 return GF_OK;
   30394         994 :         case 8:
   30395         994 :                 info->name = "mgr";
   30396         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30397         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30398         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mgr;
   30399         994 :                 return GF_OK;
   30400        1087 :         case 9:
   30401        1087 :                 info->name = "mgg";
   30402        1087 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30403        1087 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30404        1087 :                 info->far_ptr = & ((M_ColorTransform *) node)->mgg;
   30405        1087 :                 return GF_OK;
   30406         994 :         case 10:
   30407         994 :                 info->name = "mgb";
   30408         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30409         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30410         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mgb;
   30411         994 :                 return GF_OK;
   30412         994 :         case 11:
   30413         994 :                 info->name = "mga";
   30414         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30415         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30416         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mga;
   30417         994 :                 return GF_OK;
   30418        1776 :         case 12:
   30419        1776 :                 info->name = "tg";
   30420        1776 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30421        1776 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30422        1776 :                 info->far_ptr = & ((M_ColorTransform *) node)->tg;
   30423        1776 :                 return GF_OK;
   30424        1023 :         case 13:
   30425        1023 :                 info->name = "mbr";
   30426        1023 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30427        1023 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30428        1023 :                 info->far_ptr = & ((M_ColorTransform *) node)->mbr;
   30429        1023 :                 return GF_OK;
   30430         994 :         case 14:
   30431         994 :                 info->name = "mbg";
   30432         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30433         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30434         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mbg;
   30435         994 :                 return GF_OK;
   30436        1087 :         case 15:
   30437        1087 :                 info->name = "mbb";
   30438        1087 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30439        1087 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30440        1087 :                 info->far_ptr = & ((M_ColorTransform *) node)->mbb;
   30441        1087 :                 return GF_OK;
   30442         994 :         case 16:
   30443         994 :                 info->name = "mba";
   30444         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30445         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30446         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mba;
   30447         994 :                 return GF_OK;
   30448        1776 :         case 17:
   30449        1776 :                 info->name = "tb";
   30450        1776 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30451        1776 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30452        1776 :                 info->far_ptr = & ((M_ColorTransform *) node)->tb;
   30453        1776 :                 return GF_OK;
   30454         994 :         case 18:
   30455         994 :                 info->name = "mar";
   30456         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30457         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30458         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mar;
   30459         994 :                 return GF_OK;
   30460         994 :         case 19:
   30461         994 :                 info->name = "mag";
   30462         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30463         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30464         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mag;
   30465         994 :                 return GF_OK;
   30466         994 :         case 20:
   30467         994 :                 info->name = "mab";
   30468         994 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30469         994 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30470         994 :                 info->far_ptr = & ((M_ColorTransform *) node)->mab;
   30471         994 :                 return GF_OK;
   30472        1080 :         case 21:
   30473        1080 :                 info->name = "maa";
   30474        1080 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30475        1080 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30476        1080 :                 info->far_ptr = & ((M_ColorTransform *) node)->maa;
   30477        1080 :                 return GF_OK;
   30478        1109 :         case 22:
   30479        1109 :                 info->name = "ta";
   30480        1109 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30481        1109 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   30482        1109 :                 info->far_ptr = & ((M_ColorTransform *) node)->ta;
   30483        1109 :                 return GF_OK;
   30484             :         default:
   30485             :                 return GF_BAD_PARAM;
   30486             :         }
   30487             : }
   30488             : 
   30489             : 
   30490         355 : static s32 ColorTransform_get_field_index_by_name(char *name)
   30491             : {
   30492         355 :         if (!strcmp("addChildren", name)) return 0;
   30493         354 :         if (!strcmp("removeChildren", name)) return 1;
   30494         353 :         if (!strcmp("children", name)) return 2;
   30495         302 :         if (!strcmp("mrr", name)) return 3;
   30496         251 :         if (!strcmp("mrg", name)) return 4;
   30497         221 :         if (!strcmp("mrb", name)) return 5;
   30498         217 :         if (!strcmp("mra", name)) return 6;
   30499         216 :         if (!strcmp("tr", name)) return 7;
   30500         183 :         if (!strcmp("mgr", name)) return 8;
   30501         182 :         if (!strcmp("mgg", name)) return 9;
   30502         132 :         if (!strcmp("mgb", name)) return 10;
   30503         131 :         if (!strcmp("mga", name)) return 11;
   30504         130 :         if (!strcmp("tg", name)) return 12;
   30505         128 :         if (!strcmp("mbr", name)) return 13;
   30506          98 :         if (!strcmp("mbg", name)) return 14;
   30507          97 :         if (!strcmp("mbb", name)) return 15;
   30508          47 :         if (!strcmp("mba", name)) return 16;
   30509          46 :         if (!strcmp("tb", name)) return 17;
   30510          44 :         if (!strcmp("mar", name)) return 18;
   30511          43 :         if (!strcmp("mag", name)) return 19;
   30512          42 :         if (!strcmp("mab", name)) return 20;
   30513          41 :         if (!strcmp("maa", name)) return 21;
   30514          20 :         if (!strcmp("ta", name)) return 22;
   30515           0 :         return -1;
   30516             : }
   30517          63 : static Bool ColorTransform_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30518             : {
   30519          63 :         switch (FieldIndex) {
   30520           9 :         case 3:
   30521           9 :                 *AType = 7;
   30522           9 :                 *QType = 7;
   30523           9 :                 *b_min = FIX_MIN;
   30524           9 :                 *b_max = FIX_MAX;
   30525             :                 return 1;
   30526           1 :         case 4:
   30527           1 :                 *AType = 7;
   30528           1 :                 *QType = 7;
   30529           1 :                 *b_min = FIX_MIN;
   30530           1 :                 *b_max = FIX_MAX;
   30531             :                 return 1;
   30532           1 :         case 5:
   30533           1 :                 *AType = 7;
   30534           1 :                 *QType = 7;
   30535           1 :                 *b_min = FIX_MIN;
   30536           1 :                 *b_max = FIX_MAX;
   30537             :                 return 1;
   30538           1 :         case 6:
   30539           1 :                 *AType = 7;
   30540           1 :                 *QType = 7;
   30541           1 :                 *b_min = FIX_MIN;
   30542           1 :                 *b_max = FIX_MAX;
   30543             :                 return 1;
   30544           1 :         case 7:
   30545           1 :                 *AType = 7;
   30546           1 :                 *QType = 4;
   30547           1 :                 *b_min = FIX_MIN;
   30548           1 :                 *b_max = FIX_MAX;
   30549             :                 return 1;
   30550           1 :         case 8:
   30551           1 :                 *AType = 7;
   30552           1 :                 *QType = 7;
   30553           1 :                 *b_min = FIX_MIN;
   30554           1 :                 *b_max = FIX_MAX;
   30555             :                 return 1;
   30556           9 :         case 9:
   30557           9 :                 *AType = 7;
   30558           9 :                 *QType = 7;
   30559           9 :                 *b_min = FIX_MIN;
   30560           9 :                 *b_max = FIX_MAX;
   30561             :                 return 1;
   30562           1 :         case 10:
   30563           1 :                 *AType = 7;
   30564           1 :                 *QType = 7;
   30565           1 :                 *b_min = FIX_MIN;
   30566           1 :                 *b_max = FIX_MAX;
   30567             :                 return 1;
   30568           1 :         case 11:
   30569           1 :                 *AType = 7;
   30570           1 :                 *QType = 7;
   30571           1 :                 *b_min = FIX_MIN;
   30572           1 :                 *b_max = FIX_MAX;
   30573             :                 return 1;
   30574           1 :         case 12:
   30575           1 :                 *AType = 7;
   30576           1 :                 *QType = 4;
   30577           1 :                 *b_min = FIX_MIN;
   30578           1 :                 *b_max = FIX_MAX;
   30579             :                 return 1;
   30580           1 :         case 13:
   30581           1 :                 *AType = 7;
   30582           1 :                 *QType = 7;
   30583           1 :                 *b_min = FIX_MIN;
   30584           1 :                 *b_max = FIX_MAX;
   30585             :                 return 1;
   30586           1 :         case 14:
   30587           1 :                 *AType = 7;
   30588           1 :                 *QType = 7;
   30589           1 :                 *b_min = FIX_MIN;
   30590           1 :                 *b_max = FIX_MAX;
   30591             :                 return 1;
   30592           9 :         case 15:
   30593           9 :                 *AType = 7;
   30594           9 :                 *QType = 7;
   30595           9 :                 *b_min = FIX_MIN;
   30596           9 :                 *b_max = FIX_MAX;
   30597             :                 return 1;
   30598           1 :         case 16:
   30599           1 :                 *AType = 7;
   30600           1 :                 *QType = 7;
   30601           1 :                 *b_min = FIX_MIN;
   30602           1 :                 *b_max = FIX_MAX;
   30603             :                 return 1;
   30604           1 :         case 17:
   30605           1 :                 *AType = 7;
   30606           1 :                 *QType = 4;
   30607           1 :                 *b_min = FIX_MIN;
   30608           1 :                 *b_max = FIX_MAX;
   30609             :                 return 1;
   30610           1 :         case 18:
   30611           1 :                 *AType = 7;
   30612           1 :                 *QType = 7;
   30613           1 :                 *b_min = FIX_MIN;
   30614           1 :                 *b_max = FIX_MAX;
   30615             :                 return 1;
   30616           1 :         case 19:
   30617           1 :                 *AType = 7;
   30618           1 :                 *QType = 7;
   30619           1 :                 *b_min = FIX_MIN;
   30620           1 :                 *b_max = FIX_MAX;
   30621             :                 return 1;
   30622           1 :         case 20:
   30623           1 :                 *AType = 7;
   30624           1 :                 *QType = 7;
   30625           1 :                 *b_min = FIX_MIN;
   30626           1 :                 *b_max = FIX_MAX;
   30627             :                 return 1;
   30628           9 :         case 21:
   30629           9 :                 *AType = 7;
   30630           9 :                 *QType = 7;
   30631           9 :                 *b_min = FIX_MIN;
   30632           9 :                 *b_max = FIX_MAX;
   30633             :                 return 1;
   30634           9 :         case 22:
   30635           9 :                 *AType = 7;
   30636           9 :                 *QType = 4;
   30637           9 :                 *b_min = FIX_MIN;
   30638           9 :                 *b_max = FIX_MAX;
   30639             :                 return 1;
   30640             :         default:
   30641             :                 return 0;
   30642             :         }
   30643             : }
   30644             : 
   30645             : 
   30646             : 
   30647         633 : GF_Node *ColorTransform_Create()
   30648             : {
   30649             :         M_ColorTransform *p;
   30650         633 :         GF_SAFEALLOC(p, M_ColorTransform);
   30651         633 :         if(!p) return NULL;
   30652         633 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ColorTransform);
   30653         633 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   30654             : 
   30655             :         /*default field values*/
   30656         633 :         p->mrr = FLT2FIX(1);
   30657         633 :         p->mrg = FLT2FIX(0);
   30658         633 :         p->mrb = FLT2FIX(0);
   30659         633 :         p->mra = FLT2FIX(0);
   30660         633 :         p->tr = FLT2FIX(0);
   30661         633 :         p->mgr = FLT2FIX(0);
   30662         633 :         p->mgg = FLT2FIX(1);
   30663         633 :         p->mgb = FLT2FIX(0);
   30664         633 :         p->mga = FLT2FIX(0);
   30665         633 :         p->tg = FLT2FIX(0);
   30666         633 :         p->mbr = FLT2FIX(0);
   30667         633 :         p->mbg = FLT2FIX(0);
   30668         633 :         p->mbb = FLT2FIX(1);
   30669         633 :         p->mba = FLT2FIX(0);
   30670         633 :         p->tb = FLT2FIX(0);
   30671         633 :         p->mar = FLT2FIX(0);
   30672         633 :         p->mag = FLT2FIX(0);
   30673         633 :         p->mab = FLT2FIX(0);
   30674         633 :         p->maa = FLT2FIX(1);
   30675         633 :         p->ta = FLT2FIX(0);
   30676         633 :         return (GF_Node *)p;
   30677             : }
   30678             : 
   30679             : 
   30680             : /*
   30681             :         Ellipse Node deletion
   30682             : */
   30683             : 
   30684             : static void Ellipse_Del(GF_Node *node)
   30685             : {
   30686             :         M_Ellipse *p = (M_Ellipse *) node;
   30687           5 :         gf_node_free((GF_Node *) p);
   30688             : }
   30689             : 
   30690             : static const u16 Ellipse_Def2All[] = { 0};
   30691             : static const u16 Ellipse_In2All[] = { 0};
   30692             : static const u16 Ellipse_Out2All[] = { 0};
   30693             : static const u16 Ellipse_Dyn2All[] = { 0};
   30694             : 
   30695             : static u32 Ellipse_get_field_count(GF_Node *node, u8 IndexMode)
   30696             : {
   30697             :         switch(IndexMode) {
   30698             :         case GF_SG_FIELD_CODING_IN:
   30699             :                 return 1;
   30700             :         case GF_SG_FIELD_CODING_DEF:
   30701             :                 return 1;
   30702             :         case GF_SG_FIELD_CODING_OUT:
   30703             :                 return 1;
   30704             :         case GF_SG_FIELD_CODING_DYN:
   30705             :                 return 1;
   30706             :         default:
   30707             :                 return 1;
   30708             :         }
   30709             : }
   30710             : 
   30711             : static GF_Err Ellipse_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30712             : {
   30713           1 :         switch(IndexMode) {
   30714           0 :         case GF_SG_FIELD_CODING_IN:
   30715           0 :                 *allField = Ellipse_In2All[inField];
   30716             :                 return GF_OK;
   30717           0 :         case GF_SG_FIELD_CODING_DEF:
   30718           0 :                 *allField = Ellipse_Def2All[inField];
   30719             :                 return GF_OK;
   30720           0 :         case GF_SG_FIELD_CODING_OUT:
   30721           0 :                 *allField = Ellipse_Out2All[inField];
   30722             :                 return GF_OK;
   30723           0 :         case GF_SG_FIELD_CODING_DYN:
   30724           0 :                 *allField = Ellipse_Dyn2All[inField];
   30725             :                 return GF_OK;
   30726             :         default:
   30727             :                 return GF_BAD_PARAM;
   30728             :         }
   30729             : }
   30730             : static GF_Err Ellipse_get_field(GF_Node *node, GF_FieldInfo *info)
   30731             : {
   30732           6 :         switch (info->fieldIndex) {
   30733           6 :         case 0:
   30734           6 :                 info->name = "radius";
   30735           6 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30736           6 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   30737           6 :                 info->far_ptr = & ((M_Ellipse *) node)->radius;
   30738             :                 return GF_OK;
   30739             :         default:
   30740             :                 return GF_BAD_PARAM;
   30741             :         }
   30742             : }
   30743             : 
   30744             : 
   30745             : static s32 Ellipse_get_field_index_by_name(char *name)
   30746             : {
   30747           5 :         if (!strcmp("radius", name)) return 0;
   30748             :         return -1;
   30749             : }
   30750             : static Bool Ellipse_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30751             : {
   30752           1 :         switch (FieldIndex) {
   30753           1 :         case 0:
   30754           1 :                 *AType = 2;
   30755           1 :                 *QType = 12;
   30756           1 :                 *b_min = FLT2FIX(0);
   30757           1 :                 *b_max = FIX_MAX;
   30758             :                 return 1;
   30759             :         default:
   30760             :                 return 0;
   30761             :         }
   30762             : }
   30763             : 
   30764             : 
   30765             : 
   30766           5 : GF_Node *Ellipse_Create()
   30767             : {
   30768             :         M_Ellipse *p;
   30769           5 :         GF_SAFEALLOC(p, M_Ellipse);
   30770           5 :         if(!p) return NULL;
   30771           5 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Ellipse);
   30772             : 
   30773             :         /*default field values*/
   30774           5 :         p->radius.x = FLT2FIX(1);
   30775           5 :         p->radius.y = FLT2FIX(1);
   30776           5 :         return (GF_Node *)p;
   30777             : }
   30778             : 
   30779             : 
   30780             : /*
   30781             :         LinearGradient Node deletion
   30782             : */
   30783             : 
   30784         338 : static void LinearGradient_Del(GF_Node *node)
   30785             : {
   30786             :         M_LinearGradient *p = (M_LinearGradient *) node;
   30787         338 :         gf_sg_mffloat_del(p->key);
   30788         338 :         gf_sg_mfcolor_del(p->keyValue);
   30789         338 :         gf_sg_mffloat_del(p->opacity);
   30790         338 :         gf_node_unregister((GF_Node *) p->transform, (GF_Node *) p);
   30791         338 :         gf_node_free((GF_Node *) p);
   30792         338 : }
   30793             : 
   30794             : static const u16 LinearGradient_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30795             : static const u16 LinearGradient_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30796             : static const u16 LinearGradient_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   30797             : static const u16 LinearGradient_Dyn2All[] = { 0, 5};
   30798             : 
   30799             : static u32 LinearGradient_get_field_count(GF_Node *node, u8 IndexMode)
   30800             : {
   30801         580 :         switch(IndexMode) {
   30802             :         case GF_SG_FIELD_CODING_IN:
   30803             :                 return 7;
   30804             :         case GF_SG_FIELD_CODING_DEF:
   30805             :                 return 7;
   30806             :         case GF_SG_FIELD_CODING_OUT:
   30807             :                 return 7;
   30808           1 :         case GF_SG_FIELD_CODING_DYN:
   30809             :                 return 2;
   30810             :         default:
   30811             :                 return 7;
   30812             :         }
   30813             : }
   30814             : 
   30815             : static GF_Err LinearGradient_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30816             : {
   30817         906 :         switch(IndexMode) {
   30818           0 :         case GF_SG_FIELD_CODING_IN:
   30819           0 :                 *allField = LinearGradient_In2All[inField];
   30820             :                 return GF_OK;
   30821         899 :         case GF_SG_FIELD_CODING_DEF:
   30822         899 :                 *allField = LinearGradient_Def2All[inField];
   30823             :                 return GF_OK;
   30824           0 :         case GF_SG_FIELD_CODING_OUT:
   30825           0 :                 *allField = LinearGradient_Out2All[inField];
   30826             :                 return GF_OK;
   30827           0 :         case GF_SG_FIELD_CODING_DYN:
   30828           0 :                 *allField = LinearGradient_Dyn2All[inField];
   30829             :                 return GF_OK;
   30830             :         default:
   30831             :                 return GF_BAD_PARAM;
   30832             :         }
   30833             : }
   30834        5675 : static GF_Err LinearGradient_get_field(GF_Node *node, GF_FieldInfo *info)
   30835             : {
   30836        5675 :         switch (info->fieldIndex) {
   30837         936 :         case 0:
   30838         936 :                 info->name = "endPoint";
   30839         936 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30840         936 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   30841         936 :                 info->far_ptr = & ((M_LinearGradient *) node)->endPoint;
   30842         936 :                 return GF_OK;
   30843         982 :         case 1:
   30844         982 :                 info->name = "key";
   30845         982 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30846         982 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   30847         982 :                 info->far_ptr = & ((M_LinearGradient *) node)->key;
   30848         982 :                 return GF_OK;
   30849         988 :         case 2:
   30850         988 :                 info->name = "keyValue";
   30851         988 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30852         988 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   30853         988 :                 info->far_ptr = & ((M_LinearGradient *) node)->keyValue;
   30854         988 :                 return GF_OK;
   30855         609 :         case 3:
   30856         609 :                 info->name = "opacity";
   30857         609 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30858         609 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   30859         609 :                 info->far_ptr = & ((M_LinearGradient *) node)->opacity;
   30860         609 :                 return GF_OK;
   30861         604 :         case 4:
   30862         604 :                 info->name = "spreadMethod";
   30863         604 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30864         604 :                 info->fieldType = GF_SG_VRML_SFINT32;
   30865         604 :                 info->far_ptr = & ((M_LinearGradient *) node)->spreadMethod;
   30866         604 :                 return GF_OK;
   30867         913 :         case 5:
   30868         913 :                 info->name = "startPoint";
   30869         913 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30870         913 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   30871         913 :                 info->far_ptr = & ((M_LinearGradient *) node)->startPoint;
   30872         913 :                 return GF_OK;
   30873         643 :         case 6:
   30874         643 :                 info->name = "transform";
   30875         643 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   30876         643 :                 info->fieldType = GF_SG_VRML_SFNODE;
   30877         643 :                 info->NDTtype = NDT_SF3DNode;
   30878         643 :                 info->far_ptr = & ((M_LinearGradient *)node)->transform;
   30879         643 :                 return GF_OK;
   30880             :         default:
   30881             :                 return GF_BAD_PARAM;
   30882             :         }
   30883             : }
   30884             : 
   30885             : 
   30886        1035 : static s32 LinearGradient_get_field_index_by_name(char *name)
   30887             : {
   30888        1035 :         if (!strcmp("endPoint", name)) return 0;
   30889         814 :         if (!strcmp("key", name)) return 1;
   30890         583 :         if (!strcmp("keyValue", name)) return 2;
   30891         346 :         if (!strcmp("opacity", name)) return 3;
   30892         314 :         if (!strcmp("spreadMethod", name)) return 4;
   30893         294 :         if (!strcmp("startPoint", name)) return 5;
   30894         103 :         if (!strcmp("transform", name)) return 6;
   30895           0 :         return -1;
   30896             : }
   30897          95 : static Bool LinearGradient_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   30898             : {
   30899          95 :         switch (FieldIndex) {
   30900           1 :         case 0:
   30901           1 :                 *AType = 2;
   30902           1 :                 *QType = 5;
   30903           1 :                 *b_min = FIX_MIN;
   30904           1 :                 *b_max = FIX_MAX;
   30905             :                 return 1;
   30906          41 :         case 1:
   30907          41 :                 *AType = 0;
   30908          41 :                 *QType = 8;
   30909          41 :                 *b_min = FLT2FIX(0);
   30910          41 :                 *b_max = FLT2FIX(1);
   30911             :                 return 1;
   30912          41 :         case 2:
   30913          41 :                 *AType = 0;
   30914          41 :                 *QType = 4;
   30915          41 :                 *b_min = FLT2FIX(0);
   30916          41 :                 *b_max = FLT2FIX(1);
   30917             :                 return 1;
   30918           1 :         case 3:
   30919           1 :                 *AType = 0;
   30920           1 :                 *QType = 7;
   30921           1 :                 *b_min = FLT2FIX(0);
   30922           1 :                 *b_max = FLT2FIX(1);
   30923             :                 return 1;
   30924           1 :         case 4:
   30925           1 :                 *AType = 0;
   30926           1 :                 *QType = 13;
   30927           1 :                 *QT13_bits = 2;
   30928           1 :                 *b_min = FLT2FIX(0);
   30929           1 :                 *b_max = FLT2FIX(2);
   30930             :                 return 1;
   30931           9 :         case 5:
   30932           9 :                 *AType = 2;
   30933           9 :                 *QType = 5;
   30934           9 :                 *b_min = FIX_MIN;
   30935           9 :                 *b_max = FIX_MAX;
   30936             :                 return 1;
   30937             :         default:
   30938             :                 return 0;
   30939             :         }
   30940             : }
   30941             : 
   30942             : 
   30943             : 
   30944         338 : GF_Node *LinearGradient_Create()
   30945             : {
   30946             :         M_LinearGradient *p;
   30947         338 :         GF_SAFEALLOC(p, M_LinearGradient);
   30948         338 :         if(!p) return NULL;
   30949         338 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_LinearGradient);
   30950             : 
   30951             :         /*default field values*/
   30952         338 :         p->endPoint.x = FLT2FIX(1);
   30953         338 :         p->endPoint.y = FLT2FIX(0);
   30954         338 :         p->opacity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   30955         338 :         p->opacity.count = 1;
   30956         338 :         p->opacity.vals[0] = FLT2FIX(1);
   30957         338 :         p->spreadMethod = 0;
   30958         338 :         p->startPoint.x = FLT2FIX(0);
   30959         338 :         p->startPoint.y = FLT2FIX(0);
   30960         338 :         return (GF_Node *)p;
   30961             : }
   30962             : 
   30963             : 
   30964             : /*
   30965             :         PathLayout Node deletion
   30966             : */
   30967             : 
   30968          68 : static void PathLayout_Del(GF_Node *node)
   30969             : {
   30970             :         M_PathLayout *p = (M_PathLayout *) node;
   30971          68 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   30972          68 :         gf_sg_mfint32_del(p->alignment);
   30973          68 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   30974          68 :         gf_node_free((GF_Node *) p);
   30975          68 : }
   30976             : 
   30977             : static const u16 PathLayout_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9};
   30978             : static const u16 PathLayout_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   30979             : static const u16 PathLayout_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9};
   30980             : static const u16 PathLayout_Dyn2All[] = { 5, 6};
   30981             : 
   30982             : static u32 PathLayout_get_field_count(GF_Node *node, u8 IndexMode)
   30983             : {
   30984             :         switch(IndexMode) {
   30985             :         case GF_SG_FIELD_CODING_IN:
   30986             :                 return 10;
   30987             :         case GF_SG_FIELD_CODING_DEF:
   30988             :                 return 8;
   30989             :         case GF_SG_FIELD_CODING_OUT:
   30990             :                 return 8;
   30991             :         case GF_SG_FIELD_CODING_DYN:
   30992             :                 return 2;
   30993             :         default:
   30994             :                 return 10;
   30995             :         }
   30996             : }
   30997             : 
   30998             : static GF_Err PathLayout_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   30999             : {
   31000         185 :         switch(IndexMode) {
   31001           0 :         case GF_SG_FIELD_CODING_IN:
   31002           0 :                 *allField = PathLayout_In2All[inField];
   31003             :                 return GF_OK;
   31004         175 :         case GF_SG_FIELD_CODING_DEF:
   31005         175 :                 *allField = PathLayout_Def2All[inField];
   31006             :                 return GF_OK;
   31007           0 :         case GF_SG_FIELD_CODING_OUT:
   31008           0 :                 *allField = PathLayout_Out2All[inField];
   31009             :                 return GF_OK;
   31010           0 :         case GF_SG_FIELD_CODING_DYN:
   31011           0 :                 *allField = PathLayout_Dyn2All[inField];
   31012             :                 return GF_OK;
   31013             :         default:
   31014             :                 return GF_BAD_PARAM;
   31015             :         }
   31016             : }
   31017         627 : static GF_Err PathLayout_get_field(GF_Node *node, GF_FieldInfo *info)
   31018             : {
   31019         627 :         switch (info->fieldIndex) {
   31020          17 :         case 0:
   31021          17 :                 info->name = "addChildren";
   31022          17 :                 info->eventType = GF_SG_EVENT_IN;
   31023          17 :                 info->on_event_in = ((M_PathLayout *)node)->on_addChildren;
   31024          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31025          17 :                 info->NDTtype = NDT_SF2DNode;
   31026          17 :                 info->far_ptr = & ((M_PathLayout *)node)->addChildren;
   31027          17 :                 return GF_OK;
   31028          17 :         case 1:
   31029          17 :                 info->name = "removeChildren";
   31030          17 :                 info->eventType = GF_SG_EVENT_IN;
   31031          17 :                 info->on_event_in = ((M_PathLayout *)node)->on_removeChildren;
   31032          17 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31033          17 :                 info->NDTtype = NDT_SF2DNode;
   31034          17 :                 info->far_ptr = & ((M_PathLayout *)node)->removeChildren;
   31035          17 :                 return GF_OK;
   31036          39 :         case 2:
   31037          39 :                 info->name = "children";
   31038          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31039          39 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31040          39 :                 info->NDTtype = NDT_SF2DNode;
   31041          39 :                 info->far_ptr = & ((M_PathLayout *)node)->children;
   31042          39 :                 return GF_OK;
   31043          39 :         case 3:
   31044          39 :                 info->name = "geometry";
   31045          39 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31046          39 :                 info->fieldType = GF_SG_VRML_SFNODE;
   31047          39 :                 info->NDTtype = NDT_SFGeometryNode;
   31048          39 :                 info->far_ptr = & ((M_PathLayout *)node)->geometry;
   31049          39 :                 return GF_OK;
   31050         133 :         case 4:
   31051         133 :                 info->name = "alignment";
   31052         133 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31053         133 :                 info->fieldType = GF_SG_VRML_MFINT32;
   31054         133 :                 info->far_ptr = & ((M_PathLayout *) node)->alignment;
   31055         133 :                 return GF_OK;
   31056          78 :         case 5:
   31057          78 :                 info->name = "pathOffset";
   31058          78 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31059          78 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31060          78 :                 info->far_ptr = & ((M_PathLayout *) node)->pathOffset;
   31061          78 :                 return GF_OK;
   31062          72 :         case 6:
   31063          72 :                 info->name = "spacing";
   31064          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31065          72 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31066          72 :                 info->far_ptr = & ((M_PathLayout *) node)->spacing;
   31067          72 :                 return GF_OK;
   31068          72 :         case 7:
   31069          72 :                 info->name = "reverseLayout";
   31070          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31071          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31072          72 :                 info->far_ptr = & ((M_PathLayout *) node)->reverseLayout;
   31073          72 :                 return GF_OK;
   31074          88 :         case 8:
   31075          88 :                 info->name = "wrapMode";
   31076          88 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31077          88 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31078          88 :                 info->far_ptr = & ((M_PathLayout *) node)->wrapMode;
   31079          88 :                 return GF_OK;
   31080          72 :         case 9:
   31081          72 :                 info->name = "splitText";
   31082          72 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31083          72 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31084          72 :                 info->far_ptr = & ((M_PathLayout *) node)->splitText;
   31085          72 :                 return GF_OK;
   31086             :         default:
   31087             :                 return GF_BAD_PARAM;
   31088             :         }
   31089             : }
   31090             : 
   31091             : 
   31092          43 : static s32 PathLayout_get_field_index_by_name(char *name)
   31093             : {
   31094          43 :         if (!strcmp("addChildren", name)) return 0;
   31095          42 :         if (!strcmp("removeChildren", name)) return 1;
   31096          41 :         if (!strcmp("children", name)) return 2;
   31097          38 :         if (!strcmp("geometry", name)) return 3;
   31098          35 :         if (!strcmp("alignment", name)) return 4;
   31099          17 :         if (!strcmp("pathOffset", name)) return 5;
   31100          12 :         if (!strcmp("spacing", name)) return 6;
   31101          11 :         if (!strcmp("reverseLayout", name)) return 7;
   31102          10 :         if (!strcmp("wrapMode", name)) return 8;
   31103           1 :         if (!strcmp("splitText", name)) return 9;
   31104           0 :         return -1;
   31105             : }
   31106             : static Bool PathLayout_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31107             : {
   31108          26 :         switch (FieldIndex) {
   31109          17 :         case 4:
   31110          17 :                 *AType = 0;
   31111          17 :                 *QType = 13;
   31112          17 :                 *QT13_bits = 2;
   31113          17 :                 *b_min = FLT2FIX(-1);
   31114          17 :                 *b_max = FLT2FIX(1);
   31115             :                 return 1;
   31116           1 :         case 5:
   31117           1 :                 *AType = 7;
   31118           1 :                 *QType = 7;
   31119           1 :                 *b_min = FIX_MIN;
   31120           1 :                 *b_max = FIX_MAX;
   31121             :                 return 1;
   31122           1 :         case 6:
   31123           1 :                 *AType = 7;
   31124           1 :                 *QType = 7;
   31125           1 :                 *b_min = FIX_MIN;
   31126           1 :                 *b_max = FIX_MAX;
   31127             :                 return 1;
   31128           1 :         case 8:
   31129           1 :                 *AType = 0;
   31130           1 :                 *QType = 13;
   31131           1 :                 *QT13_bits = 2;
   31132           1 :                 *b_min = FLT2FIX(0);
   31133           1 :                 *b_max = FLT2FIX(2);
   31134             :                 return 1;
   31135             :         default:
   31136             :                 return 0;
   31137             :         }
   31138             : }
   31139             : 
   31140             : 
   31141             : 
   31142          68 : GF_Node *PathLayout_Create()
   31143             : {
   31144             :         M_PathLayout *p;
   31145          68 :         GF_SAFEALLOC(p, M_PathLayout);
   31146          68 :         if(!p) return NULL;
   31147          68 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PathLayout);
   31148          68 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   31149             : 
   31150             :         /*default field values*/
   31151          68 :         p->alignment.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   31152          68 :         p->alignment.count = 1;
   31153          68 :         p->alignment.vals[0] = 0;
   31154          68 :         p->pathOffset = FLT2FIX(0);
   31155          68 :         p->spacing = FLT2FIX(1.0);
   31156          68 :         p->wrapMode = 0;
   31157          68 :         p->splitText = 1;
   31158          68 :         return (GF_Node *)p;
   31159             : }
   31160             : 
   31161             : 
   31162             : /*
   31163             :         RadialGradient Node deletion
   31164             : */
   31165             : 
   31166         497 : static void RadialGradient_Del(GF_Node *node)
   31167             : {
   31168             :         M_RadialGradient *p = (M_RadialGradient *) node;
   31169         497 :         gf_sg_mffloat_del(p->key);
   31170         497 :         gf_sg_mfcolor_del(p->keyValue);
   31171         497 :         gf_sg_mffloat_del(p->opacity);
   31172         497 :         gf_node_unregister((GF_Node *) p->transform, (GF_Node *) p);
   31173         497 :         gf_node_free((GF_Node *) p);
   31174         497 : }
   31175             : 
   31176             : static const u16 RadialGradient_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   31177             : static const u16 RadialGradient_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   31178             : static const u16 RadialGradient_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   31179             : static const u16 RadialGradient_Dyn2All[] = { 0, 1, 5};
   31180             : 
   31181             : static u32 RadialGradient_get_field_count(GF_Node *node, u8 IndexMode)
   31182             : {
   31183         618 :         switch(IndexMode) {
   31184             :         case GF_SG_FIELD_CODING_IN:
   31185             :                 return 8;
   31186             :         case GF_SG_FIELD_CODING_DEF:
   31187             :                 return 8;
   31188             :         case GF_SG_FIELD_CODING_OUT:
   31189             :                 return 8;
   31190           1 :         case GF_SG_FIELD_CODING_DYN:
   31191             :                 return 3;
   31192             :         default:
   31193             :                 return 8;
   31194             :         }
   31195             : }
   31196             : 
   31197             : static GF_Err RadialGradient_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31198             : {
   31199         221 :         switch(IndexMode) {
   31200           0 :         case GF_SG_FIELD_CODING_IN:
   31201           0 :                 *allField = RadialGradient_In2All[inField];
   31202             :                 return GF_OK;
   31203         213 :         case GF_SG_FIELD_CODING_DEF:
   31204         213 :                 *allField = RadialGradient_Def2All[inField];
   31205             :                 return GF_OK;
   31206           0 :         case GF_SG_FIELD_CODING_OUT:
   31207           0 :                 *allField = RadialGradient_Out2All[inField];
   31208             :                 return GF_OK;
   31209           0 :         case GF_SG_FIELD_CODING_DYN:
   31210           0 :                 *allField = RadialGradient_Dyn2All[inField];
   31211             :                 return GF_OK;
   31212             :         default:
   31213             :                 return GF_BAD_PARAM;
   31214             :         }
   31215             : }
   31216        8364 : static GF_Err RadialGradient_get_field(GF_Node *node, GF_FieldInfo *info)
   31217             : {
   31218        8364 :         switch (info->fieldIndex) {
   31219        1008 :         case 0:
   31220        1008 :                 info->name = "center";
   31221        1008 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31222        1008 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31223        1008 :                 info->far_ptr = & ((M_RadialGradient *) node)->center;
   31224        1008 :                 return GF_OK;
   31225        1108 :         case 1:
   31226        1108 :                 info->name = "focalPoint";
   31227        1108 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31228        1108 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31229        1108 :                 info->far_ptr = & ((M_RadialGradient *) node)->focalPoint;
   31230        1108 :                 return GF_OK;
   31231        1104 :         case 2:
   31232        1104 :                 info->name = "key";
   31233        1104 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31234        1104 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   31235        1104 :                 info->far_ptr = & ((M_RadialGradient *) node)->key;
   31236        1104 :                 return GF_OK;
   31237        1104 :         case 3:
   31238        1104 :                 info->name = "keyValue";
   31239        1104 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31240        1104 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   31241        1104 :                 info->far_ptr = & ((M_RadialGradient *) node)->keyValue;
   31242        1104 :                 return GF_OK;
   31243        1037 :         case 4:
   31244        1037 :                 info->name = "opacity";
   31245        1037 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31246        1037 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   31247        1037 :                 info->far_ptr = & ((M_RadialGradient *) node)->opacity;
   31248        1037 :                 return GF_OK;
   31249        1010 :         case 5:
   31250        1010 :                 info->name = "radius";
   31251        1010 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31252        1010 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31253        1010 :                 info->far_ptr = & ((M_RadialGradient *) node)->radius;
   31254        1010 :                 return GF_OK;
   31255        1023 :         case 6:
   31256        1023 :                 info->name = "spreadMethod";
   31257        1023 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31258        1023 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31259        1023 :                 info->far_ptr = & ((M_RadialGradient *) node)->spreadMethod;
   31260        1023 :                 return GF_OK;
   31261         970 :         case 7:
   31262         970 :                 info->name = "transform";
   31263         970 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31264         970 :                 info->fieldType = GF_SG_VRML_SFNODE;
   31265         970 :                 info->NDTtype = NDT_SF3DNode;
   31266         970 :                 info->far_ptr = & ((M_RadialGradient *)node)->transform;
   31267         970 :                 return GF_OK;
   31268             :         default:
   31269             :                 return GF_BAD_PARAM;
   31270             :         }
   31271             : }
   31272             : 
   31273             : 
   31274         226 : static s32 RadialGradient_get_field_index_by_name(char *name)
   31275             : {
   31276         226 :         if (!strcmp("center", name)) return 0;
   31277         222 :         if (!strcmp("focalPoint", name)) return 1;
   31278         164 :         if (!strcmp("key", name)) return 2;
   31279         108 :         if (!strcmp("keyValue", name)) return 3;
   31280          52 :         if (!strcmp("opacity", name)) return 4;
   31281          18 :         if (!strcmp("radius", name)) return 5;
   31282          12 :         if (!strcmp("spreadMethod", name)) return 6;
   31283           2 :         if (!strcmp("transform", name)) return 7;
   31284           0 :         return -1;
   31285             : }
   31286          64 : static Bool RadialGradient_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31287             : {
   31288          64 :         switch (FieldIndex) {
   31289           1 :         case 0:
   31290           1 :                 *AType = 2;
   31291           1 :                 *QType = 5;
   31292           1 :                 *b_min = FIX_MIN;
   31293           1 :                 *b_max = FIX_MAX;
   31294             :                 return 1;
   31295           9 :         case 1:
   31296           9 :                 *AType = 2;
   31297           9 :                 *QType = 5;
   31298           9 :                 *b_min = FIX_MIN;
   31299           9 :                 *b_max = FIX_MAX;
   31300             :                 return 1;
   31301          25 :         case 2:
   31302          25 :                 *AType = 0;
   31303          25 :                 *QType = 8;
   31304          25 :                 *b_min = FLT2FIX(0);
   31305          25 :                 *b_max = FLT2FIX(1);
   31306             :                 return 1;
   31307          25 :         case 3:
   31308          25 :                 *AType = 0;
   31309          25 :                 *QType = 4;
   31310          25 :                 *b_min = FLT2FIX(0);
   31311          25 :                 *b_max = FLT2FIX(1);
   31312             :                 return 1;
   31313           1 :         case 4:
   31314           1 :                 *AType = 0;
   31315           1 :                 *QType = 7;
   31316           1 :                 *b_min = FLT2FIX(0);
   31317           1 :                 *b_max = FLT2FIX(1);
   31318             :                 return 1;
   31319           1 :         case 5:
   31320           1 :                 *AType = 7;
   31321           1 :                 *QType = 12;
   31322           1 :                 *b_min = FLT2FIX(0);
   31323           1 :                 *b_max = FIX_MAX;
   31324             :                 return 1;
   31325           1 :         case 6:
   31326           1 :                 *AType = 0;
   31327           1 :                 *QType = 13;
   31328           1 :                 *QT13_bits = 2;
   31329           1 :                 *b_min = FLT2FIX(0);
   31330           1 :                 *b_max = FLT2FIX(2);
   31331             :                 return 1;
   31332             :         default:
   31333             :                 return 0;
   31334             :         }
   31335             : }
   31336             : 
   31337             : 
   31338             : 
   31339         497 : GF_Node *RadialGradient_Create()
   31340             : {
   31341             :         M_RadialGradient *p;
   31342         497 :         GF_SAFEALLOC(p, M_RadialGradient);
   31343         497 :         if(!p) return NULL;
   31344         497 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_RadialGradient);
   31345             : 
   31346             :         /*default field values*/
   31347         497 :         p->center.x = FLT2FIX(0.5);
   31348         497 :         p->center.y = FLT2FIX(0.5);
   31349         497 :         p->focalPoint.x = FLT2FIX(0);
   31350         497 :         p->focalPoint.y = FLT2FIX(0);
   31351         497 :         p->opacity.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   31352         497 :         p->opacity.count = 1;
   31353         497 :         p->opacity.vals[0] = FLT2FIX(1);
   31354         497 :         p->radius = FLT2FIX(0.5);
   31355         497 :         p->spreadMethod = 0;
   31356         497 :         return (GF_Node *)p;
   31357             : }
   31358             : 
   31359             : 
   31360             : /*
   31361             :         SynthesizedTexture Node deletion
   31362             : */
   31363             : 
   31364           1 : static void SynthesizedTexture_Del(GF_Node *node)
   31365             : {
   31366             :         M_SynthesizedTexture *p = (M_SynthesizedTexture *) node;
   31367           1 :         gf_sg_mfvec3f_del(p->translation);
   31368           1 :         gf_sg_mfrotation_del(p->rotation);
   31369           1 :         gf_sg_mfurl_del(p->url);
   31370           1 :         gf_node_free((GF_Node *) p);
   31371           1 : }
   31372             : 
   31373             : static const u16 SynthesizedTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   31374             : static const u16 SynthesizedTexture_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   31375             : static const u16 SynthesizedTexture_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   31376             : static const u16 SynthesizedTexture_Dyn2All[] = { 0, 1, 5};
   31377             : 
   31378             : static u32 SynthesizedTexture_get_field_count(GF_Node *node, u8 IndexMode)
   31379             : {
   31380             :         switch(IndexMode) {
   31381             :         case GF_SG_FIELD_CODING_IN:
   31382             :                 return 9;
   31383             :         case GF_SG_FIELD_CODING_DEF:
   31384             :                 return 9;
   31385             :         case GF_SG_FIELD_CODING_OUT:
   31386             :                 return 11;
   31387             :         case GF_SG_FIELD_CODING_DYN:
   31388             :                 return 3;
   31389             :         default:
   31390             :                 return 11;
   31391             :         }
   31392             : }
   31393             : 
   31394             : static GF_Err SynthesizedTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31395             : {
   31396          11 :         switch(IndexMode) {
   31397           0 :         case GF_SG_FIELD_CODING_IN:
   31398           0 :                 *allField = SynthesizedTexture_In2All[inField];
   31399             :                 return GF_OK;
   31400           0 :         case GF_SG_FIELD_CODING_DEF:
   31401           0 :                 *allField = SynthesizedTexture_Def2All[inField];
   31402             :                 return GF_OK;
   31403           0 :         case GF_SG_FIELD_CODING_OUT:
   31404           0 :                 *allField = SynthesizedTexture_Out2All[inField];
   31405             :                 return GF_OK;
   31406           0 :         case GF_SG_FIELD_CODING_DYN:
   31407           0 :                 *allField = SynthesizedTexture_Dyn2All[inField];
   31408             :                 return GF_OK;
   31409             :         default:
   31410             :                 return GF_BAD_PARAM;
   31411             :         }
   31412             : }
   31413          22 : static GF_Err SynthesizedTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   31414             : {
   31415          22 :         switch (info->fieldIndex) {
   31416           2 :         case 0:
   31417           2 :                 info->name = "translation";
   31418           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31419           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   31420           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->translation;
   31421           2 :                 return GF_OK;
   31422           2 :         case 1:
   31423           2 :                 info->name = "rotation";
   31424           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31425           2 :                 info->fieldType = GF_SG_VRML_MFROTATION;
   31426           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->rotation;
   31427           2 :                 return GF_OK;
   31428           2 :         case 2:
   31429           2 :                 info->name = "pixelWidth";
   31430           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31431           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31432           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->pixelWidth;
   31433           2 :                 return GF_OK;
   31434           2 :         case 3:
   31435           2 :                 info->name = "pixelHeight";
   31436           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31437           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31438           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->pixelHeight;
   31439           2 :                 return GF_OK;
   31440           2 :         case 4:
   31441           2 :                 info->name = "loop";
   31442           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31443           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31444           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->loop;
   31445           2 :                 return GF_OK;
   31446           2 :         case 5:
   31447           2 :                 info->name = "speed";
   31448           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31449           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31450           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->speed;
   31451           2 :                 return GF_OK;
   31452           2 :         case 6:
   31453           2 :                 info->name = "startTime";
   31454           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31455           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31456           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->startTime;
   31457           2 :                 return GF_OK;
   31458           2 :         case 7:
   31459           2 :                 info->name = "stopTime";
   31460           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31461           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31462           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->stopTime;
   31463           2 :                 return GF_OK;
   31464           2 :         case 8:
   31465           2 :                 info->name = "url";
   31466           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31467           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   31468           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->url;
   31469           2 :                 return GF_OK;
   31470           2 :         case 9:
   31471           2 :                 info->name = "duration_changed";
   31472           2 :                 info->eventType = GF_SG_EVENT_OUT;
   31473           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31474           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->duration_changed;
   31475           2 :                 return GF_OK;
   31476           2 :         case 10:
   31477           2 :                 info->name = "isActive";
   31478           2 :                 info->eventType = GF_SG_EVENT_OUT;
   31479           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31480           2 :                 info->far_ptr = & ((M_SynthesizedTexture *) node)->isActive;
   31481           2 :                 return GF_OK;
   31482             :         default:
   31483             :                 return GF_BAD_PARAM;
   31484             :         }
   31485             : }
   31486             : 
   31487             : 
   31488          11 : static s32 SynthesizedTexture_get_field_index_by_name(char *name)
   31489             : {
   31490          11 :         if (!strcmp("translation", name)) return 0;
   31491          10 :         if (!strcmp("rotation", name)) return 1;
   31492           9 :         if (!strcmp("pixelWidth", name)) return 2;
   31493           8 :         if (!strcmp("pixelHeight", name)) return 3;
   31494           7 :         if (!strcmp("loop", name)) return 4;
   31495           6 :         if (!strcmp("speed", name)) return 5;
   31496           5 :         if (!strcmp("startTime", name)) return 6;
   31497           4 :         if (!strcmp("stopTime", name)) return 7;
   31498           3 :         if (!strcmp("url", name)) return 8;
   31499           2 :         if (!strcmp("duration_changed", name)) return 9;
   31500           1 :         if (!strcmp("isActive", name)) return 10;
   31501           0 :         return -1;
   31502             : }
   31503          11 : static Bool SynthesizedTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31504             : {
   31505          11 :         switch (FieldIndex) {
   31506           1 :         case 0:
   31507           1 :                 *AType = 1;
   31508           1 :                 *QType = 1;
   31509           1 :                 *b_min = FIX_MIN;
   31510           1 :                 *b_max = FIX_MAX;
   31511             :                 return 1;
   31512           1 :         case 1:
   31513           1 :                 *AType = 10;
   31514           1 :                 *QType = 10;
   31515           1 :                 *b_min = FIX_MIN;
   31516           1 :                 *b_max = FIX_MAX;
   31517             :                 return 1;
   31518           1 :         case 2:
   31519           1 :                 *AType = 0;
   31520           1 :                 *QType = 13;
   31521           1 :                 *QT13_bits = 16;
   31522           1 :                 *b_min = FLT2FIX(0);
   31523           1 :                 *b_max = FIX_MAX;
   31524             :                 return 1;
   31525           1 :         case 3:
   31526           1 :                 *AType = 0;
   31527           1 :                 *QType = 13;
   31528           1 :                 *QT13_bits = 16;
   31529           1 :                 *b_min = FLT2FIX(0);
   31530           1 :                 *b_max = FIX_MAX;
   31531             :                 return 1;
   31532           1 :         case 5:
   31533           1 :                 *AType = 7;
   31534           1 :                 *QType = 0;
   31535           1 :                 *b_min = FIX_MIN;
   31536           1 :                 *b_max = FIX_MAX;
   31537             :                 return 1;
   31538             :         default:
   31539             :                 return 0;
   31540             :         }
   31541             : }
   31542             : 
   31543             : 
   31544             : 
   31545           1 : GF_Node *SynthesizedTexture_Create()
   31546             : {
   31547             :         M_SynthesizedTexture *p;
   31548           1 :         GF_SAFEALLOC(p, M_SynthesizedTexture);
   31549           1 :         if(!p) return NULL;
   31550           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SynthesizedTexture);
   31551             : 
   31552             :         /*default field values*/
   31553           1 :         p->pixelWidth = -1;
   31554           1 :         p->pixelHeight = -1;
   31555           1 :         p->speed = FLT2FIX(1.0);
   31556           1 :         p->startTime = 0;
   31557           1 :         p->stopTime = 0;
   31558           1 :         return (GF_Node *)p;
   31559             : }
   31560             : 
   31561             : 
   31562             : /*
   31563             :         TransformMatrix2D Node deletion
   31564             : */
   31565             : 
   31566             : static void TransformMatrix2D_Del(GF_Node *node)
   31567             : {
   31568             :         M_TransformMatrix2D *p = (M_TransformMatrix2D *) node;
   31569        7370 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   31570        7370 :         gf_node_free((GF_Node *) p);
   31571             : }
   31572             : 
   31573             : static const u16 TransformMatrix2D_Def2All[] = { 2, 3, 4, 5, 6, 7, 8};
   31574             : static const u16 TransformMatrix2D_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   31575             : static const u16 TransformMatrix2D_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
   31576             : static const u16 TransformMatrix2D_Dyn2All[] = { 3, 4, 5, 6, 7, 8};
   31577             : 
   31578             : static u32 TransformMatrix2D_get_field_count(GF_Node *node, u8 IndexMode)
   31579             : {
   31580             :         switch(IndexMode) {
   31581             :         case GF_SG_FIELD_CODING_IN:
   31582             :                 return 9;
   31583             :         case GF_SG_FIELD_CODING_DEF:
   31584             :                 return 7;
   31585             :         case GF_SG_FIELD_CODING_OUT:
   31586             :                 return 7;
   31587             :         case GF_SG_FIELD_CODING_DYN:
   31588             :                 return 6;
   31589             :         default:
   31590             :                 return 9;
   31591             :         }
   31592             : }
   31593             : 
   31594             : static GF_Err TransformMatrix2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31595             : {
   31596       27524 :         switch(IndexMode) {
   31597           0 :         case GF_SG_FIELD_CODING_IN:
   31598           0 :                 *allField = TransformMatrix2D_In2All[inField];
   31599             :                 return GF_OK;
   31600       27515 :         case GF_SG_FIELD_CODING_DEF:
   31601       27515 :                 *allField = TransformMatrix2D_Def2All[inField];
   31602             :                 return GF_OK;
   31603           0 :         case GF_SG_FIELD_CODING_OUT:
   31604           0 :                 *allField = TransformMatrix2D_Out2All[inField];
   31605             :                 return GF_OK;
   31606           0 :         case GF_SG_FIELD_CODING_DYN:
   31607           0 :                 *allField = TransformMatrix2D_Dyn2All[inField];
   31608             :                 return GF_OK;
   31609             :         default:
   31610             :                 return GF_BAD_PARAM;
   31611             :         }
   31612             : }
   31613       64458 : static GF_Err TransformMatrix2D_get_field(GF_Node *node, GF_FieldInfo *info)
   31614             : {
   31615       64458 :         switch (info->fieldIndex) {
   31616          32 :         case 0:
   31617          32 :                 info->name = "addChildren";
   31618          32 :                 info->eventType = GF_SG_EVENT_IN;
   31619          32 :                 info->on_event_in = ((M_TransformMatrix2D *)node)->on_addChildren;
   31620          32 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31621          32 :                 info->NDTtype = NDT_SF2DNode;
   31622          32 :                 info->far_ptr = & ((M_TransformMatrix2D *)node)->addChildren;
   31623          32 :                 return GF_OK;
   31624          32 :         case 1:
   31625          32 :                 info->name = "removeChildren";
   31626          32 :                 info->eventType = GF_SG_EVENT_IN;
   31627          32 :                 info->on_event_in = ((M_TransformMatrix2D *)node)->on_removeChildren;
   31628          32 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31629          32 :                 info->NDTtype = NDT_SF2DNode;
   31630          32 :                 info->far_ptr = & ((M_TransformMatrix2D *)node)->removeChildren;
   31631          32 :                 return GF_OK;
   31632        7259 :         case 2:
   31633        7259 :                 info->name = "children";
   31634        7259 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31635        7259 :                 info->fieldType = GF_SG_VRML_MFNODE;
   31636        7259 :                 info->NDTtype = NDT_SF2DNode;
   31637        7259 :                 info->far_ptr = & ((M_TransformMatrix2D *)node)->children;
   31638        7259 :                 return GF_OK;
   31639        9995 :         case 3:
   31640        9995 :                 info->name = "mxx";
   31641        9995 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31642        9995 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31643        9995 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->mxx;
   31644        9995 :                 return GF_OK;
   31645        8144 :         case 4:
   31646        8144 :                 info->name = "mxy";
   31647        8144 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31648        8144 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31649        8144 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->mxy;
   31650        8144 :                 return GF_OK;
   31651       10470 :         case 5:
   31652       10470 :                 info->name = "tx";
   31653       10470 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31654       10470 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31655       10470 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->tx;
   31656       10470 :                 return GF_OK;
   31657        8061 :         case 6:
   31658        8061 :                 info->name = "myx";
   31659        8061 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31660        8061 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31661        8061 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->myx;
   31662        8061 :                 return GF_OK;
   31663        9993 :         case 7:
   31664        9993 :                 info->name = "myy";
   31665        9993 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31666        9993 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31667        9993 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->myy;
   31668        9993 :                 return GF_OK;
   31669       10472 :         case 8:
   31670       10472 :                 info->name = "ty";
   31671       10472 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31672       10472 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31673       10472 :                 info->far_ptr = & ((M_TransformMatrix2D *) node)->ty;
   31674       10472 :                 return GF_OK;
   31675             :         default:
   31676             :                 return GF_BAD_PARAM;
   31677             :         }
   31678             : }
   31679             : 
   31680             : 
   31681          81 : static s32 TransformMatrix2D_get_field_index_by_name(char *name)
   31682             : {
   31683          81 :         if (!strcmp("addChildren", name)) return 0;
   31684          80 :         if (!strcmp("removeChildren", name)) return 1;
   31685          79 :         if (!strcmp("children", name)) return 2;
   31686          52 :         if (!strcmp("mxx", name)) return 3;
   31687          45 :         if (!strcmp("mxy", name)) return 4;
   31688          29 :         if (!strcmp("tx", name)) return 5;
   31689          23 :         if (!strcmp("myx", name)) return 6;
   31690          16 :         if (!strcmp("myy", name)) return 7;
   31691           8 :         if (!strcmp("ty", name)) return 8;
   31692           0 :         return -1;
   31693             : }
   31694           9 : static Bool TransformMatrix2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31695             : {
   31696           9 :         switch (FieldIndex) {
   31697           1 :         case 3:
   31698           1 :                 *AType = 7;
   31699           1 :                 *QType = 7;
   31700           1 :                 *b_min = FIX_MIN;
   31701           1 :                 *b_max = FIX_MAX;
   31702             :                 return 1;
   31703           1 :         case 4:
   31704           1 :                 *AType = 7;
   31705           1 :                 *QType = 7;
   31706           1 :                 *b_min = FIX_MIN;
   31707           1 :                 *b_max = FIX_MAX;
   31708             :                 return 1;
   31709           1 :         case 5:
   31710           1 :                 *AType = 7;
   31711           1 :                 *QType = 7;
   31712           1 :                 *b_min = FIX_MIN;
   31713           1 :                 *b_max = FIX_MAX;
   31714             :                 return 1;
   31715           1 :         case 6:
   31716           1 :                 *AType = 7;
   31717           1 :                 *QType = 7;
   31718           1 :                 *b_min = FIX_MIN;
   31719           1 :                 *b_max = FIX_MAX;
   31720             :                 return 1;
   31721           1 :         case 7:
   31722           1 :                 *AType = 7;
   31723           1 :                 *QType = 7;
   31724           1 :                 *b_min = FIX_MIN;
   31725           1 :                 *b_max = FIX_MAX;
   31726             :                 return 1;
   31727           1 :         case 8:
   31728           1 :                 *AType = 7;
   31729           1 :                 *QType = 7;
   31730           1 :                 *b_min = FIX_MIN;
   31731           1 :                 *b_max = FIX_MAX;
   31732             :                 return 1;
   31733             :         default:
   31734             :                 return 0;
   31735             :         }
   31736             : }
   31737             : 
   31738             : 
   31739             : 
   31740        7370 : GF_Node *TransformMatrix2D_Create()
   31741             : {
   31742             :         M_TransformMatrix2D *p;
   31743        7370 :         GF_SAFEALLOC(p, M_TransformMatrix2D);
   31744        7370 :         if(!p) return NULL;
   31745        7370 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_TransformMatrix2D);
   31746        7370 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   31747             : 
   31748             :         /*default field values*/
   31749        7370 :         p->mxx = FLT2FIX(1);
   31750        7370 :         p->mxy = FLT2FIX(0);
   31751        7370 :         p->tx = FLT2FIX(0);
   31752        7370 :         p->myx = FLT2FIX(0);
   31753        7370 :         p->myy = FLT2FIX(1);
   31754        7370 :         p->ty = FLT2FIX(0);
   31755        7370 :         return (GF_Node *)p;
   31756             : }
   31757             : 
   31758             : 
   31759             : /*
   31760             :         Viewport Node deletion
   31761             : */
   31762             : 
   31763         106 : static void Viewport_Del(GF_Node *node)
   31764             : {
   31765             :         M_Viewport *p = (M_Viewport *) node;
   31766         106 :         gf_sg_mfint32_del(p->alignment);
   31767         106 :         gf_sg_sfstring_del(p->description);
   31768         106 :         gf_node_free((GF_Node *) p);
   31769         106 : }
   31770             : 
   31771             : static const u16 Viewport_Def2All[] = { 1, 2, 3, 4, 5, 6};
   31772             : static const u16 Viewport_In2All[] = { 0, 1, 2, 3, 4, 5};
   31773             : static const u16 Viewport_Out2All[] = { 1, 2, 3, 4, 5, 7, 8};
   31774             : static const u16 Viewport_Dyn2All[] = { 1, 2, 3};
   31775             : 
   31776             : static u32 Viewport_get_field_count(GF_Node *node, u8 IndexMode)
   31777             : {
   31778             :         switch(IndexMode) {
   31779             :         case GF_SG_FIELD_CODING_IN:
   31780             :                 return 6;
   31781             :         case GF_SG_FIELD_CODING_DEF:
   31782             :                 return 6;
   31783             :         case GF_SG_FIELD_CODING_OUT:
   31784             :                 return 7;
   31785             :         case GF_SG_FIELD_CODING_DYN:
   31786             :                 return 3;
   31787             :         default:
   31788             :                 return 9;
   31789             :         }
   31790             : }
   31791             : 
   31792             : static GF_Err Viewport_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31793             : {
   31794         174 :         switch(IndexMode) {
   31795           0 :         case GF_SG_FIELD_CODING_IN:
   31796           0 :                 *allField = Viewport_In2All[inField];
   31797             :                 return GF_OK;
   31798         165 :         case GF_SG_FIELD_CODING_DEF:
   31799         165 :                 *allField = Viewport_Def2All[inField];
   31800             :                 return GF_OK;
   31801           0 :         case GF_SG_FIELD_CODING_OUT:
   31802           0 :                 *allField = Viewport_Out2All[inField];
   31803             :                 return GF_OK;
   31804           0 :         case GF_SG_FIELD_CODING_DYN:
   31805           0 :                 *allField = Viewport_Dyn2All[inField];
   31806             :                 return GF_OK;
   31807             :         default:
   31808             :                 return GF_BAD_PARAM;
   31809             :         }
   31810             : }
   31811         863 : static GF_Err Viewport_get_field(GF_Node *node, GF_FieldInfo *info)
   31812             : {
   31813         863 :         switch (info->fieldIndex) {
   31814          21 :         case 0:
   31815          21 :                 info->name = "set_bind";
   31816          21 :                 info->eventType = GF_SG_EVENT_IN;
   31817          21 :                 info->on_event_in = ((M_Viewport *)node)->on_set_bind;
   31818          21 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31819          21 :                 info->far_ptr = & ((M_Viewport *) node)->set_bind;
   31820          21 :                 return GF_OK;
   31821         104 :         case 1:
   31822         104 :                 info->name = "position";
   31823         104 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31824         104 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31825         104 :                 info->far_ptr = & ((M_Viewport *) node)->position;
   31826         104 :                 return GF_OK;
   31827         162 :         case 2:
   31828         162 :                 info->name = "size";
   31829         162 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31830         162 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   31831         162 :                 info->far_ptr = & ((M_Viewport *) node)->size;
   31832         162 :                 return GF_OK;
   31833         117 :         case 3:
   31834         117 :                 info->name = "orientation";
   31835         117 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31836         117 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   31837         117 :                 info->far_ptr = & ((M_Viewport *) node)->orientation;
   31838         117 :                 return GF_OK;
   31839         153 :         case 4:
   31840         153 :                 info->name = "alignment";
   31841         153 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31842         153 :                 info->fieldType = GF_SG_VRML_MFINT32;
   31843         153 :                 info->far_ptr = & ((M_Viewport *) node)->alignment;
   31844         153 :                 return GF_OK;
   31845         154 :         case 5:
   31846         154 :                 info->name = "fit";
   31847         154 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   31848         154 :                 info->fieldType = GF_SG_VRML_SFINT32;
   31849         154 :                 info->far_ptr = & ((M_Viewport *) node)->fit;
   31850         154 :                 return GF_OK;
   31851         118 :         case 6:
   31852         118 :                 info->name = "description";
   31853         118 :                 info->eventType = GF_SG_EVENT_FIELD;
   31854         118 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   31855         118 :                 info->far_ptr = & ((M_Viewport *) node)->description;
   31856         118 :                 return GF_OK;
   31857          17 :         case 7:
   31858          17 :                 info->name = "bindTime";
   31859          17 :                 info->eventType = GF_SG_EVENT_OUT;
   31860          17 :                 info->fieldType = GF_SG_VRML_SFTIME;
   31861          17 :                 info->far_ptr = & ((M_Viewport *) node)->bindTime;
   31862          17 :                 return GF_OK;
   31863          17 :         case 8:
   31864          17 :                 info->name = "isBound";
   31865          17 :                 info->eventType = GF_SG_EVENT_OUT;
   31866          17 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   31867          17 :                 info->far_ptr = & ((M_Viewport *) node)->isBound;
   31868          17 :                 return GF_OK;
   31869             :         default:
   31870             :                 return GF_BAD_PARAM;
   31871             :         }
   31872             : }
   31873             : 
   31874             : 
   31875         252 : static s32 Viewport_get_field_index_by_name(char *name)
   31876             : {
   31877         252 :         if (!strcmp("set_bind", name)) return 0;
   31878         249 :         if (!strcmp("position", name)) return 1;
   31879         206 :         if (!strcmp("size", name)) return 2;
   31880         144 :         if (!strcmp("orientation", name)) return 3;
   31881         127 :         if (!strcmp("alignment", name)) return 4;
   31882          74 :         if (!strcmp("fit", name)) return 5;
   31883          20 :         if (!strcmp("description", name)) return 6;
   31884           2 :         if (!strcmp("bindTime", name)) return 7;
   31885           1 :         if (!strcmp("isBound", name)) return 8;
   31886           0 :         return -1;
   31887             : }
   31888          24 : static Bool Viewport_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   31889             : {
   31890          24 :         switch (FieldIndex) {
   31891           1 :         case 1:
   31892           1 :                 *AType = 1;
   31893           1 :                 *QType = 1;
   31894           1 :                 *b_min = FIX_MIN;
   31895           1 :                 *b_max = FIX_MAX;
   31896             :                 return 1;
   31897           4 :         case 2:
   31898           4 :                 *AType = 12;
   31899           4 :                 *QType = 12;
   31900           4 :                 *b_min = FIX_MIN;
   31901           4 :                 *b_max = FIX_MAX;
   31902             :                 return 1;
   31903           4 :         case 3:
   31904           4 :                 *AType = 6;
   31905           4 :                 *QType = 6;
   31906           4 :                 *b_min = FLT2FIX(0);
   31907           4 :                 *b_max = FLT2FIX(6.2831853);
   31908             :                 return 1;
   31909           7 :         case 4:
   31910           7 :                 *AType = 0;
   31911           7 :                 *QType = 13;
   31912           7 :                 *QT13_bits = 3;
   31913           7 :                 *b_min = FLT2FIX(-1);
   31914           7 :                 *b_max = FLT2FIX(1);
   31915             :                 return 1;
   31916           4 :         case 5:
   31917           4 :                 *AType = 0;
   31918           4 :                 *QType = 13;
   31919           4 :                 *QT13_bits = 3;
   31920           4 :                 *b_min = FLT2FIX(0);
   31921           4 :                 *b_max = FLT2FIX(2);
   31922             :                 return 1;
   31923             :         default:
   31924             :                 return 0;
   31925             :         }
   31926             : }
   31927             : 
   31928             : 
   31929             : 
   31930         106 : GF_Node *Viewport_Create()
   31931             : {
   31932             :         M_Viewport *p;
   31933         106 :         GF_SAFEALLOC(p, M_Viewport);
   31934         106 :         if(!p) return NULL;
   31935         106 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Viewport);
   31936             : 
   31937             :         /*default field values*/
   31938         106 :         p->position.x = FLT2FIX(0);
   31939         106 :         p->position.y = FLT2FIX(0);
   31940         106 :         p->size.x = FLT2FIX(-1);
   31941         106 :         p->size.y = FLT2FIX(-1);
   31942         106 :         p->orientation = FLT2FIX(0);
   31943         106 :         p->alignment.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   31944         106 :         p->alignment.count = 1;
   31945         106 :         p->alignment.vals[0] = 0;
   31946         106 :         p->fit = 0;
   31947         106 :         return (GF_Node *)p;
   31948             : }
   31949             : 
   31950             : 
   31951             : /*
   31952             :         XCurve2D Node deletion
   31953             : */
   31954             : 
   31955         834 : static void XCurve2D_Del(GF_Node *node)
   31956             : {
   31957             :         M_XCurve2D *p = (M_XCurve2D *) node;
   31958         834 :         gf_node_unregister((GF_Node *) p->point, (GF_Node *) p);
   31959         834 :         gf_sg_mfint32_del(p->type);
   31960         834 :         gf_node_free((GF_Node *) p);
   31961         834 : }
   31962             : 
   31963             : static const u16 XCurve2D_Def2All[] = { 0, 1, 2};
   31964             : static const u16 XCurve2D_In2All[] = { 0, 1, 2};
   31965             : static const u16 XCurve2D_Out2All[] = { 0, 1, 2};
   31966             : static const u16 XCurve2D_Dyn2All[] = { 1};
   31967             : 
   31968             : static u32 XCurve2D_get_field_count(GF_Node *node, u8 IndexMode)
   31969             : {
   31970         790 :         switch(IndexMode) {
   31971             :         case GF_SG_FIELD_CODING_IN:
   31972             :                 return 3;
   31973             :         case GF_SG_FIELD_CODING_DEF:
   31974             :                 return 3;
   31975             :         case GF_SG_FIELD_CODING_OUT:
   31976             :                 return 3;
   31977           1 :         case GF_SG_FIELD_CODING_DYN:
   31978             :                 return 1;
   31979             :         default:
   31980             :                 return 3;
   31981             :         }
   31982             : }
   31983             : 
   31984             : static GF_Err XCurve2D_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   31985             : {
   31986        1164 :         switch(IndexMode) {
   31987           0 :         case GF_SG_FIELD_CODING_IN:
   31988           0 :                 *allField = XCurve2D_In2All[inField];
   31989             :                 return GF_OK;
   31990        1161 :         case GF_SG_FIELD_CODING_DEF:
   31991        1161 :                 *allField = XCurve2D_Def2All[inField];
   31992             :                 return GF_OK;
   31993           0 :         case GF_SG_FIELD_CODING_OUT:
   31994           0 :                 *allField = XCurve2D_Out2All[inField];
   31995             :                 return GF_OK;
   31996           0 :         case GF_SG_FIELD_CODING_DYN:
   31997           0 :                 *allField = XCurve2D_Dyn2All[inField];
   31998             :                 return GF_OK;
   31999             :         default:
   32000             :                 return GF_BAD_PARAM;
   32001             :         }
   32002             : }
   32003             : static GF_Err XCurve2D_get_field(GF_Node *node, GF_FieldInfo *info)
   32004             : {
   32005        3167 :         switch (info->fieldIndex) {
   32006         816 :         case 0:
   32007         816 :                 info->name = "point";
   32008         816 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32009         816 :                 info->fieldType = GF_SG_VRML_SFNODE;
   32010         816 :                 info->NDTtype = NDT_SFCoordinate2DNode;
   32011         816 :                 info->far_ptr = & ((M_XCurve2D *)node)->point;
   32012             :                 return GF_OK;
   32013        1143 :         case 1:
   32014        1143 :                 info->name = "fineness";
   32015        1143 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32016        1143 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32017        1143 :                 info->far_ptr = & ((M_XCurve2D *) node)->fineness;
   32018             :                 return GF_OK;
   32019        1208 :         case 2:
   32020        1208 :                 info->name = "type";
   32021        1208 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32022        1208 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32023        1208 :                 info->far_ptr = & ((M_XCurve2D *) node)->type;
   32024             :                 return GF_OK;
   32025             :         default:
   32026             :                 return GF_BAD_PARAM;
   32027             :         }
   32028             : }
   32029             : 
   32030             : 
   32031          45 : static s32 XCurve2D_get_field_index_by_name(char *name)
   32032             : {
   32033          45 :         if (!strcmp("point", name)) return 0;
   32034          23 :         if (!strcmp("fineness", name)) return 1;
   32035          22 :         if (!strcmp("type", name)) return 2;
   32036           0 :         return -1;
   32037             : }
   32038             : static Bool XCurve2D_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32039             : {
   32040          11 :         switch (FieldIndex) {
   32041           1 :         case 1:
   32042           1 :                 *AType = 7;
   32043           1 :                 *QType = 0;
   32044           1 :                 *b_min = FLT2FIX(0);
   32045           1 :                 *b_max = FLT2FIX(1);
   32046             :                 return 1;
   32047           9 :         case 2:
   32048           9 :                 *AType = 0;
   32049           9 :                 *QType = 13;
   32050           9 :                 *QT13_bits = 4;
   32051           9 :                 *b_min = FLT2FIX(0);
   32052           9 :                 *b_max = FLT2FIX(15);
   32053             :                 return 1;
   32054             :         default:
   32055             :                 return 0;
   32056             :         }
   32057             : }
   32058             : 
   32059             : 
   32060             : 
   32061         834 : GF_Node *XCurve2D_Create()
   32062             : {
   32063             :         M_XCurve2D *p;
   32064         834 :         GF_SAFEALLOC(p, M_XCurve2D);
   32065         834 :         if(!p) return NULL;
   32066         834 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XCurve2D);
   32067             : 
   32068             :         /*default field values*/
   32069         834 :         p->fineness = FLT2FIX(0.5);
   32070         834 :         return (GF_Node *)p;
   32071             : }
   32072             : 
   32073             : 
   32074             : /*
   32075             :         XFontStyle Node deletion
   32076             : */
   32077             : 
   32078           1 : static void XFontStyle_Del(GF_Node *node)
   32079             : {
   32080             :         M_XFontStyle *p = (M_XFontStyle *) node;
   32081           1 :         gf_sg_mfstring_del(p->fontName);
   32082           1 :         gf_sg_mfstring_del(p->justify);
   32083           1 :         gf_sg_sfstring_del(p->language);
   32084           1 :         gf_sg_sfstring_del(p->stretch);
   32085           1 :         gf_sg_sfstring_del(p->style);
   32086           1 :         gf_sg_mfstring_del(p->featureName);
   32087           1 :         gf_sg_mfint32_del(p->featureStartOffset);
   32088           1 :         gf_sg_mfint32_del(p->featureLength);
   32089           1 :         gf_sg_mfint32_del(p->featureValue);
   32090           1 :         gf_node_free((GF_Node *) p);
   32091           1 : }
   32092             : 
   32093             : static const u16 XFontStyle_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
   32094             : static const u16 XFontStyle_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
   32095             : static const u16 XFontStyle_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
   32096             : 
   32097             : static u32 XFontStyle_get_field_count(GF_Node *node, u8 IndexMode)
   32098             : {
   32099           6 :         switch(IndexMode) {
   32100             :         case GF_SG_FIELD_CODING_IN:
   32101             :                 return 17;
   32102             :         case GF_SG_FIELD_CODING_DEF:
   32103             :                 return 17;
   32104             :         case GF_SG_FIELD_CODING_OUT:
   32105             :                 return 17;
   32106           1 :         case GF_SG_FIELD_CODING_DYN:
   32107             :                 return 0;
   32108             :         default:
   32109             :                 return 17;
   32110             :         }
   32111             : }
   32112             : 
   32113             : static GF_Err XFontStyle_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32114             : {
   32115          17 :         switch(IndexMode) {
   32116           0 :         case GF_SG_FIELD_CODING_IN:
   32117           0 :                 *allField = XFontStyle_In2All[inField];
   32118             :                 return GF_OK;
   32119           0 :         case GF_SG_FIELD_CODING_DEF:
   32120           0 :                 *allField = XFontStyle_Def2All[inField];
   32121             :                 return GF_OK;
   32122           0 :         case GF_SG_FIELD_CODING_OUT:
   32123           0 :                 *allField = XFontStyle_Out2All[inField];
   32124             :                 return GF_OK;
   32125             :         default:
   32126             :                 return GF_BAD_PARAM;
   32127             :         }
   32128             : }
   32129          34 : static GF_Err XFontStyle_get_field(GF_Node *node, GF_FieldInfo *info)
   32130             : {
   32131          34 :         switch (info->fieldIndex) {
   32132           2 :         case 0:
   32133           2 :                 info->name = "fontName";
   32134           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32135           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   32136           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->fontName;
   32137           2 :                 return GF_OK;
   32138           2 :         case 1:
   32139           2 :                 info->name = "horizontal";
   32140           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32141           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32142           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->horizontal;
   32143           2 :                 return GF_OK;
   32144           2 :         case 2:
   32145           2 :                 info->name = "justify";
   32146           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32147           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   32148           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->justify;
   32149           2 :                 return GF_OK;
   32150           2 :         case 3:
   32151           2 :                 info->name = "language";
   32152           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32153           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   32154           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->language;
   32155           2 :                 return GF_OK;
   32156           2 :         case 4:
   32157           2 :                 info->name = "leftToRight";
   32158           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32159           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32160           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->leftToRight;
   32161           2 :                 return GF_OK;
   32162           2 :         case 5:
   32163           2 :                 info->name = "size";
   32164           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32165           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32166           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->size;
   32167           2 :                 return GF_OK;
   32168           2 :         case 6:
   32169           2 :                 info->name = "stretch";
   32170           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32171           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   32172           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->stretch;
   32173           2 :                 return GF_OK;
   32174           2 :         case 7:
   32175           2 :                 info->name = "letterSpacing";
   32176           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32177           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32178           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->letterSpacing;
   32179           2 :                 return GF_OK;
   32180           2 :         case 8:
   32181           2 :                 info->name = "wordSpacing";
   32182           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32183           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32184           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->wordSpacing;
   32185           2 :                 return GF_OK;
   32186           2 :         case 9:
   32187           2 :                 info->name = "weight";
   32188           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32189           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32190           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->weight;
   32191           2 :                 return GF_OK;
   32192           2 :         case 10:
   32193           2 :                 info->name = "fontKerning";
   32194           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32195           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32196           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->fontKerning;
   32197           2 :                 return GF_OK;
   32198           2 :         case 11:
   32199           2 :                 info->name = "style";
   32200           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32201           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   32202           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->style;
   32203           2 :                 return GF_OK;
   32204           2 :         case 12:
   32205           2 :                 info->name = "topToBottom";
   32206           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32207           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32208           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->topToBottom;
   32209           2 :                 return GF_OK;
   32210           2 :         case 13:
   32211           2 :                 info->name = "featureName";
   32212           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32213           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   32214           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureName;
   32215           2 :                 return GF_OK;
   32216           2 :         case 14:
   32217           2 :                 info->name = "featureStartOffset";
   32218           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32219           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32220           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureStartOffset;
   32221           2 :                 return GF_OK;
   32222           2 :         case 15:
   32223           2 :                 info->name = "featureLength";
   32224           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32225           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32226           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureLength;
   32227           2 :                 return GF_OK;
   32228           2 :         case 16:
   32229           2 :                 info->name = "featureValue";
   32230           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32231           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32232           2 :                 info->far_ptr = & ((M_XFontStyle *) node)->featureValue;
   32233           2 :                 return GF_OK;
   32234             :         default:
   32235             :                 return GF_BAD_PARAM;
   32236             :         }
   32237             : }
   32238             : 
   32239             : 
   32240          17 : static s32 XFontStyle_get_field_index_by_name(char *name)
   32241             : {
   32242          17 :         if (!strcmp("fontName", name)) return 0;
   32243          16 :         if (!strcmp("horizontal", name)) return 1;
   32244          15 :         if (!strcmp("justify", name)) return 2;
   32245          14 :         if (!strcmp("language", name)) return 3;
   32246          13 :         if (!strcmp("leftToRight", name)) return 4;
   32247          12 :         if (!strcmp("size", name)) return 5;
   32248          11 :         if (!strcmp("stretch", name)) return 6;
   32249          10 :         if (!strcmp("letterSpacing", name)) return 7;
   32250           9 :         if (!strcmp("wordSpacing", name)) return 8;
   32251           8 :         if (!strcmp("weight", name)) return 9;
   32252           7 :         if (!strcmp("fontKerning", name)) return 10;
   32253           6 :         if (!strcmp("style", name)) return 11;
   32254           5 :         if (!strcmp("topToBottom", name)) return 12;
   32255           4 :         if (!strcmp("featureName", name)) return 13;
   32256           3 :         if (!strcmp("featureStartOffset", name)) return 14;
   32257           2 :         if (!strcmp("featureLength", name)) return 15;
   32258           1 :         if (!strcmp("featureValue", name)) return 16;
   32259           0 :         return -1;
   32260             : }
   32261             : static Bool XFontStyle_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32262             : {
   32263          17 :         switch (FieldIndex) {
   32264           1 :         case 5:
   32265           1 :                 *AType = 0;
   32266           1 :                 *QType = 11;
   32267           1 :                 *b_min = FLT2FIX(0);
   32268           1 :                 *b_max = FIX_MAX;
   32269             :                 return 1;
   32270           1 :         case 7:
   32271           1 :                 *AType = 0;
   32272           1 :                 *QType = 11;
   32273           1 :                 *b_min = FLT2FIX(0);
   32274           1 :                 *b_max = FIX_MAX;
   32275             :                 return 1;
   32276           1 :         case 8:
   32277           1 :                 *AType = 0;
   32278           1 :                 *QType = 11;
   32279           1 :                 *b_min = FLT2FIX(0);
   32280           1 :                 *b_max = FIX_MAX;
   32281             :                 return 1;
   32282             :         default:
   32283             :                 return 0;
   32284             :         }
   32285             : }
   32286             : 
   32287             : 
   32288             : 
   32289           1 : GF_Node *XFontStyle_Create()
   32290             : {
   32291             :         M_XFontStyle *p;
   32292           1 :         GF_SAFEALLOC(p, M_XFontStyle);
   32293           1 :         if(!p) return NULL;
   32294           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XFontStyle);
   32295             : 
   32296             :         /*default field values*/
   32297           1 :         p->fontName.vals = (char**)gf_malloc(sizeof(SFString)*1);
   32298           1 :         p->fontName.count = 1;
   32299           1 :         p->fontName.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
   32300           1 :         strcpy(p->fontName.vals[0], "SERIF");
   32301           1 :         p->horizontal = 1;
   32302           1 :         p->justify.vals = (char**)gf_malloc(sizeof(SFString)*1);
   32303           1 :         p->justify.count = 1;
   32304           1 :         p->justify.vals[0] = (char*)gf_malloc(sizeof(char) * 6);
   32305           1 :         strcpy(p->justify.vals[0], "BEGIN");
   32306           1 :         p->leftToRight = 1;
   32307           1 :         p->size = FLT2FIX(1.0);
   32308           1 :         p->stretch.buffer = (char*)gf_malloc(sizeof(char) * 7);
   32309             :         strcpy(p->stretch.buffer, "NORMAL");
   32310           1 :         p->letterSpacing = FLT2FIX(0.0);
   32311           1 :         p->wordSpacing = FLT2FIX(0.0);
   32312           1 :         p->weight = 400;
   32313           1 :         p->fontKerning = 1;
   32314           1 :         p->style.buffer = (char*)gf_malloc(sizeof(char) * 6);
   32315             :         strcpy(p->style.buffer, "PLAIN");
   32316           1 :         p->topToBottom = 1;
   32317           1 :         return (GF_Node *)p;
   32318             : }
   32319             : 
   32320             : 
   32321             : /*
   32322             :         XLineProperties Node deletion
   32323             : */
   32324             : 
   32325         504 : static void XLineProperties_Del(GF_Node *node)
   32326             : {
   32327             :         M_XLineProperties *p = (M_XLineProperties *) node;
   32328         504 :         gf_sg_mffloat_del(p->dashes);
   32329         504 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
   32330         504 :         gf_node_unregister((GF_Node *) p->textureTransform, (GF_Node *) p);
   32331         504 :         gf_node_free((GF_Node *) p);
   32332         504 : }
   32333             : 
   32334             : static const u16 XLineProperties_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   32335             : static const u16 XLineProperties_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   32336             : static const u16 XLineProperties_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   32337             : static const u16 XLineProperties_Dyn2All[] = { 0, 7, 8, 9, 10};
   32338             : 
   32339             : static u32 XLineProperties_get_field_count(GF_Node *node, u8 IndexMode)
   32340             : {
   32341        2909 :         switch(IndexMode) {
   32342             :         case GF_SG_FIELD_CODING_IN:
   32343             :                 return 13;
   32344             :         case GF_SG_FIELD_CODING_DEF:
   32345             :                 return 13;
   32346             :         case GF_SG_FIELD_CODING_OUT:
   32347             :                 return 13;
   32348           1 :         case GF_SG_FIELD_CODING_DYN:
   32349             :                 return 5;
   32350             :         default:
   32351             :                 return 13;
   32352             :         }
   32353             : }
   32354             : 
   32355             : static GF_Err XLineProperties_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32356             : {
   32357         303 :         switch(IndexMode) {
   32358           0 :         case GF_SG_FIELD_CODING_IN:
   32359           0 :                 *allField = XLineProperties_In2All[inField];
   32360             :                 return GF_OK;
   32361         290 :         case GF_SG_FIELD_CODING_DEF:
   32362         290 :                 *allField = XLineProperties_Def2All[inField];
   32363             :                 return GF_OK;
   32364           0 :         case GF_SG_FIELD_CODING_OUT:
   32365           0 :                 *allField = XLineProperties_Out2All[inField];
   32366             :                 return GF_OK;
   32367           0 :         case GF_SG_FIELD_CODING_DYN:
   32368           0 :                 *allField = XLineProperties_Dyn2All[inField];
   32369             :                 return GF_OK;
   32370             :         default:
   32371             :                 return GF_BAD_PARAM;
   32372             :         }
   32373             : }
   32374       44624 : static GF_Err XLineProperties_get_field(GF_Node *node, GF_FieldInfo *info)
   32375             : {
   32376       44624 :         switch (info->fieldIndex) {
   32377        3331 :         case 0:
   32378        3331 :                 info->name = "lineColor";
   32379        3331 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32380        3331 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   32381        3331 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineColor;
   32382        3331 :                 return GF_OK;
   32383        3303 :         case 1:
   32384        3303 :                 info->name = "lineStyle";
   32385        3303 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32386        3303 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32387        3303 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineStyle;
   32388        3303 :                 return GF_OK;
   32389        4086 :         case 2:
   32390        4086 :                 info->name = "isCenterAligned";
   32391        4086 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32392        4086 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32393        4086 :                 info->far_ptr = & ((M_XLineProperties *) node)->isCenterAligned;
   32394        4086 :                 return GF_OK;
   32395        3298 :         case 3:
   32396        3298 :                 info->name = "isScalable";
   32397        3298 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32398        3298 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32399        3298 :                 info->far_ptr = & ((M_XLineProperties *) node)->isScalable;
   32400        3298 :                 return GF_OK;
   32401        3306 :         case 4:
   32402        3306 :                 info->name = "lineCap";
   32403        3306 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32404        3306 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32405        3306 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineCap;
   32406        3306 :                 return GF_OK;
   32407        3297 :         case 5:
   32408        3297 :                 info->name = "lineJoin";
   32409        3297 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32410        3297 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32411        3297 :                 info->far_ptr = & ((M_XLineProperties *) node)->lineJoin;
   32412        3297 :                 return GF_OK;
   32413        3296 :         case 6:
   32414        3296 :                 info->name = "miterLimit";
   32415        3296 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32416        3296 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32417        3296 :                 info->far_ptr = & ((M_XLineProperties *) node)->miterLimit;
   32418        3296 :                 return GF_OK;
   32419        4081 :         case 7:
   32420        4081 :                 info->name = "transparency";
   32421        4081 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32422        4081 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32423        4081 :                 info->far_ptr = & ((M_XLineProperties *) node)->transparency;
   32424        4081 :                 return GF_OK;
   32425        3432 :         case 8:
   32426        3432 :                 info->name = "width";
   32427        3432 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32428        3432 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32429        3432 :                 info->far_ptr = & ((M_XLineProperties *) node)->width;
   32430        3432 :                 return GF_OK;
   32431        3297 :         case 9:
   32432        3297 :                 info->name = "dashOffset";
   32433        3297 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32434        3297 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32435        3297 :                 info->far_ptr = & ((M_XLineProperties *) node)->dashOffset;
   32436        3297 :                 return GF_OK;
   32437        3299 :         case 10:
   32438        3299 :                 info->name = "dashes";
   32439        3299 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32440        3299 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   32441        3299 :                 info->far_ptr = & ((M_XLineProperties *) node)->dashes;
   32442        3299 :                 return GF_OK;
   32443        3335 :         case 11:
   32444        3335 :                 info->name = "texture";
   32445        3335 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32446        3335 :                 info->fieldType = GF_SG_VRML_SFNODE;
   32447        3335 :                 info->NDTtype = NDT_SFTextureNode;
   32448        3335 :                 info->far_ptr = & ((M_XLineProperties *)node)->texture;
   32449        3335 :                 return GF_OK;
   32450        3263 :         case 12:
   32451        3263 :                 info->name = "textureTransform";
   32452        3263 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32453        3263 :                 info->fieldType = GF_SG_VRML_SFNODE;
   32454        3263 :                 info->NDTtype = NDT_SFTextureTransformNode;
   32455        3263 :                 info->far_ptr = & ((M_XLineProperties *)node)->textureTransform;
   32456        3263 :                 return GF_OK;
   32457             :         default:
   32458             :                 return GF_BAD_PARAM;
   32459             :         }
   32460             : }
   32461             : 
   32462             : 
   32463         202 : static s32 XLineProperties_get_field_index_by_name(char *name)
   32464             : {
   32465         202 :         if (!strcmp("lineColor", name)) return 0;
   32466         167 :         if (!strcmp("lineStyle", name)) return 1;
   32467         158 :         if (!strcmp("isCenterAligned", name)) return 2;
   32468         147 :         if (!strcmp("isScalable", name)) return 3;
   32469         143 :         if (!strcmp("lineCap", name)) return 4;
   32470         131 :         if (!strcmp("lineJoin", name)) return 5;
   32471         128 :         if (!strcmp("miterLimit", name)) return 6;
   32472         126 :         if (!strcmp("transparency", name)) return 7;
   32473         121 :         if (!strcmp("width", name)) return 8;
   32474          42 :         if (!strcmp("dashOffset", name)) return 9;
   32475          40 :         if (!strcmp("dashes", name)) return 10;
   32476          36 :         if (!strcmp("texture", name)) return 11;
   32477           4 :         if (!strcmp("textureTransform", name)) return 12;
   32478           0 :         return -1;
   32479             : }
   32480          21 : static Bool XLineProperties_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32481             : {
   32482          21 :         switch (FieldIndex) {
   32483           1 :         case 0:
   32484           1 :                 *AType = 4;
   32485           1 :                 *QType = 4;
   32486           1 :                 *b_min = FLT2FIX(0);
   32487           1 :                 *b_max = FLT2FIX(1);
   32488             :                 return 1;
   32489           1 :         case 1:
   32490           1 :                 *AType = 0;
   32491           1 :                 *QType = 13;
   32492           1 :                 *QT13_bits = 3;
   32493           1 :                 *b_min = FLT2FIX(0);
   32494           1 :                 *b_max = FLT2FIX(5);
   32495             :                 return 1;
   32496           1 :         case 4:
   32497           1 :                 *AType = 0;
   32498           1 :                 *QType = 13;
   32499           1 :                 *QT13_bits = 3;
   32500           1 :                 *b_min = FLT2FIX(0);
   32501           1 :                 *b_max = FLT2FIX(2);
   32502             :                 return 1;
   32503           1 :         case 5:
   32504           1 :                 *AType = 0;
   32505           1 :                 *QType = 13;
   32506           1 :                 *QT13_bits = 3;
   32507           1 :                 *b_min = FLT2FIX(0);
   32508           1 :                 *b_max = FLT2FIX(2);
   32509             :                 return 1;
   32510           1 :         case 6:
   32511           1 :                 *AType = 0;
   32512           1 :                 *QType = 12;
   32513           1 :                 *b_min = FLT2FIX(1);
   32514           1 :                 *b_max = FIX_MAX;
   32515             :                 return 1;
   32516           1 :         case 7:
   32517           1 :                 *AType = 8;
   32518           1 :                 *QType = 4;
   32519           1 :                 *b_min = FLT2FIX(0);
   32520           1 :                 *b_max = FLT2FIX(1);
   32521             :                 return 1;
   32522           9 :         case 8:
   32523           9 :                 *AType = 7;
   32524           9 :                 *QType = 12;
   32525           9 :                 *b_min = FLT2FIX(0);
   32526           9 :                 *b_max = FIX_MAX;
   32527             :                 return 1;
   32528           1 :         case 9:
   32529           1 :                 *AType = 7;
   32530           1 :                 *QType = 12;
   32531           1 :                 *b_min = FLT2FIX(0);
   32532           1 :                 *b_max = FIX_MAX;
   32533             :                 return 1;
   32534           1 :         case 10:
   32535           1 :                 *AType = 7;
   32536           1 :                 *QType = 12;
   32537           1 :                 *b_min = FLT2FIX(0);
   32538           1 :                 *b_max = FIX_MAX;
   32539             :                 return 1;
   32540             :         default:
   32541             :                 return 0;
   32542             :         }
   32543             : }
   32544             : 
   32545             : 
   32546             : 
   32547         504 : GF_Node *XLineProperties_Create()
   32548             : {
   32549             :         M_XLineProperties *p;
   32550         504 :         GF_SAFEALLOC(p, M_XLineProperties);
   32551         504 :         if(!p) return NULL;
   32552         504 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_XLineProperties);
   32553             : 
   32554             :         /*default field values*/
   32555         504 :         p->lineColor.red = FLT2FIX(0);
   32556         504 :         p->lineColor.green = FLT2FIX(0);
   32557         504 :         p->lineColor.blue = FLT2FIX(0);
   32558         504 :         p->lineStyle = 0;
   32559         504 :         p->isCenterAligned = 1;
   32560         504 :         p->isScalable = 1;
   32561         504 :         p->lineCap = 0;
   32562         504 :         p->lineJoin = 0;
   32563         504 :         p->miterLimit = FLT2FIX(4);
   32564         504 :         p->transparency = FLT2FIX(0);
   32565         504 :         p->width = FLT2FIX(1);
   32566         504 :         p->dashOffset = FLT2FIX(0);
   32567         504 :         return (GF_Node *)p;
   32568             : }
   32569             : 
   32570             : 
   32571             : /*
   32572             :         AdvancedAudioBuffer Node deletion
   32573             : */
   32574             : 
   32575           1 : static void AdvancedAudioBuffer_Del(GF_Node *node)
   32576             : {
   32577             :         M_AdvancedAudioBuffer *p = (M_AdvancedAudioBuffer *) node;
   32578           1 :         gf_sg_mfint32_del(p->phaseGroup);
   32579           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   32580           1 :         gf_node_free((GF_Node *) p);
   32581           1 : }
   32582             : 
   32583             : static const u16 AdvancedAudioBuffer_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
   32584             : static const u16 AdvancedAudioBuffer_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
   32585             : static const u16 AdvancedAudioBuffer_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17};
   32586             : static const u16 AdvancedAudioBuffer_Dyn2All[] = { 4};
   32587             : 
   32588             : static u32 AdvancedAudioBuffer_get_field_count(GF_Node *node, u8 IndexMode)
   32589             : {
   32590           6 :         switch(IndexMode) {
   32591             :         case GF_SG_FIELD_CODING_IN:
   32592             :                 return 14;
   32593             :         case GF_SG_FIELD_CODING_DEF:
   32594             :                 return 14;
   32595             :         case GF_SG_FIELD_CODING_OUT:
   32596             :                 return 14;
   32597           1 :         case GF_SG_FIELD_CODING_DYN:
   32598             :                 return 1;
   32599           2 :         default:
   32600             :                 return 18;
   32601             :         }
   32602             : }
   32603             : 
   32604             : static GF_Err AdvancedAudioBuffer_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32605             : {
   32606          18 :         switch(IndexMode) {
   32607           0 :         case GF_SG_FIELD_CODING_IN:
   32608           0 :                 *allField = AdvancedAudioBuffer_In2All[inField];
   32609             :                 return GF_OK;
   32610           0 :         case GF_SG_FIELD_CODING_DEF:
   32611           0 :                 *allField = AdvancedAudioBuffer_Def2All[inField];
   32612             :                 return GF_OK;
   32613           0 :         case GF_SG_FIELD_CODING_OUT:
   32614           0 :                 *allField = AdvancedAudioBuffer_Out2All[inField];
   32615             :                 return GF_OK;
   32616           0 :         case GF_SG_FIELD_CODING_DYN:
   32617           0 :                 *allField = AdvancedAudioBuffer_Dyn2All[inField];
   32618             :                 return GF_OK;
   32619             :         default:
   32620             :                 return GF_BAD_PARAM;
   32621             :         }
   32622             : }
   32623          36 : static GF_Err AdvancedAudioBuffer_get_field(GF_Node *node, GF_FieldInfo *info)
   32624             : {
   32625          36 :         switch (info->fieldIndex) {
   32626           2 :         case 0:
   32627           2 :                 info->name = "addChildren";
   32628           2 :                 info->eventType = GF_SG_EVENT_IN;
   32629           2 :                 info->on_event_in = ((M_AdvancedAudioBuffer *)node)->on_addChildren;
   32630           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32631           2 :                 info->NDTtype = NDT_SFAudioNode;
   32632           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *)node)->addChildren;
   32633           2 :                 return GF_OK;
   32634           2 :         case 1:
   32635           2 :                 info->name = "removeChildren";
   32636           2 :                 info->eventType = GF_SG_EVENT_IN;
   32637           2 :                 info->on_event_in = ((M_AdvancedAudioBuffer *)node)->on_removeChildren;
   32638           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32639           2 :                 info->NDTtype = NDT_SFAudioNode;
   32640           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *)node)->removeChildren;
   32641           2 :                 return GF_OK;
   32642           2 :         case 2:
   32643           2 :                 info->name = "children";
   32644           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32645           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32646           2 :                 info->NDTtype = NDT_SFAudioNode;
   32647           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *)node)->children;
   32648           2 :                 return GF_OK;
   32649           2 :         case 3:
   32650           2 :                 info->name = "loop";
   32651           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32652           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32653           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->loop;
   32654           2 :                 return GF_OK;
   32655           2 :         case 4:
   32656           2 :                 info->name = "pitch";
   32657           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32658           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32659           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->pitch;
   32660           2 :                 return GF_OK;
   32661           2 :         case 5:
   32662           2 :                 info->name = "startTime";
   32663           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32664           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32665           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->startTime;
   32666           2 :                 return GF_OK;
   32667           2 :         case 6:
   32668           2 :                 info->name = "stopTime";
   32669           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32670           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32671           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->stopTime;
   32672           2 :                 return GF_OK;
   32673           2 :         case 7:
   32674           2 :                 info->name = "startLoadTime";
   32675           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32676           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32677           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->startLoadTime;
   32678           2 :                 return GF_OK;
   32679           2 :         case 8:
   32680           2 :                 info->name = "stopLoadTime";
   32681           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32682           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32683           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->stopLoadTime;
   32684           2 :                 return GF_OK;
   32685           2 :         case 9:
   32686           2 :                 info->name = "loadMode";
   32687           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32688           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32689           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->loadMode;
   32690           2 :                 return GF_OK;
   32691           2 :         case 10:
   32692           2 :                 info->name = "numAccumulatedBlocks";
   32693           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32694           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32695           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->numAccumulatedBlocks;
   32696           2 :                 return GF_OK;
   32697           2 :         case 11:
   32698           2 :                 info->name = "deleteBlock";
   32699           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32700           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32701           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->deleteBlock;
   32702           2 :                 return GF_OK;
   32703           2 :         case 12:
   32704           2 :                 info->name = "playBlock";
   32705           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32706           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32707           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->playBlock;
   32708           2 :                 return GF_OK;
   32709           2 :         case 13:
   32710           2 :                 info->name = "length";
   32711           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32712           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   32713           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->length;
   32714           2 :                 return GF_OK;
   32715           2 :         case 14:
   32716           2 :                 info->name = "numChan";
   32717           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   32718           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32719           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->numChan;
   32720           2 :                 return GF_OK;
   32721           2 :         case 15:
   32722           2 :                 info->name = "phaseGroup";
   32723           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   32724           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32725           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->phaseGroup;
   32726           2 :                 return GF_OK;
   32727           2 :         case 16:
   32728           2 :                 info->name = "duration_changed";
   32729           2 :                 info->eventType = GF_SG_EVENT_OUT;
   32730           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   32731           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->duration_changed;
   32732           2 :                 return GF_OK;
   32733           2 :         case 17:
   32734           2 :                 info->name = "isActive";
   32735           2 :                 info->eventType = GF_SG_EVENT_OUT;
   32736           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   32737           2 :                 info->far_ptr = & ((M_AdvancedAudioBuffer *) node)->isActive;
   32738           2 :                 return GF_OK;
   32739             :         default:
   32740             :                 return GF_BAD_PARAM;
   32741             :         }
   32742             : }
   32743             : 
   32744             : 
   32745          18 : static s32 AdvancedAudioBuffer_get_field_index_by_name(char *name)
   32746             : {
   32747          18 :         if (!strcmp("addChildren", name)) return 0;
   32748          17 :         if (!strcmp("removeChildren", name)) return 1;
   32749          16 :         if (!strcmp("children", name)) return 2;
   32750          15 :         if (!strcmp("loop", name)) return 3;
   32751          14 :         if (!strcmp("pitch", name)) return 4;
   32752          13 :         if (!strcmp("startTime", name)) return 5;
   32753          12 :         if (!strcmp("stopTime", name)) return 6;
   32754          11 :         if (!strcmp("startLoadTime", name)) return 7;
   32755          10 :         if (!strcmp("stopLoadTime", name)) return 8;
   32756           9 :         if (!strcmp("loadMode", name)) return 9;
   32757           8 :         if (!strcmp("numAccumulatedBlocks", name)) return 10;
   32758           7 :         if (!strcmp("deleteBlock", name)) return 11;
   32759           6 :         if (!strcmp("playBlock", name)) return 12;
   32760           5 :         if (!strcmp("length", name)) return 13;
   32761           4 :         if (!strcmp("numChan", name)) return 14;
   32762           3 :         if (!strcmp("phaseGroup", name)) return 15;
   32763           2 :         if (!strcmp("duration_changed", name)) return 16;
   32764           1 :         if (!strcmp("isActive", name)) return 17;
   32765           0 :         return -1;
   32766             : }
   32767          18 : static Bool AdvancedAudioBuffer_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   32768             : {
   32769          18 :         switch (FieldIndex) {
   32770           1 :         case 4:
   32771           1 :                 *AType = 7;
   32772           1 :                 *QType = 0;
   32773           1 :                 *b_min = FLT2FIX(0);
   32774           1 :                 *b_max = FIX_MAX;
   32775             :                 return 1;
   32776           1 :         case 5:
   32777           1 :                 *AType = 0;
   32778           1 :                 *QType = 0;
   32779           1 :                 *b_min = FLT2FIX(0);
   32780           1 :                 *b_max = FIX_MAX;
   32781             :                 return 1;
   32782           1 :         case 6:
   32783           1 :                 *AType = 0;
   32784           1 :                 *QType = 0;
   32785           1 :                 *b_min = FLT2FIX(0);
   32786           1 :                 *b_max = FIX_MAX;
   32787             :                 return 1;
   32788           1 :         case 7:
   32789           1 :                 *AType = 0;
   32790           1 :                 *QType = 0;
   32791           1 :                 *b_min = FLT2FIX(0);
   32792           1 :                 *b_max = FIX_MAX;
   32793             :                 return 1;
   32794           1 :         case 8:
   32795           1 :                 *AType = 0;
   32796           1 :                 *QType = 0;
   32797           1 :                 *b_min = FLT2FIX(0);
   32798           1 :                 *b_max = FIX_MAX;
   32799             :                 return 1;
   32800           1 :         case 9:
   32801           1 :                 *AType = 0;
   32802           1 :                 *QType = 13;
   32803           1 :                 *QT13_bits = 3;
   32804           1 :                 *b_min = FLT2FIX(0);
   32805           1 :                 *b_max = FLT2FIX(4);
   32806             :                 return 1;
   32807           1 :         case 10:
   32808           1 :                 *AType = 0;
   32809           1 :                 *QType = 13;
   32810           1 :                 *QT13_bits = 16;
   32811           1 :                 *b_min = FLT2FIX(0);
   32812           1 :                 *b_max = FIX_MAX;
   32813             :                 return 1;
   32814           1 :         case 11:
   32815           1 :                 *AType = 0;
   32816           1 :                 *QType = 13;
   32817           1 :                 *QT13_bits = 17;
   32818           1 :                 *b_min = FIX_MIN;
   32819           1 :                 *b_max = FLT2FIX( 0);
   32820             :                 return 1;
   32821           1 :         case 12:
   32822           1 :                 *AType = 0;
   32823           1 :                 *QType = 13;
   32824           1 :                 *QT13_bits = 17;
   32825           1 :                 *b_min = FIX_MIN;
   32826           1 :                 *b_max = FLT2FIX( 0);
   32827             :                 return 1;
   32828           1 :         case 13:
   32829           1 :                 *AType = 0;
   32830           1 :                 *QType = 0;
   32831           1 :                 *b_min = FLT2FIX(0);
   32832           1 :                 *b_max = FIX_MAX;
   32833             :                 return 1;
   32834           1 :         case 14:
   32835           1 :                 *AType = 0;
   32836           1 :                 *QType = 13;
   32837           1 :                 *QT13_bits = 8;
   32838           1 :                 *b_min = FLT2FIX(0);
   32839           1 :                 *b_max = FLT2FIX(255);
   32840             :                 return 1;
   32841           1 :         case 15:
   32842           1 :                 *AType = 0;
   32843           1 :                 *QType = 13;
   32844           1 :                 *QT13_bits = 8;
   32845           1 :                 *b_min = FLT2FIX(0);
   32846           1 :                 *b_max = FLT2FIX(255);
   32847             :                 return 1;
   32848             :         default:
   32849             :                 return 0;
   32850             :         }
   32851             : }
   32852             : 
   32853             : 
   32854             : 
   32855           1 : GF_Node *AdvancedAudioBuffer_Create()
   32856             : {
   32857             :         M_AdvancedAudioBuffer *p;
   32858           1 :         GF_SAFEALLOC(p, M_AdvancedAudioBuffer);
   32859           1 :         if(!p) return NULL;
   32860           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AdvancedAudioBuffer);
   32861           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   32862             : 
   32863             :         /*default field values*/
   32864           1 :         p->pitch = FLT2FIX(1.0);
   32865           1 :         p->startTime = 0;
   32866           1 :         p->stopTime = 0;
   32867           1 :         p->startLoadTime = 0;
   32868           1 :         p->stopLoadTime = 0;
   32869           1 :         p->loadMode = 0;
   32870           1 :         p->numAccumulatedBlocks = 0;
   32871           1 :         p->deleteBlock = 0;
   32872           1 :         p->playBlock = 0;
   32873           1 :         p->length = FLT2FIX(0.0);
   32874           1 :         p->numChan = 1;
   32875           1 :         return (GF_Node *)p;
   32876             : }
   32877             : 
   32878             : 
   32879             : /*
   32880             :         AudioChannelConfig Node deletion
   32881             : */
   32882             : 
   32883           1 : static void AudioChannelConfig_Del(GF_Node *node)
   32884             : {
   32885             :         M_AudioChannelConfig *p = (M_AudioChannelConfig *) node;
   32886           1 :         gf_sg_mfint32_del(p->channelCoordinateSystems);
   32887           1 :         gf_sg_mffloat_del(p->channelSoundLocation);
   32888           1 :         gf_sg_mfint32_del(p->channelDirectionalPattern);
   32889           1 :         gf_sg_mfvec3f_del(p->channelDirection);
   32890           1 :         gf_sg_mfint32_del(p->ambComponentIndex);
   32891           1 :         gf_sg_mffloat_del(p->ambBackwardMatrix);
   32892           1 :         gf_sg_mfint32_del(p->ambSoundfieldResolution);
   32893           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   32894           1 :         gf_node_free((GF_Node *) p);
   32895           1 : }
   32896             : 
   32897             : static const u16 AudioChannelConfig_Def2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21};
   32898             : static const u16 AudioChannelConfig_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   32899             : static const u16 AudioChannelConfig_Out2All[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   32900             : 
   32901             : static u32 AudioChannelConfig_get_field_count(GF_Node *node, u8 IndexMode)
   32902             : {
   32903             :         switch(IndexMode) {
   32904             :         case GF_SG_FIELD_CODING_IN:
   32905             :                 return 21;
   32906             :         case GF_SG_FIELD_CODING_DEF:
   32907             :                 return 20;
   32908             :         case GF_SG_FIELD_CODING_OUT:
   32909             :                 return 19;
   32910             :         case GF_SG_FIELD_CODING_DYN:
   32911             :                 return 0;
   32912             :         default:
   32913             :                 return 22;
   32914             :         }
   32915             : }
   32916             : 
   32917             : static GF_Err AudioChannelConfig_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   32918             : {
   32919          22 :         switch(IndexMode) {
   32920           0 :         case GF_SG_FIELD_CODING_IN:
   32921           0 :                 *allField = AudioChannelConfig_In2All[inField];
   32922             :                 return GF_OK;
   32923           0 :         case GF_SG_FIELD_CODING_DEF:
   32924           0 :                 *allField = AudioChannelConfig_Def2All[inField];
   32925             :                 return GF_OK;
   32926           0 :         case GF_SG_FIELD_CODING_OUT:
   32927           0 :                 *allField = AudioChannelConfig_Out2All[inField];
   32928             :                 return GF_OK;
   32929             :         default:
   32930             :                 return GF_BAD_PARAM;
   32931             :         }
   32932             : }
   32933          44 : static GF_Err AudioChannelConfig_get_field(GF_Node *node, GF_FieldInfo *info)
   32934             : {
   32935          44 :         switch (info->fieldIndex) {
   32936           2 :         case 0:
   32937           2 :                 info->name = "addChildren";
   32938           2 :                 info->eventType = GF_SG_EVENT_IN;
   32939           2 :                 info->on_event_in = ((M_AudioChannelConfig *)node)->on_addChildren;
   32940           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32941           2 :                 info->NDTtype = NDT_SFAudioNode;
   32942           2 :                 info->far_ptr = & ((M_AudioChannelConfig *)node)->addChildren;
   32943           2 :                 return GF_OK;
   32944           2 :         case 1:
   32945           2 :                 info->name = "removeChildren";
   32946           2 :                 info->eventType = GF_SG_EVENT_IN;
   32947           2 :                 info->on_event_in = ((M_AudioChannelConfig *)node)->on_removeChildren;
   32948           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32949           2 :                 info->NDTtype = NDT_SFAudioNode;
   32950           2 :                 info->far_ptr = & ((M_AudioChannelConfig *)node)->removeChildren;
   32951           2 :                 return GF_OK;
   32952           2 :         case 2:
   32953           2 :                 info->name = "children";
   32954           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32955           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   32956           2 :                 info->NDTtype = NDT_SFAudioNode;
   32957           2 :                 info->far_ptr = & ((M_AudioChannelConfig *)node)->children;
   32958           2 :                 return GF_OK;
   32959           2 :         case 3:
   32960           2 :                 info->name = "generalChannelFormat";
   32961           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32962           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32963           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->generalChannelFormat;
   32964           2 :                 return GF_OK;
   32965           2 :         case 4:
   32966           2 :                 info->name = "fixedPreset";
   32967           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32968           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32969           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->fixedPreset;
   32970           2 :                 return GF_OK;
   32971           2 :         case 5:
   32972           2 :                 info->name = "fixedPresetSubset";
   32973           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32974           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32975           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->fixedPresetSubset;
   32976           2 :                 return GF_OK;
   32977           2 :         case 6:
   32978           2 :                 info->name = "fixedPresetAddInf";
   32979           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32980           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   32981           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->fixedPresetAddInf;
   32982           2 :                 return GF_OK;
   32983           2 :         case 7:
   32984           2 :                 info->name = "channelCoordinateSystems";
   32985           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32986           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32987           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelCoordinateSystems;
   32988           2 :                 return GF_OK;
   32989           2 :         case 8:
   32990           2 :                 info->name = "channelSoundLocation";
   32991           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32992           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   32993           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelSoundLocation;
   32994           2 :                 return GF_OK;
   32995           2 :         case 9:
   32996           2 :                 info->name = "channelDirectionalPattern";
   32997           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   32998           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   32999           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelDirectionalPattern;
   33000           2 :                 return GF_OK;
   33001           2 :         case 10:
   33002           2 :                 info->name = "channelDirection";
   33003           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33004           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33005           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->channelDirection;
   33006           2 :                 return GF_OK;
   33007           2 :         case 11:
   33008           2 :                 info->name = "ambResolution2D";
   33009           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33010           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33011           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambResolution2D;
   33012           2 :                 return GF_OK;
   33013           2 :         case 12:
   33014           2 :                 info->name = "ambResolution3D";
   33015           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33016           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33017           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambResolution3D;
   33018           2 :                 return GF_OK;
   33019           2 :         case 13:
   33020           2 :                 info->name = "ambEncodingConvention";
   33021           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33022           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33023           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambEncodingConvention;
   33024           2 :                 return GF_OK;
   33025           2 :         case 14:
   33026           2 :                 info->name = "ambNfcReferenceDistance";
   33027           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33028           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33029           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambNfcReferenceDistance;
   33030           2 :                 return GF_OK;
   33031           2 :         case 15:
   33032           2 :                 info->name = "ambSoundSpeed";
   33033           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33034           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33035           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambSoundSpeed;
   33036           2 :                 return GF_OK;
   33037           2 :         case 16:
   33038           2 :                 info->name = "ambArrangementRule";
   33039           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33040           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33041           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambArrangementRule;
   33042           2 :                 return GF_OK;
   33043           2 :         case 17:
   33044           2 :                 info->name = "ambRecombinationPreset";
   33045           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33046           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33047           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambRecombinationPreset;
   33048           2 :                 return GF_OK;
   33049           2 :         case 18:
   33050           2 :                 info->name = "ambComponentIndex";
   33051           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33052           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33053           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambComponentIndex;
   33054           2 :                 return GF_OK;
   33055           2 :         case 19:
   33056           2 :                 info->name = "ambBackwardMatrix";
   33057           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33058           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   33059           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambBackwardMatrix;
   33060           2 :                 return GF_OK;
   33061           2 :         case 20:
   33062           2 :                 info->name = "ambSoundfieldResolution";
   33063           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33064           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33065           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->ambSoundfieldResolution;
   33066           2 :                 return GF_OK;
   33067           2 :         case 21:
   33068           2 :                 info->name = "numChannel";
   33069           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33070           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33071           2 :                 info->far_ptr = & ((M_AudioChannelConfig *) node)->numChannel;
   33072           2 :                 return GF_OK;
   33073             :         default:
   33074             :                 return GF_BAD_PARAM;
   33075             :         }
   33076             : }
   33077             : 
   33078             : 
   33079          22 : static s32 AudioChannelConfig_get_field_index_by_name(char *name)
   33080             : {
   33081          22 :         if (!strcmp("addChildren", name)) return 0;
   33082          21 :         if (!strcmp("removeChildren", name)) return 1;
   33083          20 :         if (!strcmp("children", name)) return 2;
   33084          19 :         if (!strcmp("generalChannelFormat", name)) return 3;
   33085          18 :         if (!strcmp("fixedPreset", name)) return 4;
   33086          17 :         if (!strcmp("fixedPresetSubset", name)) return 5;
   33087          16 :         if (!strcmp("fixedPresetAddInf", name)) return 6;
   33088          15 :         if (!strcmp("channelCoordinateSystems", name)) return 7;
   33089          14 :         if (!strcmp("channelSoundLocation", name)) return 8;
   33090          13 :         if (!strcmp("channelDirectionalPattern", name)) return 9;
   33091          12 :         if (!strcmp("channelDirection", name)) return 10;
   33092          11 :         if (!strcmp("ambResolution2D", name)) return 11;
   33093          10 :         if (!strcmp("ambResolution3D", name)) return 12;
   33094           9 :         if (!strcmp("ambEncodingConvention", name)) return 13;
   33095           8 :         if (!strcmp("ambNfcReferenceDistance", name)) return 14;
   33096           7 :         if (!strcmp("ambSoundSpeed", name)) return 15;
   33097           6 :         if (!strcmp("ambArrangementRule", name)) return 16;
   33098           5 :         if (!strcmp("ambRecombinationPreset", name)) return 17;
   33099           4 :         if (!strcmp("ambComponentIndex", name)) return 18;
   33100           3 :         if (!strcmp("ambBackwardMatrix", name)) return 19;
   33101           2 :         if (!strcmp("ambSoundfieldResolution", name)) return 20;
   33102           1 :         if (!strcmp("numChannel", name)) return 21;
   33103           0 :         return -1;
   33104             : }
   33105          22 : static Bool AudioChannelConfig_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33106             : {
   33107          22 :         switch (FieldIndex) {
   33108           1 :         case 3:
   33109           1 :                 *AType = 0;
   33110           1 :                 *QType = 13;
   33111           1 :                 *QT13_bits = 3;
   33112           1 :                 *b_min = FLT2FIX(0);
   33113           1 :                 *b_max = FLT2FIX(4);
   33114             :                 return 1;
   33115           1 :         case 4:
   33116           1 :                 *AType = 0;
   33117           1 :                 *QType = 13;
   33118           1 :                 *QT13_bits = 4;
   33119           1 :                 *b_min = FLT2FIX(0);
   33120           1 :                 *b_max = FLT2FIX(15);
   33121             :                 return 1;
   33122           1 :         case 6:
   33123           1 :                 *AType = 0;
   33124           1 :                 *QType = 13;
   33125           1 :                 *QT13_bits = 3;
   33126           1 :                 *b_min = FLT2FIX(0);
   33127           1 :                 *b_max = FLT2FIX(2);
   33128             :                 return 1;
   33129           1 :         case 7:
   33130           1 :                 *AType = 0;
   33131           1 :                 *QType = 13;
   33132           1 :                 *QT13_bits = 3;
   33133           1 :                 *b_min = FLT2FIX(0);
   33134           1 :                 *b_max = FLT2FIX(6);
   33135             :                 return 1;
   33136           1 :         case 9:
   33137           1 :                 *AType = 0;
   33138           1 :                 *QType = 13;
   33139           1 :                 *QT13_bits = 3;
   33140           1 :                 *b_min = FLT2FIX(0);
   33141           1 :                 *b_max = FLT2FIX(2);
   33142             :                 return 1;
   33143           1 :         case 11:
   33144           1 :                 *AType = 0;
   33145           1 :                 *QType = 13;
   33146           1 :                 *QT13_bits = 7;
   33147           1 :                 *b_min = FLT2FIX(0);
   33148           1 :                 *b_max = FLT2FIX(127);
   33149             :                 return 1;
   33150           1 :         case 12:
   33151           1 :                 *AType = 0;
   33152           1 :                 *QType = 13;
   33153           1 :                 *QT13_bits = 4;
   33154           1 :                 *b_min = FLT2FIX(0);
   33155           1 :                 *b_max = FLT2FIX(15);
   33156             :                 return 1;
   33157           1 :         case 13:
   33158           1 :                 *AType = 0;
   33159           1 :                 *QType = 13;
   33160           1 :                 *QT13_bits = 3;
   33161           1 :                 *b_min = FLT2FIX(0);
   33162           1 :                 *b_max = FLT2FIX(5);
   33163             :                 return 1;
   33164           1 :         case 16:
   33165           1 :                 *AType = 0;
   33166           1 :                 *QType = 13;
   33167           1 :                 *QT13_bits = 3;
   33168           1 :                 *b_min = FLT2FIX(0);
   33169           1 :                 *b_max = FLT2FIX(7);
   33170             :                 return 1;
   33171           1 :         case 17:
   33172           1 :                 *AType = 0;
   33173           1 :                 *QType = 13;
   33174           1 :                 *QT13_bits = 4;
   33175           1 :                 *b_min = FLT2FIX(0);
   33176           1 :                 *b_max = FLT2FIX(15);
   33177             :                 return 1;
   33178           1 :         case 18:
   33179           1 :                 *AType = 0;
   33180           1 :                 *QType = 13;
   33181           1 :                 *QT13_bits = 8;
   33182           1 :                 *b_min = FLT2FIX(0);
   33183           1 :                 *b_max = FLT2FIX(255);
   33184             :                 return 1;
   33185           1 :         case 20:
   33186           1 :                 *AType = 0;
   33187           1 :                 *QType = 13;
   33188           1 :                 *QT13_bits = 7;
   33189           1 :                 *b_min = FLT2FIX(0);
   33190           1 :                 *b_max = FLT2FIX(127);
   33191             :                 return 1;
   33192           1 :         case 21:
   33193           1 :                 *AType = 0;
   33194           1 :                 *QType = 13;
   33195           1 :                 *QT13_bits = 8;
   33196           1 :                 *b_min = FLT2FIX(0);
   33197           1 :                 *b_max = FLT2FIX(255);
   33198             :                 return 1;
   33199             :         default:
   33200             :                 return 0;
   33201             :         }
   33202             : }
   33203             : 
   33204             : 
   33205             : 
   33206           1 : GF_Node *AudioChannelConfig_Create()
   33207             : {
   33208             :         M_AudioChannelConfig *p;
   33209           1 :         GF_SAFEALLOC(p, M_AudioChannelConfig);
   33210           1 :         if(!p) return NULL;
   33211           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_AudioChannelConfig);
   33212           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   33213             : 
   33214             :         /*default field values*/
   33215           1 :         p->generalChannelFormat = 0;
   33216           1 :         p->fixedPreset = 0;
   33217           1 :         p->fixedPresetSubset = 0;
   33218           1 :         p->fixedPresetAddInf = 0;
   33219           1 :         p->ambResolution2D = 1;
   33220           1 :         p->ambResolution3D = 0;
   33221           1 :         p->ambEncodingConvention = 0;
   33222           1 :         p->ambNfcReferenceDistance = FLT2FIX(1.5);
   33223           1 :         p->ambSoundSpeed = FLT2FIX(340.0);
   33224           1 :         p->ambArrangementRule = 0;
   33225           1 :         p->ambRecombinationPreset = 0;
   33226           1 :         p->numChannel = 0;
   33227           1 :         return (GF_Node *)p;
   33228             : }
   33229             : 
   33230             : 
   33231             : /*
   33232             :         DepthImageV2 Node deletion
   33233             : */
   33234             : 
   33235             : static void DepthImageV2_Del(GF_Node *node)
   33236             : {
   33237             :         M_DepthImageV2 *p = (M_DepthImageV2 *) node;
   33238           1 :         gf_node_unregister((GF_Node *) p->diTexture, (GF_Node *) p);
   33239           1 :         gf_node_free((GF_Node *) p);
   33240             : }
   33241             : 
   33242             : static const u16 DepthImageV2_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33243             : 
   33244             : static u32 DepthImageV2_get_field_count(GF_Node *node, u8 IndexMode)
   33245             : {
   33246           6 :         switch(IndexMode) {
   33247             :         case GF_SG_FIELD_CODING_IN:
   33248             :                 return 0;
   33249           1 :         case GF_SG_FIELD_CODING_DEF:
   33250             :                 return 8;
   33251             :         case GF_SG_FIELD_CODING_OUT:
   33252             :                 return 0;
   33253             :         case GF_SG_FIELD_CODING_DYN:
   33254             :                 return 0;
   33255           2 :         default:
   33256             :                 return 8;
   33257             :         }
   33258             : }
   33259             : 
   33260             : static GF_Err DepthImageV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33261             : {
   33262           8 :         switch(IndexMode) {
   33263           0 :         case GF_SG_FIELD_CODING_DEF:
   33264           0 :                 *allField = DepthImageV2_Def2All[inField];
   33265             :                 return GF_OK;
   33266             :         default:
   33267             :                 return GF_BAD_PARAM;
   33268             :         }
   33269             : }
   33270          16 : static GF_Err DepthImageV2_get_field(GF_Node *node, GF_FieldInfo *info)
   33271             : {
   33272          16 :         switch (info->fieldIndex) {
   33273           2 :         case 0:
   33274           2 :                 info->name = "diTexture";
   33275           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33276           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   33277           2 :                 info->NDTtype = NDT_SFDepthTextureNode;
   33278           2 :                 info->far_ptr = & ((M_DepthImageV2 *)node)->diTexture;
   33279           2 :                 return GF_OK;
   33280           2 :         case 1:
   33281           2 :                 info->name = "farPlane";
   33282           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33283           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33284           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->farPlane;
   33285           2 :                 return GF_OK;
   33286           2 :         case 2:
   33287           2 :                 info->name = "fieldOfView";
   33288           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33289           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   33290           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->fieldOfView;
   33291           2 :                 return GF_OK;
   33292           2 :         case 3:
   33293           2 :                 info->name = "nearPlane";
   33294           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33295           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33296           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->nearPlane;
   33297           2 :                 return GF_OK;
   33298           2 :         case 4:
   33299           2 :                 info->name = "orientation";
   33300           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33301           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   33302           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->orientation;
   33303           2 :                 return GF_OK;
   33304           2 :         case 5:
   33305           2 :                 info->name = "orthographic";
   33306           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33307           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33308           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->orthographic;
   33309           2 :                 return GF_OK;
   33310           2 :         case 6:
   33311           2 :                 info->name = "position";
   33312           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33313           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   33314           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->position;
   33315           2 :                 return GF_OK;
   33316           2 :         case 7:
   33317           2 :                 info->name = "splatMinMax";
   33318           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33319           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   33320           2 :                 info->far_ptr = & ((M_DepthImageV2 *) node)->splatMinMax;
   33321           2 :                 return GF_OK;
   33322             :         default:
   33323             :                 return GF_BAD_PARAM;
   33324             :         }
   33325             : }
   33326             : 
   33327             : 
   33328           8 : static s32 DepthImageV2_get_field_index_by_name(char *name)
   33329             : {
   33330           8 :         if (!strcmp("diTexture", name)) return 0;
   33331           7 :         if (!strcmp("farPlane", name)) return 1;
   33332           6 :         if (!strcmp("fieldOfView", name)) return 2;
   33333           5 :         if (!strcmp("nearPlane", name)) return 3;
   33334           4 :         if (!strcmp("orientation", name)) return 4;
   33335           3 :         if (!strcmp("orthographic", name)) return 5;
   33336           2 :         if (!strcmp("position", name)) return 6;
   33337           1 :         if (!strcmp("splatMinMax", name)) return 7;
   33338           0 :         return -1;
   33339             : }
   33340             : static Bool DepthImageV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33341             : {
   33342             :         switch (FieldIndex) {
   33343             :         default:
   33344             :                 return 0;
   33345             :         }
   33346             : }
   33347             : 
   33348             : 
   33349             : 
   33350           1 : GF_Node *DepthImageV2_Create()
   33351             : {
   33352             :         M_DepthImageV2 *p;
   33353           1 :         GF_SAFEALLOC(p, M_DepthImageV2);
   33354           1 :         if(!p) return NULL;
   33355           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_DepthImageV2);
   33356             : 
   33357             :         /*default field values*/
   33358           1 :         p->farPlane = FLT2FIX(100);
   33359           1 :         p->fieldOfView.x = FLT2FIX(0.75);
   33360           1 :         p->fieldOfView.y = FLT2FIX(0.75);
   33361           1 :         p->nearPlane = FLT2FIX(10);
   33362           1 :         p->orientation.x = FLT2FIX(0);
   33363           1 :         p->orientation.y = FLT2FIX(0);
   33364           1 :         p->orientation.z = FLT2FIX(1);
   33365           1 :         p->orientation.q = FLT2FIX(0);
   33366           1 :         p->orthographic = 1;
   33367           1 :         p->position.x = FLT2FIX(0);
   33368           1 :         p->position.y = FLT2FIX(0);
   33369           1 :         p->position.z = FLT2FIX(10);
   33370           1 :         p->splatMinMax.x = FLT2FIX(0.115);
   33371           1 :         p->splatMinMax.y = FLT2FIX(0.975);
   33372           1 :         return (GF_Node *)p;
   33373             : }
   33374             : 
   33375             : 
   33376             : /*
   33377             :         MorphShape Node deletion
   33378             : */
   33379             : 
   33380           1 : static void MorphShape_Del(GF_Node *node)
   33381             : {
   33382             :         M_MorphShape *p = (M_MorphShape *) node;
   33383           1 :         gf_node_unregister((GF_Node *) p->baseShape, (GF_Node *) p);
   33384           1 :         gf_node_unregister_children((GF_Node *) p, p->targetShapes);
   33385           1 :         gf_sg_mffloat_del(p->weights);
   33386           1 :         gf_node_free((GF_Node *) p);
   33387           1 : }
   33388             : 
   33389             : static const u16 MorphShape_Def2All[] = { 0, 1, 2, 3};
   33390             : static const u16 MorphShape_In2All[] = { 0, 1, 2, 3};
   33391             : static const u16 MorphShape_Out2All[] = { 0, 1, 2, 3};
   33392             : 
   33393             : static u32 MorphShape_get_field_count(GF_Node *node, u8 IndexMode)
   33394             : {
   33395           6 :         switch(IndexMode) {
   33396             :         case GF_SG_FIELD_CODING_IN:
   33397             :                 return 4;
   33398             :         case GF_SG_FIELD_CODING_DEF:
   33399             :                 return 4;
   33400             :         case GF_SG_FIELD_CODING_OUT:
   33401             :                 return 4;
   33402           1 :         case GF_SG_FIELD_CODING_DYN:
   33403             :                 return 0;
   33404             :         default:
   33405             :                 return 4;
   33406             :         }
   33407             : }
   33408             : 
   33409             : static GF_Err MorphShape_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33410             : {
   33411           4 :         switch(IndexMode) {
   33412           0 :         case GF_SG_FIELD_CODING_IN:
   33413           0 :                 *allField = MorphShape_In2All[inField];
   33414             :                 return GF_OK;
   33415           0 :         case GF_SG_FIELD_CODING_DEF:
   33416           0 :                 *allField = MorphShape_Def2All[inField];
   33417             :                 return GF_OK;
   33418           0 :         case GF_SG_FIELD_CODING_OUT:
   33419           0 :                 *allField = MorphShape_Out2All[inField];
   33420             :                 return GF_OK;
   33421             :         default:
   33422             :                 return GF_BAD_PARAM;
   33423             :         }
   33424             : }
   33425           8 : static GF_Err MorphShape_get_field(GF_Node *node, GF_FieldInfo *info)
   33426             : {
   33427           8 :         switch (info->fieldIndex) {
   33428           2 :         case 0:
   33429           2 :                 info->name = "baseShape";
   33430           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33431           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   33432           2 :                 info->NDTtype = NDT_SF3DNode;
   33433           2 :                 info->far_ptr = & ((M_MorphShape *)node)->baseShape;
   33434           2 :                 return GF_OK;
   33435           2 :         case 1:
   33436           2 :                 info->name = "morphID";
   33437           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33438           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33439           2 :                 info->far_ptr = & ((M_MorphShape *) node)->morphID;
   33440           2 :                 return GF_OK;
   33441           2 :         case 2:
   33442           2 :                 info->name = "targetShapes";
   33443           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33444           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   33445           2 :                 info->NDTtype = NDT_SF3DNode;
   33446           2 :                 info->far_ptr = & ((M_MorphShape *)node)->targetShapes;
   33447           2 :                 return GF_OK;
   33448           2 :         case 3:
   33449           2 :                 info->name = "weights";
   33450           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33451           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   33452           2 :                 info->far_ptr = & ((M_MorphShape *) node)->weights;
   33453           2 :                 return GF_OK;
   33454             :         default:
   33455             :                 return GF_BAD_PARAM;
   33456             :         }
   33457             : }
   33458             : 
   33459             : 
   33460           4 : static s32 MorphShape_get_field_index_by_name(char *name)
   33461             : {
   33462           4 :         if (!strcmp("baseShape", name)) return 0;
   33463           3 :         if (!strcmp("morphID", name)) return 1;
   33464           2 :         if (!strcmp("targetShapes", name)) return 2;
   33465           1 :         if (!strcmp("weights", name)) return 3;
   33466           0 :         return -1;
   33467             : }
   33468             : static Bool MorphShape_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33469             : {
   33470           4 :         switch (FieldIndex) {
   33471           1 :         case 1:
   33472           1 :                 *AType = 0;
   33473           1 :                 *QType = 13;
   33474           1 :                 *QT13_bits = 7;
   33475           1 :                 *b_min = FLT2FIX(0);
   33476           1 :                 *b_max = FLT2FIX( 1023);
   33477             :                 return 1;
   33478             :         default:
   33479             :                 return 0;
   33480             :         }
   33481             : }
   33482             : 
   33483             : 
   33484             : 
   33485           1 : GF_Node *MorphShape_Create()
   33486             : {
   33487             :         M_MorphShape *p;
   33488           1 :         GF_SAFEALLOC(p, M_MorphShape);
   33489           1 :         if(!p) return NULL;
   33490           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MorphShape);
   33491             : 
   33492             :         /*default field values*/
   33493           1 :         p->morphID = 0;
   33494           1 :         return (GF_Node *)p;
   33495             : }
   33496             : 
   33497             : 
   33498             : /*
   33499             :         MultiTexture Node deletion
   33500             : */
   33501             : 
   33502           1 : static void MultiTexture_Del(GF_Node *node)
   33503             : {
   33504             :         M_MultiTexture *p = (M_MultiTexture *) node;
   33505           1 :         gf_sg_mfint32_del(p->function);
   33506           1 :         gf_sg_mfint32_del(p->mode);
   33507           1 :         gf_sg_mfint32_del(p->source);
   33508           1 :         gf_node_unregister_children((GF_Node *) p, p->texture);
   33509           1 :         gf_sg_mfvec3f_del(p->cameraVector);
   33510           1 :         gf_node_free((GF_Node *) p);
   33511           1 : }
   33512             : 
   33513             : static const u16 MultiTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33514             : static const u16 MultiTexture_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33515             : static const u16 MultiTexture_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33516             : 
   33517             : static u32 MultiTexture_get_field_count(GF_Node *node, u8 IndexMode)
   33518             : {
   33519           6 :         switch(IndexMode) {
   33520             :         case GF_SG_FIELD_CODING_IN:
   33521             :                 return 8;
   33522             :         case GF_SG_FIELD_CODING_DEF:
   33523             :                 return 8;
   33524             :         case GF_SG_FIELD_CODING_OUT:
   33525             :                 return 8;
   33526           1 :         case GF_SG_FIELD_CODING_DYN:
   33527             :                 return 0;
   33528             :         default:
   33529             :                 return 8;
   33530             :         }
   33531             : }
   33532             : 
   33533             : static GF_Err MultiTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33534             : {
   33535           8 :         switch(IndexMode) {
   33536           0 :         case GF_SG_FIELD_CODING_IN:
   33537           0 :                 *allField = MultiTexture_In2All[inField];
   33538             :                 return GF_OK;
   33539           0 :         case GF_SG_FIELD_CODING_DEF:
   33540           0 :                 *allField = MultiTexture_Def2All[inField];
   33541             :                 return GF_OK;
   33542           0 :         case GF_SG_FIELD_CODING_OUT:
   33543           0 :                 *allField = MultiTexture_Out2All[inField];
   33544             :                 return GF_OK;
   33545             :         default:
   33546             :                 return GF_BAD_PARAM;
   33547             :         }
   33548             : }
   33549          16 : static GF_Err MultiTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   33550             : {
   33551          16 :         switch (info->fieldIndex) {
   33552           2 :         case 0:
   33553           2 :                 info->name = "alpha";
   33554           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33555           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33556           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->alpha;
   33557           2 :                 return GF_OK;
   33558           2 :         case 1:
   33559           2 :                 info->name = "color";
   33560           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33561           2 :                 info->fieldType = GF_SG_VRML_SFCOLOR;
   33562           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->color;
   33563           2 :                 return GF_OK;
   33564           2 :         case 2:
   33565           2 :                 info->name = "function";
   33566           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33567           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33568           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->function;
   33569           2 :                 return GF_OK;
   33570           2 :         case 3:
   33571           2 :                 info->name = "mode";
   33572           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33573           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33574           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->mode;
   33575           2 :                 return GF_OK;
   33576           2 :         case 4:
   33577           2 :                 info->name = "source";
   33578           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33579           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33580           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->source;
   33581           2 :                 return GF_OK;
   33582           2 :         case 5:
   33583           2 :                 info->name = "texture";
   33584           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33585           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   33586           2 :                 info->NDTtype = NDT_SFTextureNode;
   33587           2 :                 info->far_ptr = & ((M_MultiTexture *)node)->texture;
   33588           2 :                 return GF_OK;
   33589           2 :         case 6:
   33590           2 :                 info->name = "cameraVector";
   33591           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33592           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33593           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->cameraVector;
   33594           2 :                 return GF_OK;
   33595           2 :         case 7:
   33596           2 :                 info->name = "transparent";
   33597           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33598           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33599           2 :                 info->far_ptr = & ((M_MultiTexture *) node)->transparent;
   33600           2 :                 return GF_OK;
   33601             :         default:
   33602             :                 return GF_BAD_PARAM;
   33603             :         }
   33604             : }
   33605             : 
   33606             : 
   33607           8 : static s32 MultiTexture_get_field_index_by_name(char *name)
   33608             : {
   33609           8 :         if (!strcmp("alpha", name)) return 0;
   33610           7 :         if (!strcmp("color", name)) return 1;
   33611           6 :         if (!strcmp("function", name)) return 2;
   33612           5 :         if (!strcmp("mode", name)) return 3;
   33613           4 :         if (!strcmp("source", name)) return 4;
   33614           3 :         if (!strcmp("texture", name)) return 5;
   33615           2 :         if (!strcmp("cameraVector", name)) return 6;
   33616           1 :         if (!strcmp("transparent", name)) return 7;
   33617           0 :         return -1;
   33618             : }
   33619             : static Bool MultiTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33620             : {
   33621             :         switch (FieldIndex) {
   33622             :         default:
   33623             :                 return 0;
   33624             :         }
   33625             : }
   33626             : 
   33627             : 
   33628             : 
   33629           1 : GF_Node *MultiTexture_Create()
   33630             : {
   33631             :         M_MultiTexture *p;
   33632           1 :         GF_SAFEALLOC(p, M_MultiTexture);
   33633           1 :         if(!p) return NULL;
   33634           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MultiTexture);
   33635             : 
   33636             :         /*default field values*/
   33637           1 :         p->alpha = FLT2FIX(1);
   33638           1 :         p->color.red = FLT2FIX(1);
   33639           1 :         p->color.green = FLT2FIX(1);
   33640           1 :         p->color.blue = FLT2FIX(1);
   33641           1 :         return (GF_Node *)p;
   33642             : }
   33643             : 
   33644             : 
   33645             : /*
   33646             :         PointTextureV2 Node deletion
   33647             : */
   33648             : 
   33649           1 : static void PointTextureV2_Del(GF_Node *node)
   33650             : {
   33651             :         M_PointTextureV2 *p = (M_PointTextureV2 *) node;
   33652           1 :         gf_sg_mfcolor_del(p->color);
   33653           1 :         gf_sg_mfint32_del(p->depth);
   33654           1 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
   33655           1 :         gf_sg_mfvec3f_del(p->splatU);
   33656           1 :         gf_sg_mfvec3f_del(p->splatV);
   33657           1 :         gf_node_free((GF_Node *) p);
   33658           1 : }
   33659             : 
   33660             : static const u16 PointTextureV2_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33661             : 
   33662             : static u32 PointTextureV2_get_field_count(GF_Node *node, u8 IndexMode)
   33663             : {
   33664           6 :         switch(IndexMode) {
   33665             :         case GF_SG_FIELD_CODING_IN:
   33666             :                 return 0;
   33667           1 :         case GF_SG_FIELD_CODING_DEF:
   33668             :                 return 8;
   33669             :         case GF_SG_FIELD_CODING_OUT:
   33670             :                 return 0;
   33671             :         case GF_SG_FIELD_CODING_DYN:
   33672             :                 return 0;
   33673           2 :         default:
   33674             :                 return 8;
   33675             :         }
   33676             : }
   33677             : 
   33678             : static GF_Err PointTextureV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33679             : {
   33680           8 :         switch(IndexMode) {
   33681           0 :         case GF_SG_FIELD_CODING_DEF:
   33682           0 :                 *allField = PointTextureV2_Def2All[inField];
   33683             :                 return GF_OK;
   33684             :         default:
   33685             :                 return GF_BAD_PARAM;
   33686             :         }
   33687             : }
   33688          16 : static GF_Err PointTextureV2_get_field(GF_Node *node, GF_FieldInfo *info)
   33689             : {
   33690          16 :         switch (info->fieldIndex) {
   33691           2 :         case 0:
   33692           2 :                 info->name = "color";
   33693           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33694           2 :                 info->fieldType = GF_SG_VRML_MFCOLOR;
   33695           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->color;
   33696           2 :                 return GF_OK;
   33697           2 :         case 1:
   33698           2 :                 info->name = "depth";
   33699           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33700           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33701           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->depth;
   33702           2 :                 return GF_OK;
   33703           2 :         case 2:
   33704           2 :                 info->name = "depthNbBits";
   33705           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33706           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33707           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->depthNbBits;
   33708           2 :                 return GF_OK;
   33709           2 :         case 3:
   33710           2 :                 info->name = "height";
   33711           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33712           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33713           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->height;
   33714           2 :                 return GF_OK;
   33715           2 :         case 4:
   33716           2 :                 info->name = "normal";
   33717           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33718           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   33719           2 :                 info->NDTtype = NDT_SFNormalNode;
   33720           2 :                 info->far_ptr = & ((M_PointTextureV2 *)node)->normal;
   33721           2 :                 return GF_OK;
   33722           2 :         case 5:
   33723           2 :                 info->name = "splatU";
   33724           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33725           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33726           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->splatU;
   33727           2 :                 return GF_OK;
   33728           2 :         case 6:
   33729           2 :                 info->name = "splatV";
   33730           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33731           2 :                 info->fieldType = GF_SG_VRML_MFVEC3F;
   33732           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->splatV;
   33733           2 :                 return GF_OK;
   33734           2 :         case 7:
   33735           2 :                 info->name = "width";
   33736           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   33737           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   33738           2 :                 info->far_ptr = & ((M_PointTextureV2 *) node)->width;
   33739           2 :                 return GF_OK;
   33740             :         default:
   33741             :                 return GF_BAD_PARAM;
   33742             :         }
   33743             : }
   33744             : 
   33745             : 
   33746           8 : static s32 PointTextureV2_get_field_index_by_name(char *name)
   33747             : {
   33748           8 :         if (!strcmp("color", name)) return 0;
   33749           7 :         if (!strcmp("depth", name)) return 1;
   33750           6 :         if (!strcmp("depthNbBits", name)) return 2;
   33751           5 :         if (!strcmp("height", name)) return 3;
   33752           4 :         if (!strcmp("normal", name)) return 4;
   33753           3 :         if (!strcmp("splatU", name)) return 5;
   33754           2 :         if (!strcmp("splatV", name)) return 6;
   33755           1 :         if (!strcmp("width", name)) return 7;
   33756           0 :         return -1;
   33757             : }
   33758             : static Bool PointTextureV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33759             : {
   33760           8 :         switch (FieldIndex) {
   33761           1 :         case 2:
   33762           1 :                 *AType = 0;
   33763           1 :                 *QType = 13;
   33764           1 :                 *QT13_bits = 5;
   33765           1 :                 *b_min = FLT2FIX(0);
   33766           1 :                 *b_max = FLT2FIX(31);
   33767             :                 return 1;
   33768           1 :         case 5:
   33769           1 :                 *AType = 0;
   33770           1 :                 *QType = 1;
   33771           1 :                 *b_min = FIX_MIN;
   33772           1 :                 *b_max = FIX_MAX;
   33773             :                 return 1;
   33774           1 :         case 6:
   33775           1 :                 *AType = 0;
   33776           1 :                 *QType = 1;
   33777           1 :                 *b_min = FIX_MIN;
   33778           1 :                 *b_max = FIX_MAX;
   33779             :                 return 1;
   33780             :         default:
   33781             :                 return 0;
   33782             :         }
   33783             : }
   33784             : 
   33785             : 
   33786             : 
   33787           1 : GF_Node *PointTextureV2_Create()
   33788             : {
   33789             :         M_PointTextureV2 *p;
   33790           1 :         GF_SAFEALLOC(p, M_PointTextureV2);
   33791           1 :         if(!p) return NULL;
   33792           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_PointTextureV2);
   33793             : 
   33794             :         /*default field values*/
   33795           1 :         p->depthNbBits = 7;
   33796           1 :         p->height = 256;
   33797           1 :         p->width = 256;
   33798           1 :         return (GF_Node *)p;
   33799             : }
   33800             : 
   33801             : 
   33802             : /*
   33803             :         SBVCAnimationV2 Node deletion
   33804             : */
   33805             : 
   33806           1 : static void SBVCAnimationV2_Del(GF_Node *node)
   33807             : {
   33808             :         M_SBVCAnimationV2 *p = (M_SBVCAnimationV2 *) node;
   33809           1 :         gf_sg_mfint32_del(p->activeUrlIndex);
   33810           1 :         gf_sg_mfurl_del(p->url);
   33811           1 :         gf_node_unregister_children((GF_Node *) p, p->virtualCharacters);
   33812           1 :         gf_node_free((GF_Node *) p);
   33813           1 : }
   33814             : 
   33815             : static const u16 SBVCAnimationV2_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33816             : static const u16 SBVCAnimationV2_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   33817             : static const u16 SBVCAnimationV2_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   33818             : static const u16 SBVCAnimationV2_Dyn2All[] = { 2, 5};
   33819             : 
   33820             : static u32 SBVCAnimationV2_get_field_count(GF_Node *node, u8 IndexMode)
   33821             : {
   33822             :         switch(IndexMode) {
   33823             :         case GF_SG_FIELD_CODING_IN:
   33824             :                 return 8;
   33825             :         case GF_SG_FIELD_CODING_DEF:
   33826             :                 return 8;
   33827             :         case GF_SG_FIELD_CODING_OUT:
   33828             :                 return 10;
   33829             :         case GF_SG_FIELD_CODING_DYN:
   33830             :                 return 2;
   33831             :         default:
   33832             :                 return 10;
   33833             :         }
   33834             : }
   33835             : 
   33836             : static GF_Err SBVCAnimationV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   33837             : {
   33838          10 :         switch(IndexMode) {
   33839           0 :         case GF_SG_FIELD_CODING_IN:
   33840           0 :                 *allField = SBVCAnimationV2_In2All[inField];
   33841             :                 return GF_OK;
   33842           0 :         case GF_SG_FIELD_CODING_DEF:
   33843           0 :                 *allField = SBVCAnimationV2_Def2All[inField];
   33844             :                 return GF_OK;
   33845           0 :         case GF_SG_FIELD_CODING_OUT:
   33846           0 :                 *allField = SBVCAnimationV2_Out2All[inField];
   33847             :                 return GF_OK;
   33848           0 :         case GF_SG_FIELD_CODING_DYN:
   33849           0 :                 *allField = SBVCAnimationV2_Dyn2All[inField];
   33850             :                 return GF_OK;
   33851             :         default:
   33852             :                 return GF_BAD_PARAM;
   33853             :         }
   33854             : }
   33855          20 : static GF_Err SBVCAnimationV2_get_field(GF_Node *node, GF_FieldInfo *info)
   33856             : {
   33857          20 :         switch (info->fieldIndex) {
   33858           2 :         case 0:
   33859           2 :                 info->name = "activeUrlIndex";
   33860           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33861           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   33862           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->activeUrlIndex;
   33863           2 :                 return GF_OK;
   33864           2 :         case 1:
   33865           2 :                 info->name = "loop";
   33866           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33867           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33868           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->loop;
   33869           2 :                 return GF_OK;
   33870           2 :         case 2:
   33871           2 :                 info->name = "speed";
   33872           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33873           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33874           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->speed;
   33875           2 :                 return GF_OK;
   33876           2 :         case 3:
   33877           2 :                 info->name = "startTime";
   33878           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33879           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   33880           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->startTime;
   33881           2 :                 return GF_OK;
   33882           2 :         case 4:
   33883           2 :                 info->name = "stopTime";
   33884           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33885           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   33886           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->stopTime;
   33887           2 :                 return GF_OK;
   33888           2 :         case 5:
   33889           2 :                 info->name = "transitionTime";
   33890           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33891           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   33892           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->transitionTime;
   33893           2 :                 return GF_OK;
   33894           2 :         case 6:
   33895           2 :                 info->name = "url";
   33896           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33897           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   33898           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->url;
   33899           2 :                 return GF_OK;
   33900           2 :         case 7:
   33901           2 :                 info->name = "virtualCharacters";
   33902           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   33903           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   33904           2 :                 info->NDTtype = NDT_SF3DNode;
   33905           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *)node)->virtualCharacters;
   33906           2 :                 return GF_OK;
   33907           2 :         case 8:
   33908           2 :                 info->name = "duration_changed";
   33909           2 :                 info->eventType = GF_SG_EVENT_OUT;
   33910           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   33911           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->duration_changed;
   33912           2 :                 return GF_OK;
   33913           2 :         case 9:
   33914           2 :                 info->name = "isActive";
   33915           2 :                 info->eventType = GF_SG_EVENT_OUT;
   33916           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   33917           2 :                 info->far_ptr = & ((M_SBVCAnimationV2 *) node)->isActive;
   33918           2 :                 return GF_OK;
   33919             :         default:
   33920             :                 return GF_BAD_PARAM;
   33921             :         }
   33922             : }
   33923             : 
   33924             : 
   33925          10 : static s32 SBVCAnimationV2_get_field_index_by_name(char *name)
   33926             : {
   33927          10 :         if (!strcmp("activeUrlIndex", name)) return 0;
   33928           9 :         if (!strcmp("loop", name)) return 1;
   33929           8 :         if (!strcmp("speed", name)) return 2;
   33930           7 :         if (!strcmp("startTime", name)) return 3;
   33931           6 :         if (!strcmp("stopTime", name)) return 4;
   33932           5 :         if (!strcmp("transitionTime", name)) return 5;
   33933           4 :         if (!strcmp("url", name)) return 6;
   33934           3 :         if (!strcmp("virtualCharacters", name)) return 7;
   33935           2 :         if (!strcmp("duration_changed", name)) return 8;
   33936           1 :         if (!strcmp("isActive", name)) return 9;
   33937           0 :         return -1;
   33938             : }
   33939             : static Bool SBVCAnimationV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   33940             : {
   33941          10 :         switch (FieldIndex) {
   33942           1 :         case 2:
   33943           1 :                 *AType = 7;
   33944           1 :                 *QType = 0;
   33945           1 :                 *b_min = FIX_MIN;
   33946           1 :                 *b_max = FIX_MAX;
   33947             :                 return 1;
   33948           1 :         case 5:
   33949           1 :                 *AType = 7;
   33950           1 :                 *QType = 0;
   33951           1 :                 *b_min = FLT2FIX(0);
   33952           1 :                 *b_max = FIX_MAX;
   33953             :                 return 1;
   33954             :         default:
   33955             :                 return 0;
   33956             :         }
   33957             : }
   33958             : 
   33959             : 
   33960             : 
   33961           1 : GF_Node *SBVCAnimationV2_Create()
   33962             : {
   33963             :         M_SBVCAnimationV2 *p;
   33964           1 :         GF_SAFEALLOC(p, M_SBVCAnimationV2);
   33965           1 :         if(!p) return NULL;
   33966           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SBVCAnimationV2);
   33967             : 
   33968             :         /*default field values*/
   33969           1 :         p->speed = FLT2FIX(1.0);
   33970           1 :         p->startTime = 0;
   33971           1 :         p->stopTime = 0;
   33972           1 :         p->transitionTime = FLT2FIX(0);
   33973           1 :         return (GF_Node *)p;
   33974             : }
   33975             : 
   33976             : 
   33977             : /*
   33978             :         SimpleTextureV2 Node deletion
   33979             : */
   33980             : 
   33981           1 : static void SimpleTextureV2_Del(GF_Node *node)
   33982             : {
   33983             :         M_SimpleTextureV2 *p = (M_SimpleTextureV2 *) node;
   33984           1 :         gf_node_unregister((GF_Node *) p->depth, (GF_Node *) p);
   33985           1 :         gf_node_unregister((GF_Node *) p->normal, (GF_Node *) p);
   33986           1 :         gf_node_unregister((GF_Node *) p->splatU, (GF_Node *) p);
   33987           1 :         gf_node_unregister((GF_Node *) p->splatV, (GF_Node *) p);
   33988           1 :         gf_node_unregister((GF_Node *) p->texture, (GF_Node *) p);
   33989           1 :         gf_node_free((GF_Node *) p);
   33990           1 : }
   33991             : 
   33992             : static const u16 SimpleTextureV2_Def2All[] = { 0, 1, 2, 3, 4};
   33993             : 
   33994             : static u32 SimpleTextureV2_get_field_count(GF_Node *node, u8 IndexMode)
   33995             : {
   33996           6 :         switch(IndexMode) {
   33997             :         case GF_SG_FIELD_CODING_IN:
   33998             :                 return 0;
   33999           1 :         case GF_SG_FIELD_CODING_DEF:
   34000             :                 return 5;
   34001             :         case GF_SG_FIELD_CODING_OUT:
   34002             :                 return 0;
   34003             :         case GF_SG_FIELD_CODING_DYN:
   34004             :                 return 0;
   34005           2 :         default:
   34006             :                 return 5;
   34007             :         }
   34008             : }
   34009             : 
   34010             : static GF_Err SimpleTextureV2_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34011             : {
   34012           5 :         switch(IndexMode) {
   34013           0 :         case GF_SG_FIELD_CODING_DEF:
   34014           0 :                 *allField = SimpleTextureV2_Def2All[inField];
   34015             :                 return GF_OK;
   34016             :         default:
   34017             :                 return GF_BAD_PARAM;
   34018             :         }
   34019             : }
   34020          10 : static GF_Err SimpleTextureV2_get_field(GF_Node *node, GF_FieldInfo *info)
   34021             : {
   34022          10 :         switch (info->fieldIndex) {
   34023           2 :         case 0:
   34024           2 :                 info->name = "depth";
   34025           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   34026           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34027           2 :                 info->NDTtype = NDT_SFTextureNode;
   34028           2 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->depth;
   34029           2 :                 return GF_OK;
   34030           2 :         case 1:
   34031           2 :                 info->name = "normal";
   34032           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   34033           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34034           2 :                 info->NDTtype = NDT_SFTextureNode;
   34035           2 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->normal;
   34036           2 :                 return GF_OK;
   34037           2 :         case 2:
   34038           2 :                 info->name = "splatU";
   34039           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   34040           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34041           2 :                 info->NDTtype = NDT_SFTextureNode;
   34042           2 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->splatU;
   34043           2 :                 return GF_OK;
   34044           2 :         case 3:
   34045           2 :                 info->name = "splatV";
   34046           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   34047           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34048           2 :                 info->NDTtype = NDT_SFTextureNode;
   34049           2 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->splatV;
   34050           2 :                 return GF_OK;
   34051           2 :         case 4:
   34052           2 :                 info->name = "texture";
   34053           2 :                 info->eventType = GF_SG_EVENT_FIELD;
   34054           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34055           2 :                 info->NDTtype = NDT_SFTextureNode;
   34056           2 :                 info->far_ptr = & ((M_SimpleTextureV2 *)node)->texture;
   34057           2 :                 return GF_OK;
   34058             :         default:
   34059             :                 return GF_BAD_PARAM;
   34060             :         }
   34061             : }
   34062             : 
   34063             : 
   34064           5 : static s32 SimpleTextureV2_get_field_index_by_name(char *name)
   34065             : {
   34066           5 :         if (!strcmp("depth", name)) return 0;
   34067           4 :         if (!strcmp("normal", name)) return 1;
   34068           3 :         if (!strcmp("splatU", name)) return 2;
   34069           2 :         if (!strcmp("splatV", name)) return 3;
   34070           1 :         if (!strcmp("texture", name)) return 4;
   34071           0 :         return -1;
   34072             : }
   34073             : static Bool SimpleTextureV2_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34074             : {
   34075             :         switch (FieldIndex) {
   34076             :         default:
   34077             :                 return 0;
   34078             :         }
   34079             : }
   34080             : 
   34081             : 
   34082             : 
   34083           1 : GF_Node *SimpleTextureV2_Create()
   34084             : {
   34085             :         M_SimpleTextureV2 *p;
   34086           1 :         GF_SAFEALLOC(p, M_SimpleTextureV2);
   34087           1 :         if(!p) return NULL;
   34088           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SimpleTextureV2);
   34089             : 
   34090             :         /*default field values*/
   34091           1 :         return (GF_Node *)p;
   34092             : }
   34093             : 
   34094             : 
   34095             : /*
   34096             :         SurroundingSound Node deletion
   34097             : */
   34098             : 
   34099             : static void SurroundingSound_Del(GF_Node *node)
   34100             : {
   34101             :         M_SurroundingSound *p = (M_SurroundingSound *) node;
   34102           1 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   34103           1 :         gf_node_free((GF_Node *) p);
   34104             : }
   34105             : 
   34106             : static const u16 SurroundingSound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6};
   34107             : static const u16 SurroundingSound_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   34108             : static const u16 SurroundingSound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6};
   34109             : static const u16 SurroundingSound_Dyn2All[] = { 1, 3, 5};
   34110             : 
   34111             : static u32 SurroundingSound_get_field_count(GF_Node *node, u8 IndexMode)
   34112             : {
   34113           6 :         switch(IndexMode) {
   34114             :         case GF_SG_FIELD_CODING_IN:
   34115             :                 return 7;
   34116             :         case GF_SG_FIELD_CODING_DEF:
   34117             :                 return 7;
   34118             :         case GF_SG_FIELD_CODING_OUT:
   34119             :                 return 7;
   34120           1 :         case GF_SG_FIELD_CODING_DYN:
   34121             :                 return 3;
   34122             :         default:
   34123             :                 return 7;
   34124             :         }
   34125             : }
   34126             : 
   34127             : static GF_Err SurroundingSound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34128             : {
   34129           7 :         switch(IndexMode) {
   34130           0 :         case GF_SG_FIELD_CODING_IN:
   34131           0 :                 *allField = SurroundingSound_In2All[inField];
   34132             :                 return GF_OK;
   34133           0 :         case GF_SG_FIELD_CODING_DEF:
   34134           0 :                 *allField = SurroundingSound_Def2All[inField];
   34135             :                 return GF_OK;
   34136           0 :         case GF_SG_FIELD_CODING_OUT:
   34137           0 :                 *allField = SurroundingSound_Out2All[inField];
   34138             :                 return GF_OK;
   34139           0 :         case GF_SG_FIELD_CODING_DYN:
   34140           0 :                 *allField = SurroundingSound_Dyn2All[inField];
   34141             :                 return GF_OK;
   34142             :         default:
   34143             :                 return GF_BAD_PARAM;
   34144             :         }
   34145             : }
   34146          14 : static GF_Err SurroundingSound_get_field(GF_Node *node, GF_FieldInfo *info)
   34147             : {
   34148          14 :         switch (info->fieldIndex) {
   34149           2 :         case 0:
   34150           2 :                 info->name = "source";
   34151           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34152           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34153           2 :                 info->NDTtype = NDT_SFAudioNode;
   34154           2 :                 info->far_ptr = & ((M_SurroundingSound *)node)->source;
   34155           2 :                 return GF_OK;
   34156           2 :         case 1:
   34157           2 :                 info->name = "intensity";
   34158           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34159           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34160           2 :                 info->far_ptr = & ((M_SurroundingSound *) node)->intensity;
   34161           2 :                 return GF_OK;
   34162           2 :         case 2:
   34163           2 :                 info->name = "distance";
   34164           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34165           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34166           2 :                 info->far_ptr = & ((M_SurroundingSound *) node)->distance;
   34167           2 :                 return GF_OK;
   34168           2 :         case 3:
   34169           2 :                 info->name = "location";
   34170           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34171           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34172           2 :                 info->far_ptr = & ((M_SurroundingSound *) node)->location;
   34173           2 :                 return GF_OK;
   34174           2 :         case 4:
   34175           2 :                 info->name = "distortionFactor";
   34176           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34177           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34178           2 :                 info->far_ptr = & ((M_SurroundingSound *) node)->distortionFactor;
   34179           2 :                 return GF_OK;
   34180           2 :         case 5:
   34181           2 :                 info->name = "orientation";
   34182           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34183           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   34184           2 :                 info->far_ptr = & ((M_SurroundingSound *) node)->orientation;
   34185           2 :                 return GF_OK;
   34186           2 :         case 6:
   34187           2 :                 info->name = "isTransformable";
   34188           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34189           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34190           2 :                 info->far_ptr = & ((M_SurroundingSound *) node)->isTransformable;
   34191           2 :                 return GF_OK;
   34192             :         default:
   34193             :                 return GF_BAD_PARAM;
   34194             :         }
   34195             : }
   34196             : 
   34197             : 
   34198           7 : static s32 SurroundingSound_get_field_index_by_name(char *name)
   34199             : {
   34200           7 :         if (!strcmp("source", name)) return 0;
   34201           6 :         if (!strcmp("intensity", name)) return 1;
   34202           5 :         if (!strcmp("distance", name)) return 2;
   34203           4 :         if (!strcmp("location", name)) return 3;
   34204           3 :         if (!strcmp("distortionFactor", name)) return 4;
   34205           2 :         if (!strcmp("orientation", name)) return 5;
   34206           1 :         if (!strcmp("isTransformable", name)) return 6;
   34207           0 :         return -1;
   34208             : }
   34209             : static Bool SurroundingSound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34210             : {
   34211           7 :         switch (FieldIndex) {
   34212           1 :         case 1:
   34213           1 :                 *AType = 7;
   34214           1 :                 *QType = 0;
   34215           1 :                 *b_min = FLT2FIX(0);
   34216           1 :                 *b_max = FLT2FIX(1);
   34217             :                 return 1;
   34218           1 :         case 2:
   34219           1 :                 *AType = 0;
   34220           1 :                 *QType = 0;
   34221           1 :                 *b_min = FLT2FIX(0);
   34222           1 :                 *b_max = FIX_MAX;
   34223             :                 return 1;
   34224           1 :         case 3:
   34225           1 :                 *AType = 1;
   34226           1 :                 *QType = 1;
   34227           1 :                 *b_min = FIX_MIN;
   34228           1 :                 *b_max = FIX_MAX;
   34229             :                 return 1;
   34230           1 :         case 5:
   34231           1 :                 *AType = 10;
   34232           1 :                 *QType = 10;
   34233           1 :                 *b_min = FIX_MIN;
   34234           1 :                 *b_max = FIX_MAX;
   34235             :                 return 1;
   34236             :         default:
   34237             :                 return 0;
   34238             :         }
   34239             : }
   34240             : 
   34241             : 
   34242             : 
   34243           1 : GF_Node *SurroundingSound_Create()
   34244             : {
   34245             :         M_SurroundingSound *p;
   34246           1 :         GF_SAFEALLOC(p, M_SurroundingSound);
   34247           1 :         if(!p) return NULL;
   34248           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SurroundingSound);
   34249             : 
   34250             :         /*default field values*/
   34251           1 :         p->intensity = FLT2FIX(1.0);
   34252           1 :         p->distance = FLT2FIX(0.0);
   34253           1 :         p->location.x = FLT2FIX(0.0);
   34254           1 :         p->location.y = FLT2FIX(0.0);
   34255           1 :         p->location.z = FLT2FIX(0.0);
   34256           1 :         p->distortionFactor = FLT2FIX(0.0);
   34257           1 :         p->orientation.x = FLT2FIX(0.0);
   34258           1 :         p->orientation.y = FLT2FIX(0.0);
   34259           1 :         p->orientation.z = FLT2FIX(1.0);
   34260           1 :         p->orientation.q = FLT2FIX(0.0);
   34261           1 :         p->isTransformable = 1;
   34262           1 :         return (GF_Node *)p;
   34263             : }
   34264             : 
   34265             : 
   34266             : /*
   34267             :         Transform3DAudio Node deletion
   34268             : */
   34269             : 
   34270             : static void Transform3DAudio_Del(GF_Node *node)
   34271             : {
   34272             :         M_Transform3DAudio *p = (M_Transform3DAudio *) node;
   34273           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   34274           1 :         gf_node_free((GF_Node *) p);
   34275             : }
   34276             : 
   34277             : static const u16 Transform3DAudio_Def2All[] = { 2, 3, 4, 5, 6, 7, 8};
   34278             : static const u16 Transform3DAudio_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   34279             : static const u16 Transform3DAudio_Out2All[] = { 2, 3, 4, 5, 6, 7, 8};
   34280             : static const u16 Transform3DAudio_Dyn2All[] = { 3, 4, 5, 6, 7};
   34281             : 
   34282             : static u32 Transform3DAudio_get_field_count(GF_Node *node, u8 IndexMode)
   34283             : {
   34284             :         switch(IndexMode) {
   34285             :         case GF_SG_FIELD_CODING_IN:
   34286             :                 return 9;
   34287             :         case GF_SG_FIELD_CODING_DEF:
   34288             :                 return 7;
   34289             :         case GF_SG_FIELD_CODING_OUT:
   34290             :                 return 7;
   34291             :         case GF_SG_FIELD_CODING_DYN:
   34292             :                 return 5;
   34293             :         default:
   34294             :                 return 9;
   34295             :         }
   34296             : }
   34297             : 
   34298             : static GF_Err Transform3DAudio_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34299             : {
   34300           9 :         switch(IndexMode) {
   34301           0 :         case GF_SG_FIELD_CODING_IN:
   34302           0 :                 *allField = Transform3DAudio_In2All[inField];
   34303             :                 return GF_OK;
   34304           0 :         case GF_SG_FIELD_CODING_DEF:
   34305           0 :                 *allField = Transform3DAudio_Def2All[inField];
   34306             :                 return GF_OK;
   34307           0 :         case GF_SG_FIELD_CODING_OUT:
   34308           0 :                 *allField = Transform3DAudio_Out2All[inField];
   34309             :                 return GF_OK;
   34310           0 :         case GF_SG_FIELD_CODING_DYN:
   34311           0 :                 *allField = Transform3DAudio_Dyn2All[inField];
   34312             :                 return GF_OK;
   34313             :         default:
   34314             :                 return GF_BAD_PARAM;
   34315             :         }
   34316             : }
   34317          18 : static GF_Err Transform3DAudio_get_field(GF_Node *node, GF_FieldInfo *info)
   34318             : {
   34319          18 :         switch (info->fieldIndex) {
   34320           2 :         case 0:
   34321           2 :                 info->name = "addChildren";
   34322           2 :                 info->eventType = GF_SG_EVENT_IN;
   34323           2 :                 info->on_event_in = ((M_Transform3DAudio *)node)->on_addChildren;
   34324           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   34325           2 :                 info->NDTtype = NDT_SF3DNode;
   34326           2 :                 info->far_ptr = & ((M_Transform3DAudio *)node)->addChildren;
   34327           2 :                 return GF_OK;
   34328           2 :         case 1:
   34329           2 :                 info->name = "removeChildren";
   34330           2 :                 info->eventType = GF_SG_EVENT_IN;
   34331           2 :                 info->on_event_in = ((M_Transform3DAudio *)node)->on_removeChildren;
   34332           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   34333           2 :                 info->NDTtype = NDT_SF3DNode;
   34334           2 :                 info->far_ptr = & ((M_Transform3DAudio *)node)->removeChildren;
   34335           2 :                 return GF_OK;
   34336           2 :         case 2:
   34337           2 :                 info->name = "children";
   34338           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34339           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   34340           2 :                 info->NDTtype = NDT_SF3DNode;
   34341           2 :                 info->far_ptr = & ((M_Transform3DAudio *)node)->children;
   34342           2 :                 return GF_OK;
   34343           2 :         case 3:
   34344           2 :                 info->name = "thirdCenterCoordinate";
   34345           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34346           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34347           2 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->thirdCenterCoordinate;
   34348           2 :                 return GF_OK;
   34349           2 :         case 4:
   34350           2 :                 info->name = "rotationVector";
   34351           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34352           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34353           2 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->rotationVector;
   34354           2 :                 return GF_OK;
   34355           2 :         case 5:
   34356           2 :                 info->name = "thirdScaleCoordinate";
   34357           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34358           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34359           2 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->thirdScaleCoordinate;
   34360           2 :                 return GF_OK;
   34361           2 :         case 6:
   34362           2 :                 info->name = "scaleOrientationVector";
   34363           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34364           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34365           2 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->scaleOrientationVector;
   34366           2 :                 return GF_OK;
   34367           2 :         case 7:
   34368           2 :                 info->name = "thirdTranslationCoordinate";
   34369           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34370           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34371           2 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->thirdTranslationCoordinate;
   34372           2 :                 return GF_OK;
   34373           2 :         case 8:
   34374           2 :                 info->name = "coordinateTransform";
   34375           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34376           2 :                 info->fieldType = GF_SG_VRML_SFROTATION;
   34377           2 :                 info->far_ptr = & ((M_Transform3DAudio *) node)->coordinateTransform;
   34378           2 :                 return GF_OK;
   34379             :         default:
   34380             :                 return GF_BAD_PARAM;
   34381             :         }
   34382             : }
   34383             : 
   34384             : 
   34385           9 : static s32 Transform3DAudio_get_field_index_by_name(char *name)
   34386             : {
   34387           9 :         if (!strcmp("addChildren", name)) return 0;
   34388           8 :         if (!strcmp("removeChildren", name)) return 1;
   34389           7 :         if (!strcmp("children", name)) return 2;
   34390           6 :         if (!strcmp("thirdCenterCoordinate", name)) return 3;
   34391           5 :         if (!strcmp("rotationVector", name)) return 4;
   34392           4 :         if (!strcmp("thirdScaleCoordinate", name)) return 5;
   34393           3 :         if (!strcmp("scaleOrientationVector", name)) return 6;
   34394           2 :         if (!strcmp("thirdTranslationCoordinate", name)) return 7;
   34395           1 :         if (!strcmp("coordinateTransform", name)) return 8;
   34396           0 :         return -1;
   34397             : }
   34398           9 : static Bool Transform3DAudio_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34399             : {
   34400           9 :         switch (FieldIndex) {
   34401           1 :         case 3:
   34402           1 :                 *AType = 7;
   34403           1 :                 *QType = 0;
   34404           1 :                 *b_min = FIX_MIN;
   34405           1 :                 *b_max = FIX_MAX;
   34406             :                 return 1;
   34407           1 :         case 4:
   34408           1 :                 *AType = 11;
   34409           1 :                 *QType = 7;
   34410           1 :                 *b_min = FLT2FIX(-3.14159265);
   34411           1 :                 *b_max = FLT2FIX(3.14159265);
   34412             :                 return 1;
   34413           1 :         case 5:
   34414           1 :                 *AType = 7;
   34415           1 :                 *QType = 0;
   34416           1 :                 *b_min = FLT2FIX(0);
   34417           1 :                 *b_max = FIX_MAX;
   34418             :                 return 1;
   34419           1 :         case 6:
   34420           1 :                 *AType = 11;
   34421           1 :                 *QType = 7;
   34422           1 :                 *b_min = FLT2FIX(-1);
   34423           1 :                 *b_max = FLT2FIX(1);
   34424             :                 return 1;
   34425           1 :         case 7:
   34426           1 :                 *AType = 7;
   34427           1 :                 *QType = 0;
   34428           1 :                 *b_min = FIX_MIN;
   34429           1 :                 *b_max = FIX_MAX;
   34430             :                 return 1;
   34431           1 :         case 8:
   34432           1 :                 *AType = 0;
   34433           1 :                 *QType = 10;
   34434           1 :                 *b_min = FLT2FIX(-3.14159265);
   34435           1 :                 *b_max = FLT2FIX(3.14159265);
   34436             :                 return 1;
   34437             :         default:
   34438             :                 return 0;
   34439             :         }
   34440             : }
   34441             : 
   34442             : 
   34443             : 
   34444           1 : GF_Node *Transform3DAudio_Create()
   34445             : {
   34446             :         M_Transform3DAudio *p;
   34447           1 :         GF_SAFEALLOC(p, M_Transform3DAudio);
   34448           1 :         if(!p) return NULL;
   34449           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Transform3DAudio);
   34450           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   34451             : 
   34452             :         /*default field values*/
   34453           1 :         p->thirdCenterCoordinate = FLT2FIX(0.0);
   34454           1 :         p->rotationVector.x = FLT2FIX(0.0);
   34455           1 :         p->rotationVector.y = FLT2FIX(0.0);
   34456           1 :         p->rotationVector.z = FLT2FIX(1.0);
   34457           1 :         p->thirdScaleCoordinate = FLT2FIX(0.0);
   34458           1 :         p->scaleOrientationVector.x = FLT2FIX(0.0);
   34459           1 :         p->scaleOrientationVector.y = FLT2FIX(0.0);
   34460           1 :         p->scaleOrientationVector.z = FLT2FIX(1.0);
   34461           1 :         p->thirdTranslationCoordinate = FLT2FIX(0.0);
   34462           1 :         p->coordinateTransform.x = FLT2FIX(1.0);
   34463           1 :         p->coordinateTransform.y = FLT2FIX(0.0);
   34464           1 :         p->coordinateTransform.z = FLT2FIX(0.0);
   34465           1 :         p->coordinateTransform.q = FLT2FIX(-1.5707963);
   34466           1 :         return (GF_Node *)p;
   34467             : }
   34468             : 
   34469             : 
   34470             : /*
   34471             :         WideSound Node deletion
   34472             : */
   34473             : 
   34474          23 : static void WideSound_Del(GF_Node *node)
   34475             : {
   34476             :         M_WideSound *p = (M_WideSound *) node;
   34477          23 :         gf_node_unregister((GF_Node *) p->source, (GF_Node *) p);
   34478          23 :         gf_node_unregister((GF_Node *) p->perceptualParameters, (GF_Node *) p);
   34479          23 :         gf_sg_mffloat_del(p->size);
   34480          23 :         gf_node_free((GF_Node *) p);
   34481          23 : }
   34482             : 
   34483             : static const u16 WideSound_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   34484             : static const u16 WideSound_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   34485             : static const u16 WideSound_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   34486             : static const u16 WideSound_Dyn2All[] = { 1, 2, 8};
   34487             : 
   34488             : static u32 WideSound_get_field_count(GF_Node *node, u8 IndexMode)
   34489             : {
   34490             :         switch(IndexMode) {
   34491             :         case GF_SG_FIELD_CODING_IN:
   34492             :                 return 12;
   34493             :         case GF_SG_FIELD_CODING_DEF:
   34494             :                 return 15;
   34495             :         case GF_SG_FIELD_CODING_OUT:
   34496             :                 return 12;
   34497             :         case GF_SG_FIELD_CODING_DYN:
   34498             :                 return 3;
   34499             :         default:
   34500             :                 return 15;
   34501             :         }
   34502             : }
   34503             : 
   34504             : static GF_Err WideSound_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34505             : {
   34506         120 :         switch(IndexMode) {
   34507           0 :         case GF_SG_FIELD_CODING_IN:
   34508           0 :                 *allField = WideSound_In2All[inField];
   34509             :                 return GF_OK;
   34510         105 :         case GF_SG_FIELD_CODING_DEF:
   34511         105 :                 *allField = WideSound_Def2All[inField];
   34512             :                 return GF_OK;
   34513           0 :         case GF_SG_FIELD_CODING_OUT:
   34514           0 :                 *allField = WideSound_Out2All[inField];
   34515             :                 return GF_OK;
   34516           0 :         case GF_SG_FIELD_CODING_DYN:
   34517           0 :                 *allField = WideSound_Dyn2All[inField];
   34518             :                 return GF_OK;
   34519             :         default:
   34520             :                 return GF_BAD_PARAM;
   34521             :         }
   34522             : }
   34523         366 : static GF_Err WideSound_get_field(GF_Node *node, GF_FieldInfo *info)
   34524             : {
   34525         366 :         switch (info->fieldIndex) {
   34526          14 :         case 0:
   34527          14 :                 info->name = "source";
   34528          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34529          14 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34530          14 :                 info->NDTtype = NDT_SFAudioNode;
   34531          14 :                 info->far_ptr = & ((M_WideSound *)node)->source;
   34532          14 :                 return GF_OK;
   34533          26 :         case 1:
   34534          26 :                 info->name = "intensity";
   34535          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34536          26 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34537          26 :                 info->far_ptr = & ((M_WideSound *) node)->intensity;
   34538          26 :                 return GF_OK;
   34539          26 :         case 2:
   34540          26 :                 info->name = "location";
   34541          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34542          26 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34543          26 :                 info->far_ptr = & ((M_WideSound *) node)->location;
   34544          26 :                 return GF_OK;
   34545          26 :         case 3:
   34546          26 :                 info->name = "spatialize";
   34547          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34548          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34549          26 :                 info->far_ptr = & ((M_WideSound *) node)->spatialize;
   34550          26 :                 return GF_OK;
   34551          14 :         case 4:
   34552          14 :                 info->name = "perceptualParameters";
   34553          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34554          14 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34555          14 :                 info->NDTtype = NDT_SFPerceptualParameterNode;
   34556          14 :                 info->far_ptr = & ((M_WideSound *)node)->perceptualParameters;
   34557          14 :                 return GF_OK;
   34558          26 :         case 5:
   34559          26 :                 info->name = "roomEffect";
   34560          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34561          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34562          26 :                 info->far_ptr = & ((M_WideSound *) node)->roomEffect;
   34563          26 :                 return GF_OK;
   34564          26 :         case 6:
   34565          26 :                 info->name = "shape";
   34566          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34567          26 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34568          26 :                 info->far_ptr = & ((M_WideSound *) node)->shape;
   34569          26 :                 return GF_OK;
   34570          26 :         case 7:
   34571          26 :                 info->name = "size";
   34572          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34573          26 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   34574          26 :                 info->far_ptr = & ((M_WideSound *) node)->size;
   34575          26 :                 return GF_OK;
   34576          26 :         case 8:
   34577          26 :                 info->name = "direction";
   34578          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34579          26 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34580          26 :                 info->far_ptr = & ((M_WideSound *) node)->direction;
   34581          26 :                 return GF_OK;
   34582          26 :         case 9:
   34583          26 :                 info->name = "density";
   34584          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34585          26 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34586          26 :                 info->far_ptr = & ((M_WideSound *) node)->density;
   34587          26 :                 return GF_OK;
   34588          26 :         case 10:
   34589          26 :                 info->name = "diffuseSelect";
   34590          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34591          26 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34592          26 :                 info->far_ptr = & ((M_WideSound *) node)->diffuseSelect;
   34593          26 :                 return GF_OK;
   34594          26 :         case 11:
   34595          26 :                 info->name = "decorrStrength";
   34596          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34597          26 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34598          26 :                 info->far_ptr = & ((M_WideSound *) node)->decorrStrength;
   34599          26 :                 return GF_OK;
   34600          26 :         case 12:
   34601          26 :                 info->name = "speedOfSound";
   34602          26 :                 info->eventType = GF_SG_EVENT_FIELD;
   34603          26 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34604          26 :                 info->far_ptr = & ((M_WideSound *) node)->speedOfSound;
   34605          26 :                 return GF_OK;
   34606          26 :         case 13:
   34607          26 :                 info->name = "distance";
   34608          26 :                 info->eventType = GF_SG_EVENT_FIELD;
   34609          26 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34610          26 :                 info->far_ptr = & ((M_WideSound *) node)->distance;
   34611          26 :                 return GF_OK;
   34612          26 :         case 14:
   34613          26 :                 info->name = "useAirabs";
   34614          26 :                 info->eventType = GF_SG_EVENT_FIELD;
   34615          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34616          26 :                 info->far_ptr = & ((M_WideSound *) node)->useAirabs;
   34617          26 :                 return GF_OK;
   34618             :         default:
   34619             :                 return GF_BAD_PARAM;
   34620             :         }
   34621             : }
   34622             : 
   34623             : 
   34624          15 : static s32 WideSound_get_field_index_by_name(char *name)
   34625             : {
   34626          15 :         if (!strcmp("source", name)) return 0;
   34627          14 :         if (!strcmp("intensity", name)) return 1;
   34628          13 :         if (!strcmp("location", name)) return 2;
   34629          12 :         if (!strcmp("spatialize", name)) return 3;
   34630          11 :         if (!strcmp("perceptualParameters", name)) return 4;
   34631          10 :         if (!strcmp("roomEffect", name)) return 5;
   34632           9 :         if (!strcmp("shape", name)) return 6;
   34633           8 :         if (!strcmp("size", name)) return 7;
   34634           7 :         if (!strcmp("direction", name)) return 8;
   34635           6 :         if (!strcmp("density", name)) return 9;
   34636           5 :         if (!strcmp("diffuseSelect", name)) return 10;
   34637           4 :         if (!strcmp("decorrStrength", name)) return 11;
   34638           3 :         if (!strcmp("speedOfSound", name)) return 12;
   34639           2 :         if (!strcmp("distance", name)) return 13;
   34640           1 :         if (!strcmp("useAirabs", name)) return 14;
   34641           0 :         return -1;
   34642             : }
   34643          15 : static Bool WideSound_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34644             : {
   34645          15 :         switch (FieldIndex) {
   34646           1 :         case 1:
   34647           1 :                 *AType = 7;
   34648           1 :                 *QType = 0;
   34649           1 :                 *b_min = FLT2FIX(0);
   34650           1 :                 *b_max = FLT2FIX(1);
   34651             :                 return 1;
   34652           1 :         case 2:
   34653           1 :                 *AType = 1;
   34654           1 :                 *QType = 1;
   34655           1 :                 *b_min = FIX_MIN;
   34656           1 :                 *b_max = FIX_MAX;
   34657             :                 return 1;
   34658           1 :         case 6:
   34659           1 :                 *AType = 0;
   34660           1 :                 *QType = 13;
   34661           1 :                 *QT13_bits = 4;
   34662           1 :                 *b_min = FLT2FIX(0);
   34663           1 :                 *b_max = FLT2FIX(4);
   34664             :                 return 1;
   34665           1 :         case 8:
   34666           1 :                 *AType = 9;
   34667           1 :                 *QType = 9;
   34668           1 :                 *b_min = FIX_MIN;
   34669           1 :                 *b_max = FIX_MAX;
   34670             :                 return 1;
   34671           1 :         case 10:
   34672           1 :                 *AType = 0;
   34673           1 :                 *QType = 0;
   34674           1 :                 *b_min = FLT2FIX(0);
   34675           1 :                 *b_max = FIX_MAX;
   34676             :                 return 1;
   34677           1 :         case 12:
   34678           1 :                 *AType = 0;
   34679           1 :                 *QType = 1;
   34680           1 :                 *b_min = FLT2FIX(0);
   34681           1 :                 *b_max = FIX_MAX;
   34682             :                 return 1;
   34683           1 :         case 13:
   34684           1 :                 *AType = 0;
   34685           1 :                 *QType = 0;
   34686           1 :                 *b_min = FLT2FIX(0);
   34687           1 :                 *b_max = FIX_MAX;
   34688             :                 return 1;
   34689             :         default:
   34690             :                 return 0;
   34691             :         }
   34692             : }
   34693             : 
   34694             : 
   34695             : 
   34696          23 : GF_Node *WideSound_Create()
   34697             : {
   34698             :         M_WideSound *p;
   34699          23 :         GF_SAFEALLOC(p, M_WideSound);
   34700          23 :         if(!p) return NULL;
   34701          23 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_WideSound);
   34702             : 
   34703             :         /*default field values*/
   34704          23 :         p->intensity = FLT2FIX(1);
   34705          23 :         p->location.x = FLT2FIX(0.0);
   34706          23 :         p->location.y = FLT2FIX(0.0);
   34707          23 :         p->location.z = FLT2FIX(0.0);
   34708          23 :         p->spatialize = 1;
   34709          23 :         p->shape = 0;
   34710          23 :         p->size.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   34711          23 :         p->size.count = 1;
   34712          23 :         p->size.vals[0] = FLT2FIX(0.0);
   34713          23 :         p->direction.x = FLT2FIX(0.0);
   34714          23 :         p->direction.y = FLT2FIX(1.0);
   34715          23 :         p->direction.z = FLT2FIX(0.0);
   34716          23 :         p->density = FLT2FIX(0.5);
   34717          23 :         p->diffuseSelect = 1;
   34718          23 :         p->decorrStrength = FLT2FIX(1.0);
   34719          23 :         p->speedOfSound = FLT2FIX(340.0);
   34720          23 :         p->distance = FLT2FIX(1000.0);
   34721          23 :         return (GF_Node *)p;
   34722             : }
   34723             : 
   34724             : 
   34725             : /*
   34726             :         ScoreShape Node deletion
   34727             : */
   34728             : 
   34729          23 : static void ScoreShape_Del(GF_Node *node)
   34730             : {
   34731             :         M_ScoreShape *p = (M_ScoreShape *) node;
   34732          23 :         gf_node_unregister((GF_Node *) p->score, (GF_Node *) p);
   34733          23 :         gf_node_unregister((GF_Node *) p->geometry, (GF_Node *) p);
   34734          23 :         gf_node_free((GF_Node *) p);
   34735          23 : }
   34736             : 
   34737             : static const u16 ScoreShape_Def2All[] = { 0, 1};
   34738             : static const u16 ScoreShape_In2All[] = { 0, 1};
   34739             : static const u16 ScoreShape_Out2All[] = { 0, 1};
   34740             : 
   34741             : static u32 ScoreShape_get_field_count(GF_Node *node, u8 IndexMode)
   34742             : {
   34743          30 :         switch(IndexMode) {
   34744             :         case GF_SG_FIELD_CODING_IN:
   34745             :                 return 2;
   34746             :         case GF_SG_FIELD_CODING_DEF:
   34747             :                 return 2;
   34748             :         case GF_SG_FIELD_CODING_OUT:
   34749             :                 return 2;
   34750           1 :         case GF_SG_FIELD_CODING_DYN:
   34751             :                 return 0;
   34752             :         default:
   34753             :                 return 2;
   34754             :         }
   34755             : }
   34756             : 
   34757             : static GF_Err ScoreShape_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34758             : {
   34759          16 :         switch(IndexMode) {
   34760           0 :         case GF_SG_FIELD_CODING_IN:
   34761           0 :                 *allField = ScoreShape_In2All[inField];
   34762             :                 return GF_OK;
   34763          14 :         case GF_SG_FIELD_CODING_DEF:
   34764          14 :                 *allField = ScoreShape_Def2All[inField];
   34765             :                 return GF_OK;
   34766           0 :         case GF_SG_FIELD_CODING_OUT:
   34767           0 :                 *allField = ScoreShape_Out2All[inField];
   34768             :                 return GF_OK;
   34769             :         default:
   34770             :                 return GF_BAD_PARAM;
   34771             :         }
   34772             : }
   34773             : static GF_Err ScoreShape_get_field(GF_Node *node, GF_FieldInfo *info)
   34774             : {
   34775          28 :         switch (info->fieldIndex) {
   34776          14 :         case 0:
   34777          14 :                 info->name = "score";
   34778          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34779          14 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34780          14 :                 info->NDTtype = NDT_SFMusicScoreNode;
   34781          14 :                 info->far_ptr = & ((M_ScoreShape *)node)->score;
   34782             :                 return GF_OK;
   34783          14 :         case 1:
   34784          14 :                 info->name = "geometry";
   34785          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34786          14 :                 info->fieldType = GF_SG_VRML_SFNODE;
   34787          14 :                 info->NDTtype = NDT_SF2DNode;
   34788          14 :                 info->far_ptr = & ((M_ScoreShape *)node)->geometry;
   34789             :                 return GF_OK;
   34790             :         default:
   34791             :                 return GF_BAD_PARAM;
   34792             :         }
   34793             : }
   34794             : 
   34795             : 
   34796           2 : static s32 ScoreShape_get_field_index_by_name(char *name)
   34797             : {
   34798           2 :         if (!strcmp("score", name)) return 0;
   34799           1 :         if (!strcmp("geometry", name)) return 1;
   34800           0 :         return -1;
   34801             : }
   34802             : static Bool ScoreShape_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   34803             : {
   34804             :         switch (FieldIndex) {
   34805             :         default:
   34806             :                 return 0;
   34807             :         }
   34808             : }
   34809             : 
   34810             : 
   34811             : 
   34812          23 : GF_Node *ScoreShape_Create()
   34813             : {
   34814             :         M_ScoreShape *p;
   34815          23 :         GF_SAFEALLOC(p, M_ScoreShape);
   34816          23 :         if(!p) return NULL;
   34817          23 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_ScoreShape);
   34818             : 
   34819             :         /*default field values*/
   34820          23 :         return (GF_Node *)p;
   34821             : }
   34822             : 
   34823             : 
   34824             : /*
   34825             :         MusicScore Node deletion
   34826             : */
   34827             : 
   34828           1 : static void MusicScore_Del(GF_Node *node)
   34829             : {
   34830             :         M_MusicScore *p = (M_MusicScore *) node;
   34831           1 :         gf_sg_sfstring_del(p->gotoLabel);
   34832           1 :         gf_sg_mfstring_del(p->argumentsOnExecute);
   34833           1 :         gf_sg_sfstring_del(p->commandOnExecute);
   34834           1 :         gf_sg_mfstring_del(p->partsLyrics);
   34835           1 :         gf_sg_mfint32_del(p->partsShown);
   34836           1 :         gf_sg_mfurl_del(p->url);
   34837           1 :         gf_sg_mfurl_del(p->urlSA);
   34838           1 :         gf_sg_sfstring_del(p->viewType);
   34839           1 :         gf_sg_sfstring_del(p->activatedLink);
   34840           1 :         gf_sg_mfstring_del(p->availableCommands);
   34841           1 :         gf_sg_mfstring_del(p->availableLabels);
   34842           1 :         gf_sg_mfstring_del(p->availableLyricLanguages);
   34843           1 :         gf_sg_mfstring_del(p->availableViewTypes);
   34844           1 :         gf_sg_mfstring_del(p->partNames);
   34845           1 :         gf_node_free((GF_Node *) p);
   34846           1 : }
   34847             : 
   34848             : static const u16 MusicScore_Def2All[] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   34849             : static const u16 MusicScore_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
   34850             : static const u16 MusicScore_Out2All[] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30};
   34851             : static const u16 MusicScore_Dyn2All[] = { 14};
   34852             : 
   34853             : static u32 MusicScore_get_field_count(GF_Node *node, u8 IndexMode)
   34854             : {
   34855             :         switch(IndexMode) {
   34856             :         case GF_SG_FIELD_CODING_IN:
   34857             :                 return 21;
   34858             :         case GF_SG_FIELD_CODING_DEF:
   34859             :                 return 16;
   34860             :         case GF_SG_FIELD_CODING_OUT:
   34861             :                 return 26;
   34862             :         case GF_SG_FIELD_CODING_DYN:
   34863             :                 return 1;
   34864             :         default:
   34865             :                 return 31;
   34866             :         }
   34867             : }
   34868             : 
   34869             : static GF_Err MusicScore_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   34870             : {
   34871          31 :         switch(IndexMode) {
   34872           0 :         case GF_SG_FIELD_CODING_IN:
   34873           0 :                 *allField = MusicScore_In2All[inField];
   34874             :                 return GF_OK;
   34875           0 :         case GF_SG_FIELD_CODING_DEF:
   34876           0 :                 *allField = MusicScore_Def2All[inField];
   34877             :                 return GF_OK;
   34878           0 :         case GF_SG_FIELD_CODING_OUT:
   34879           0 :                 *allField = MusicScore_Out2All[inField];
   34880             :                 return GF_OK;
   34881           0 :         case GF_SG_FIELD_CODING_DYN:
   34882           0 :                 *allField = MusicScore_Dyn2All[inField];
   34883             :                 return GF_OK;
   34884             :         default:
   34885             :                 return GF_BAD_PARAM;
   34886             :         }
   34887             : }
   34888          62 : static GF_Err MusicScore_get_field(GF_Node *node, GF_FieldInfo *info)
   34889             : {
   34890          62 :         switch (info->fieldIndex) {
   34891           2 :         case 0:
   34892           2 :                 info->name = "executeCommand";
   34893           2 :                 info->eventType = GF_SG_EVENT_IN;
   34894           2 :                 info->on_event_in = ((M_MusicScore *)node)->on_executeCommand;
   34895           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34896           2 :                 info->far_ptr = & ((M_MusicScore *) node)->executeCommand;
   34897           2 :                 return GF_OK;
   34898           2 :         case 1:
   34899           2 :                 info->name = "gotoLabel";
   34900           2 :                 info->eventType = GF_SG_EVENT_IN;
   34901           2 :                 info->on_event_in = ((M_MusicScore *)node)->on_gotoLabel;
   34902           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   34903           2 :                 info->far_ptr = & ((M_MusicScore *) node)->gotoLabel;
   34904           2 :                 return GF_OK;
   34905           2 :         case 2:
   34906           2 :                 info->name = "gotoMeasure";
   34907           2 :                 info->eventType = GF_SG_EVENT_IN;
   34908           2 :                 info->on_event_in = ((M_MusicScore *)node)->on_gotoMeasure;
   34909           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34910           2 :                 info->far_ptr = & ((M_MusicScore *) node)->gotoMeasure;
   34911           2 :                 return GF_OK;
   34912           2 :         case 3:
   34913           2 :                 info->name = "highlightTimePosition";
   34914           2 :                 info->eventType = GF_SG_EVENT_IN;
   34915           2 :                 info->on_event_in = ((M_MusicScore *)node)->on_highlightTimePosition;
   34916           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34917           2 :                 info->far_ptr = & ((M_MusicScore *) node)->highlightTimePosition;
   34918           2 :                 return GF_OK;
   34919           2 :         case 4:
   34920           2 :                 info->name = "mousePosition";
   34921           2 :                 info->eventType = GF_SG_EVENT_IN;
   34922           2 :                 info->on_event_in = ((M_MusicScore *)node)->on_mousePosition;
   34923           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   34924           2 :                 info->far_ptr = & ((M_MusicScore *) node)->mousePosition;
   34925           2 :                 return GF_OK;
   34926           2 :         case 5:
   34927           2 :                 info->name = "argumentsOnExecute";
   34928           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34929           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   34930           2 :                 info->far_ptr = & ((M_MusicScore *) node)->argumentsOnExecute;
   34931           2 :                 return GF_OK;
   34932           2 :         case 6:
   34933           2 :                 info->name = "commandOnExecute";
   34934           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34935           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   34936           2 :                 info->far_ptr = & ((M_MusicScore *) node)->commandOnExecute;
   34937           2 :                 return GF_OK;
   34938           2 :         case 7:
   34939           2 :                 info->name = "firstVisibleMeasure";
   34940           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34941           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   34942           2 :                 info->far_ptr = & ((M_MusicScore *) node)->firstVisibleMeasure;
   34943           2 :                 return GF_OK;
   34944           2 :         case 8:
   34945           2 :                 info->name = "hyperlinkEnable";
   34946           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34947           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34948           2 :                 info->far_ptr = & ((M_MusicScore *) node)->hyperlinkEnable;
   34949           2 :                 return GF_OK;
   34950           2 :         case 9:
   34951           2 :                 info->name = "loop";
   34952           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34953           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   34954           2 :                 info->far_ptr = & ((M_MusicScore *) node)->loop;
   34955           2 :                 return GF_OK;
   34956           2 :         case 10:
   34957           2 :                 info->name = "partsLyrics";
   34958           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34959           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   34960           2 :                 info->far_ptr = & ((M_MusicScore *) node)->partsLyrics;
   34961           2 :                 return GF_OK;
   34962           2 :         case 11:
   34963           2 :                 info->name = "partsShown";
   34964           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34965           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   34966           2 :                 info->far_ptr = & ((M_MusicScore *) node)->partsShown;
   34967           2 :                 return GF_OK;
   34968           2 :         case 12:
   34969           2 :                 info->name = "scoreOffset";
   34970           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34971           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34972           2 :                 info->far_ptr = & ((M_MusicScore *) node)->scoreOffset;
   34973           2 :                 return GF_OK;
   34974           2 :         case 13:
   34975           2 :                 info->name = "size";
   34976           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34977           2 :                 info->fieldType = GF_SG_VRML_SFVEC2F;
   34978           2 :                 info->far_ptr = & ((M_MusicScore *) node)->size;
   34979           2 :                 return GF_OK;
   34980           2 :         case 14:
   34981           2 :                 info->name = "speed";
   34982           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34983           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   34984           2 :                 info->far_ptr = & ((M_MusicScore *) node)->speed;
   34985           2 :                 return GF_OK;
   34986           2 :         case 15:
   34987           2 :                 info->name = "startTime";
   34988           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34989           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34990           2 :                 info->far_ptr = & ((M_MusicScore *) node)->startTime;
   34991           2 :                 return GF_OK;
   34992           2 :         case 16:
   34993           2 :                 info->name = "stopTime";
   34994           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   34995           2 :                 info->fieldType = GF_SG_VRML_SFTIME;
   34996           2 :                 info->far_ptr = & ((M_MusicScore *) node)->stopTime;
   34997           2 :                 return GF_OK;
   34998           2 :         case 17:
   34999           2 :                 info->name = "transpose";
   35000           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35001           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35002           2 :                 info->far_ptr = & ((M_MusicScore *) node)->transpose;
   35003           2 :                 return GF_OK;
   35004           2 :         case 18:
   35005           2 :                 info->name = "url";
   35006           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35007           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   35008           2 :                 info->far_ptr = & ((M_MusicScore *) node)->url;
   35009           2 :                 return GF_OK;
   35010           2 :         case 19:
   35011           2 :                 info->name = "urlSA";
   35012           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35013           2 :                 info->fieldType = GF_SG_VRML_MFURL;
   35014           2 :                 info->far_ptr = & ((M_MusicScore *) node)->urlSA;
   35015           2 :                 return GF_OK;
   35016           2 :         case 20:
   35017           2 :                 info->name = "viewType";
   35018           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35019           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   35020           2 :                 info->far_ptr = & ((M_MusicScore *) node)->viewType;
   35021           2 :                 return GF_OK;
   35022           2 :         case 21:
   35023           2 :                 info->name = "activatedLink";
   35024           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35025           2 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   35026           2 :                 info->far_ptr = & ((M_MusicScore *) node)->activatedLink;
   35027           2 :                 return GF_OK;
   35028           2 :         case 22:
   35029           2 :                 info->name = "availableCommands";
   35030           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35031           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35032           2 :                 info->far_ptr = & ((M_MusicScore *) node)->availableCommands;
   35033           2 :                 return GF_OK;
   35034           2 :         case 23:
   35035           2 :                 info->name = "availableLabels";
   35036           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35037           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35038           2 :                 info->far_ptr = & ((M_MusicScore *) node)->availableLabels;
   35039           2 :                 return GF_OK;
   35040           2 :         case 24:
   35041           2 :                 info->name = "availableLyricLanguages";
   35042           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35043           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35044           2 :                 info->far_ptr = & ((M_MusicScore *) node)->availableLyricLanguages;
   35045           2 :                 return GF_OK;
   35046           2 :         case 25:
   35047           2 :                 info->name = "availableViewTypes";
   35048           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35049           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35050           2 :                 info->far_ptr = & ((M_MusicScore *) node)->availableViewTypes;
   35051           2 :                 return GF_OK;
   35052           2 :         case 26:
   35053           2 :                 info->name = "isActive";
   35054           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35055           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35056           2 :                 info->far_ptr = & ((M_MusicScore *) node)->isActive;
   35057           2 :                 return GF_OK;
   35058           2 :         case 27:
   35059           2 :                 info->name = "highlightPosition";
   35060           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35061           2 :                 info->fieldType = GF_SG_VRML_SFVEC3F;
   35062           2 :                 info->far_ptr = & ((M_MusicScore *) node)->highlightPosition;
   35063           2 :                 return GF_OK;
   35064           2 :         case 28:
   35065           2 :                 info->name = "lastVisibleMeasure";
   35066           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35067           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35068           2 :                 info->far_ptr = & ((M_MusicScore *) node)->lastVisibleMeasure;
   35069           2 :                 return GF_OK;
   35070           2 :         case 29:
   35071           2 :                 info->name = "numMeasures";
   35072           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35073           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35074           2 :                 info->far_ptr = & ((M_MusicScore *) node)->numMeasures;
   35075           2 :                 return GF_OK;
   35076           2 :         case 30:
   35077           2 :                 info->name = "partNames";
   35078           2 :                 info->eventType = GF_SG_EVENT_OUT;
   35079           2 :                 info->fieldType = GF_SG_VRML_MFSTRING;
   35080           2 :                 info->far_ptr = & ((M_MusicScore *) node)->partNames;
   35081           2 :                 return GF_OK;
   35082             :         default:
   35083             :                 return GF_BAD_PARAM;
   35084             :         }
   35085             : }
   35086             : 
   35087             : 
   35088          31 : static s32 MusicScore_get_field_index_by_name(char *name)
   35089             : {
   35090          31 :         if (!strcmp("executeCommand", name)) return 0;
   35091          30 :         if (!strcmp("gotoLabel", name)) return 1;
   35092          29 :         if (!strcmp("gotoMeasure", name)) return 2;
   35093          28 :         if (!strcmp("highlightTimePosition", name)) return 3;
   35094          27 :         if (!strcmp("mousePosition", name)) return 4;
   35095          26 :         if (!strcmp("argumentsOnExecute", name)) return 5;
   35096          25 :         if (!strcmp("commandOnExecute", name)) return 6;
   35097          24 :         if (!strcmp("firstVisibleMeasure", name)) return 7;
   35098          23 :         if (!strcmp("hyperlinkEnable", name)) return 8;
   35099          22 :         if (!strcmp("loop", name)) return 9;
   35100          21 :         if (!strcmp("partsLyrics", name)) return 10;
   35101          20 :         if (!strcmp("partsShown", name)) return 11;
   35102          19 :         if (!strcmp("scoreOffset", name)) return 12;
   35103          18 :         if (!strcmp("size", name)) return 13;
   35104          17 :         if (!strcmp("speed", name)) return 14;
   35105          16 :         if (!strcmp("startTime", name)) return 15;
   35106          15 :         if (!strcmp("stopTime", name)) return 16;
   35107          14 :         if (!strcmp("transpose", name)) return 17;
   35108          13 :         if (!strcmp("url", name)) return 18;
   35109          12 :         if (!strcmp("urlSA", name)) return 19;
   35110          11 :         if (!strcmp("viewType", name)) return 20;
   35111          10 :         if (!strcmp("activatedLink", name)) return 21;
   35112           9 :         if (!strcmp("availableCommands", name)) return 22;
   35113           8 :         if (!strcmp("availableLabels", name)) return 23;
   35114           7 :         if (!strcmp("availableLyricLanguages", name)) return 24;
   35115           6 :         if (!strcmp("availableViewTypes", name)) return 25;
   35116           5 :         if (!strcmp("isActive", name)) return 26;
   35117           4 :         if (!strcmp("highlightPosition", name)) return 27;
   35118           3 :         if (!strcmp("lastVisibleMeasure", name)) return 28;
   35119           2 :         if (!strcmp("numMeasures", name)) return 29;
   35120           1 :         if (!strcmp("partNames", name)) return 30;
   35121           0 :         return -1;
   35122             : }
   35123             : static Bool MusicScore_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35124             : {
   35125          31 :         switch (FieldIndex) {
   35126           1 :         case 14:
   35127           1 :                 *AType = 7;
   35128           1 :                 *QType = 0;
   35129           1 :                 *b_min = FIX_MIN;
   35130           1 :                 *b_max = FIX_MAX;
   35131             :                 return 1;
   35132             :         default:
   35133             :                 return 0;
   35134             :         }
   35135             : }
   35136             : 
   35137             : 
   35138             : 
   35139           1 : GF_Node *MusicScore_Create()
   35140             : {
   35141             :         M_MusicScore *p;
   35142           1 :         GF_SAFEALLOC(p, M_MusicScore);
   35143           1 :         if(!p) return NULL;
   35144           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_MusicScore);
   35145             : 
   35146             :         /*default field values*/
   35147           1 :         p->firstVisibleMeasure = 0;
   35148           1 :         p->hyperlinkEnable = 1;
   35149           1 :         p->scoreOffset = 0.0;
   35150           1 :         p->size.x = FLT2FIX(-1);
   35151           1 :         p->size.y = FLT2FIX(-1);
   35152           1 :         p->speed = FLT2FIX(1.0);
   35153           1 :         p->startTime = 0;
   35154           1 :         p->stopTime = 0;
   35155           1 :         p->transpose = FLT2FIX(0.0);
   35156           1 :         return (GF_Node *)p;
   35157             : }
   35158             : 
   35159             : 
   35160             : /*
   35161             :         FootPrintSetNode Node deletion
   35162             : */
   35163             : 
   35164             : static void FootPrintSetNode_Del(GF_Node *node)
   35165             : {
   35166             :         M_FootPrintSetNode *p = (M_FootPrintSetNode *) node;
   35167           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   35168           1 :         gf_node_free((GF_Node *) p);
   35169             : }
   35170             : 
   35171             : static const u16 FootPrintSetNode_Def2All[] = { 0};
   35172             : static const u16 FootPrintSetNode_In2All[] = { 0};
   35173             : static const u16 FootPrintSetNode_Out2All[] = { 0};
   35174             : 
   35175             : static u32 FootPrintSetNode_get_field_count(GF_Node *node, u8 IndexMode)
   35176             : {
   35177           6 :         switch(IndexMode) {
   35178             :         case GF_SG_FIELD_CODING_IN:
   35179             :                 return 1;
   35180             :         case GF_SG_FIELD_CODING_DEF:
   35181             :                 return 1;
   35182             :         case GF_SG_FIELD_CODING_OUT:
   35183             :                 return 1;
   35184           1 :         case GF_SG_FIELD_CODING_DYN:
   35185             :                 return 0;
   35186             :         default:
   35187             :                 return 1;
   35188             :         }
   35189             : }
   35190             : 
   35191             : static GF_Err FootPrintSetNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35192             : {
   35193           1 :         switch(IndexMode) {
   35194           0 :         case GF_SG_FIELD_CODING_IN:
   35195           0 :                 *allField = FootPrintSetNode_In2All[inField];
   35196             :                 return GF_OK;
   35197           0 :         case GF_SG_FIELD_CODING_DEF:
   35198           0 :                 *allField = FootPrintSetNode_Def2All[inField];
   35199             :                 return GF_OK;
   35200           0 :         case GF_SG_FIELD_CODING_OUT:
   35201           0 :                 *allField = FootPrintSetNode_Out2All[inField];
   35202             :                 return GF_OK;
   35203             :         default:
   35204             :                 return GF_BAD_PARAM;
   35205             :         }
   35206             : }
   35207             : static GF_Err FootPrintSetNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35208             : {
   35209           2 :         switch (info->fieldIndex) {
   35210           2 :         case 0:
   35211           2 :                 info->name = "children";
   35212           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35213           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35214           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35215           2 :                 info->far_ptr = & ((M_FootPrintSetNode *)node)->children;
   35216             :                 return GF_OK;
   35217             :         default:
   35218             :                 return GF_BAD_PARAM;
   35219             :         }
   35220             : }
   35221             : 
   35222             : 
   35223             : static s32 FootPrintSetNode_get_field_index_by_name(char *name)
   35224             : {
   35225           1 :         if (!strcmp("children", name)) return 0;
   35226             :         return -1;
   35227             : }
   35228             : static Bool FootPrintSetNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35229             : {
   35230             :         switch (FieldIndex) {
   35231             :         default:
   35232             :                 return 0;
   35233             :         }
   35234             : }
   35235             : 
   35236             : 
   35237             : 
   35238           1 : GF_Node *FootPrintSetNode_Create()
   35239             : {
   35240             :         M_FootPrintSetNode *p;
   35241           1 :         GF_SAFEALLOC(p, M_FootPrintSetNode);
   35242           1 :         if(!p) return NULL;
   35243           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FootPrintSetNode);
   35244           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   35245             : 
   35246             :         /*default field values*/
   35247           1 :         return (GF_Node *)p;
   35248             : }
   35249             : 
   35250             : 
   35251             : /*
   35252             :         FootPrintNode Node deletion
   35253             : */
   35254             : 
   35255             : static void FootPrintNode_Del(GF_Node *node)
   35256             : {
   35257             :         M_FootPrintNode *p = (M_FootPrintNode *) node;
   35258           1 :         gf_node_unregister((GF_Node *) p->footprint, (GF_Node *) p);
   35259           1 :         gf_node_free((GF_Node *) p);
   35260             : }
   35261             : 
   35262             : static const u16 FootPrintNode_Def2All[] = { 0, 1};
   35263             : static const u16 FootPrintNode_In2All[] = { 0, 1};
   35264             : static const u16 FootPrintNode_Out2All[] = { 0, 1};
   35265             : 
   35266             : static u32 FootPrintNode_get_field_count(GF_Node *node, u8 IndexMode)
   35267             : {
   35268           6 :         switch(IndexMode) {
   35269             :         case GF_SG_FIELD_CODING_IN:
   35270             :                 return 2;
   35271             :         case GF_SG_FIELD_CODING_DEF:
   35272             :                 return 2;
   35273             :         case GF_SG_FIELD_CODING_OUT:
   35274             :                 return 2;
   35275           1 :         case GF_SG_FIELD_CODING_DYN:
   35276             :                 return 0;
   35277             :         default:
   35278             :                 return 2;
   35279             :         }
   35280             : }
   35281             : 
   35282             : static GF_Err FootPrintNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35283             : {
   35284           2 :         switch(IndexMode) {
   35285           0 :         case GF_SG_FIELD_CODING_IN:
   35286           0 :                 *allField = FootPrintNode_In2All[inField];
   35287             :                 return GF_OK;
   35288           0 :         case GF_SG_FIELD_CODING_DEF:
   35289           0 :                 *allField = FootPrintNode_Def2All[inField];
   35290             :                 return GF_OK;
   35291           0 :         case GF_SG_FIELD_CODING_OUT:
   35292           0 :                 *allField = FootPrintNode_Out2All[inField];
   35293             :                 return GF_OK;
   35294             :         default:
   35295             :                 return GF_BAD_PARAM;
   35296             :         }
   35297             : }
   35298             : static GF_Err FootPrintNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35299             : {
   35300           4 :         switch (info->fieldIndex) {
   35301           2 :         case 0:
   35302           2 :                 info->name = "index";
   35303           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35304           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35305           2 :                 info->far_ptr = & ((M_FootPrintNode *) node)->index;
   35306             :                 return GF_OK;
   35307           2 :         case 1:
   35308           2 :                 info->name = "footprint";
   35309           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35310           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35311           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35312           2 :                 info->far_ptr = & ((M_FootPrintNode *)node)->footprint;
   35313             :                 return GF_OK;
   35314             :         default:
   35315             :                 return GF_BAD_PARAM;
   35316             :         }
   35317             : }
   35318             : 
   35319             : 
   35320           2 : static s32 FootPrintNode_get_field_index_by_name(char *name)
   35321             : {
   35322           2 :         if (!strcmp("index", name)) return 0;
   35323           1 :         if (!strcmp("footprint", name)) return 1;
   35324           0 :         return -1;
   35325             : }
   35326             : static Bool FootPrintNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35327             : {
   35328             :         switch (FieldIndex) {
   35329             :         default:
   35330             :                 return 0;
   35331             :         }
   35332             : }
   35333             : 
   35334             : 
   35335             : 
   35336           1 : GF_Node *FootPrintNode_Create()
   35337             : {
   35338             :         M_FootPrintNode *p;
   35339           1 :         GF_SAFEALLOC(p, M_FootPrintNode);
   35340           1 :         if(!p) return NULL;
   35341           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FootPrintNode);
   35342             : 
   35343             :         /*default field values*/
   35344           1 :         p->index = -1;
   35345           1 :         return (GF_Node *)p;
   35346             : }
   35347             : 
   35348             : 
   35349             : /*
   35350             :         BuildingPartNode Node deletion
   35351             : */
   35352             : 
   35353           1 : static void BuildingPartNode_Del(GF_Node *node)
   35354             : {
   35355             :         M_BuildingPartNode *p = (M_BuildingPartNode *) node;
   35356           1 :         gf_node_unregister((GF_Node *) p->footprint, (GF_Node *) p);
   35357           1 :         gf_node_unregister_children((GF_Node *) p, p->alternativeGeometry);
   35358           1 :         gf_node_unregister_children((GF_Node *) p, p->roofs);
   35359           1 :         gf_node_unregister_children((GF_Node *) p, p->facades);
   35360           1 :         gf_node_free((GF_Node *) p);
   35361           1 : }
   35362             : 
   35363             : static const u16 BuildingPartNode_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   35364             : static const u16 BuildingPartNode_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   35365             : static const u16 BuildingPartNode_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   35366             : 
   35367             : static u32 BuildingPartNode_get_field_count(GF_Node *node, u8 IndexMode)
   35368             : {
   35369           6 :         switch(IndexMode) {
   35370             :         case GF_SG_FIELD_CODING_IN:
   35371             :                 return 8;
   35372             :         case GF_SG_FIELD_CODING_DEF:
   35373             :                 return 8;
   35374             :         case GF_SG_FIELD_CODING_OUT:
   35375             :                 return 8;
   35376           1 :         case GF_SG_FIELD_CODING_DYN:
   35377             :                 return 0;
   35378             :         default:
   35379             :                 return 8;
   35380             :         }
   35381             : }
   35382             : 
   35383             : static GF_Err BuildingPartNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35384             : {
   35385           8 :         switch(IndexMode) {
   35386           0 :         case GF_SG_FIELD_CODING_IN:
   35387           0 :                 *allField = BuildingPartNode_In2All[inField];
   35388             :                 return GF_OK;
   35389           0 :         case GF_SG_FIELD_CODING_DEF:
   35390           0 :                 *allField = BuildingPartNode_Def2All[inField];
   35391             :                 return GF_OK;
   35392           0 :         case GF_SG_FIELD_CODING_OUT:
   35393           0 :                 *allField = BuildingPartNode_Out2All[inField];
   35394             :                 return GF_OK;
   35395             :         default:
   35396             :                 return GF_BAD_PARAM;
   35397             :         }
   35398             : }
   35399          16 : static GF_Err BuildingPartNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35400             : {
   35401          16 :         switch (info->fieldIndex) {
   35402           2 :         case 0:
   35403           2 :                 info->name = "index";
   35404           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35405           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35406           2 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->index;
   35407           2 :                 return GF_OK;
   35408           2 :         case 1:
   35409           2 :                 info->name = "footprint";
   35410           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35411           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35412           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35413           2 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->footprint;
   35414           2 :                 return GF_OK;
   35415           2 :         case 2:
   35416           2 :                 info->name = "buildingIndex";
   35417           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35418           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35419           2 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->buildingIndex;
   35420           2 :                 return GF_OK;
   35421           2 :         case 3:
   35422           2 :                 info->name = "height";
   35423           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35424           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35425           2 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->height;
   35426           2 :                 return GF_OK;
   35427           2 :         case 4:
   35428           2 :                 info->name = "altitude";
   35429           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35430           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35431           2 :                 info->far_ptr = & ((M_BuildingPartNode *) node)->altitude;
   35432           2 :                 return GF_OK;
   35433           2 :         case 5:
   35434           2 :                 info->name = "alternativeGeometry";
   35435           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35436           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35437           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35438           2 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->alternativeGeometry;
   35439           2 :                 return GF_OK;
   35440           2 :         case 6:
   35441           2 :                 info->name = "roofs";
   35442           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35443           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35444           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35445           2 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->roofs;
   35446           2 :                 return GF_OK;
   35447           2 :         case 7:
   35448           2 :                 info->name = "facades";
   35449           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35450           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35451           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35452           2 :                 info->far_ptr = & ((M_BuildingPartNode *)node)->facades;
   35453           2 :                 return GF_OK;
   35454             :         default:
   35455             :                 return GF_BAD_PARAM;
   35456             :         }
   35457             : }
   35458             : 
   35459             : 
   35460           8 : static s32 BuildingPartNode_get_field_index_by_name(char *name)
   35461             : {
   35462           8 :         if (!strcmp("index", name)) return 0;
   35463           7 :         if (!strcmp("footprint", name)) return 1;
   35464           6 :         if (!strcmp("buildingIndex", name)) return 2;
   35465           5 :         if (!strcmp("height", name)) return 3;
   35466           4 :         if (!strcmp("altitude", name)) return 4;
   35467           3 :         if (!strcmp("alternativeGeometry", name)) return 5;
   35468           2 :         if (!strcmp("roofs", name)) return 6;
   35469           1 :         if (!strcmp("facades", name)) return 7;
   35470           0 :         return -1;
   35471             : }
   35472             : static Bool BuildingPartNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35473             : {
   35474             :         switch (FieldIndex) {
   35475             :         default:
   35476             :                 return 0;
   35477             :         }
   35478             : }
   35479             : 
   35480             : 
   35481             : 
   35482           1 : GF_Node *BuildingPartNode_Create()
   35483             : {
   35484             :         M_BuildingPartNode *p;
   35485           1 :         GF_SAFEALLOC(p, M_BuildingPartNode);
   35486           1 :         if(!p) return NULL;
   35487           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_BuildingPartNode);
   35488             : 
   35489             :         /*default field values*/
   35490           1 :         p->index = -1;
   35491           1 :         p->buildingIndex = -1;
   35492           1 :         p->height = FLT2FIX(0);
   35493           1 :         p->altitude = FLT2FIX(0);
   35494           1 :         return (GF_Node *)p;
   35495             : }
   35496             : 
   35497             : 
   35498             : /*
   35499             :         RoofNode Node deletion
   35500             : */
   35501             : 
   35502           1 : static void RoofNode_Del(GF_Node *node)
   35503             : {
   35504             :         M_RoofNode *p = (M_RoofNode *) node;
   35505           1 :         gf_sg_mffloat_del(p->SlopeAngle);
   35506           1 :         gf_sg_sfurl_del(p->RoofTextureURL);
   35507           1 :         gf_node_free((GF_Node *) p);
   35508           1 : }
   35509             : 
   35510             : static const u16 RoofNode_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   35511             : static const u16 RoofNode_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   35512             : static const u16 RoofNode_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
   35513             : 
   35514             : static u32 RoofNode_get_field_count(GF_Node *node, u8 IndexMode)
   35515             : {
   35516           6 :         switch(IndexMode) {
   35517             :         case GF_SG_FIELD_CODING_IN:
   35518             :                 return 12;
   35519             :         case GF_SG_FIELD_CODING_DEF:
   35520             :                 return 12;
   35521             :         case GF_SG_FIELD_CODING_OUT:
   35522             :                 return 12;
   35523           1 :         case GF_SG_FIELD_CODING_DYN:
   35524             :                 return 0;
   35525             :         default:
   35526             :                 return 12;
   35527             :         }
   35528             : }
   35529             : 
   35530             : static GF_Err RoofNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35531             : {
   35532          12 :         switch(IndexMode) {
   35533           0 :         case GF_SG_FIELD_CODING_IN:
   35534           0 :                 *allField = RoofNode_In2All[inField];
   35535             :                 return GF_OK;
   35536           0 :         case GF_SG_FIELD_CODING_DEF:
   35537           0 :                 *allField = RoofNode_Def2All[inField];
   35538             :                 return GF_OK;
   35539           0 :         case GF_SG_FIELD_CODING_OUT:
   35540           0 :                 *allField = RoofNode_Out2All[inField];
   35541             :                 return GF_OK;
   35542             :         default:
   35543             :                 return GF_BAD_PARAM;
   35544             :         }
   35545             : }
   35546          24 : static GF_Err RoofNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35547             : {
   35548          24 :         switch (info->fieldIndex) {
   35549           2 :         case 0:
   35550           2 :                 info->name = "Type";
   35551           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35552           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35553           2 :                 info->far_ptr = & ((M_RoofNode *) node)->Type;
   35554           2 :                 return GF_OK;
   35555           2 :         case 1:
   35556           2 :                 info->name = "Height";
   35557           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35558           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35559           2 :                 info->far_ptr = & ((M_RoofNode *) node)->Height;
   35560           2 :                 return GF_OK;
   35561           2 :         case 2:
   35562           2 :                 info->name = "SlopeAngle";
   35563           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35564           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   35565           2 :                 info->far_ptr = & ((M_RoofNode *) node)->SlopeAngle;
   35566           2 :                 return GF_OK;
   35567           2 :         case 3:
   35568           2 :                 info->name = "EaveProjection";
   35569           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35570           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35571           2 :                 info->far_ptr = & ((M_RoofNode *) node)->EaveProjection;
   35572           2 :                 return GF_OK;
   35573           2 :         case 4:
   35574           2 :                 info->name = "EdgeSupportIndex";
   35575           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35576           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35577           2 :                 info->far_ptr = & ((M_RoofNode *) node)->EdgeSupportIndex;
   35578           2 :                 return GF_OK;
   35579           2 :         case 5:
   35580           2 :                 info->name = "RoofTextureURL";
   35581           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35582           2 :                 info->fieldType = GF_SG_VRML_SFURL;
   35583           2 :                 info->far_ptr = & ((M_RoofNode *) node)->RoofTextureURL;
   35584           2 :                 return GF_OK;
   35585           2 :         case 6:
   35586           2 :                 info->name = "IsGenericTexture";
   35587           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35588           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35589           2 :                 info->far_ptr = & ((M_RoofNode *) node)->IsGenericTexture;
   35590           2 :                 return GF_OK;
   35591           2 :         case 7:
   35592           2 :                 info->name = "TextureXScale";
   35593           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35594           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35595           2 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureXScale;
   35596           2 :                 return GF_OK;
   35597           2 :         case 8:
   35598           2 :                 info->name = "TextureYScale";
   35599           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35600           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35601           2 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureYScale;
   35602           2 :                 return GF_OK;
   35603           2 :         case 9:
   35604           2 :                 info->name = "TextureXPosition";
   35605           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35606           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35607           2 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureXPosition;
   35608           2 :                 return GF_OK;
   35609           2 :         case 10:
   35610           2 :                 info->name = "TextureYPosition";
   35611           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35612           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35613           2 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureYPosition;
   35614           2 :                 return GF_OK;
   35615           2 :         case 11:
   35616           2 :                 info->name = "TextureRotation";
   35617           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35618           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35619           2 :                 info->far_ptr = & ((M_RoofNode *) node)->TextureRotation;
   35620           2 :                 return GF_OK;
   35621             :         default:
   35622             :                 return GF_BAD_PARAM;
   35623             :         }
   35624             : }
   35625             : 
   35626             : 
   35627          12 : static s32 RoofNode_get_field_index_by_name(char *name)
   35628             : {
   35629          12 :         if (!strcmp("Type", name)) return 0;
   35630          11 :         if (!strcmp("Height", name)) return 1;
   35631          10 :         if (!strcmp("SlopeAngle", name)) return 2;
   35632           9 :         if (!strcmp("EaveProjection", name)) return 3;
   35633           8 :         if (!strcmp("EdgeSupportIndex", name)) return 4;
   35634           7 :         if (!strcmp("RoofTextureURL", name)) return 5;
   35635           6 :         if (!strcmp("IsGenericTexture", name)) return 6;
   35636           5 :         if (!strcmp("TextureXScale", name)) return 7;
   35637           4 :         if (!strcmp("TextureYScale", name)) return 8;
   35638           3 :         if (!strcmp("TextureXPosition", name)) return 9;
   35639           2 :         if (!strcmp("TextureYPosition", name)) return 10;
   35640           1 :         if (!strcmp("TextureRotation", name)) return 11;
   35641           0 :         return -1;
   35642             : }
   35643             : static Bool RoofNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35644             : {
   35645             :         switch (FieldIndex) {
   35646             :         default:
   35647             :                 return 0;
   35648             :         }
   35649             : }
   35650             : 
   35651             : 
   35652             : 
   35653           1 : GF_Node *RoofNode_Create()
   35654             : {
   35655             :         M_RoofNode *p;
   35656           1 :         GF_SAFEALLOC(p, M_RoofNode);
   35657           1 :         if(!p) return NULL;
   35658           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_RoofNode);
   35659             : 
   35660             :         /*default field values*/
   35661           1 :         p->Type = 0;
   35662           1 :         p->Height = FLT2FIX(0.0);
   35663           1 :         p->SlopeAngle.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   35664           1 :         p->SlopeAngle.count = 1;
   35665           1 :         p->SlopeAngle.vals[0] = FLT2FIX(0.0);
   35666           1 :         p->EaveProjection = FLT2FIX(0.0);
   35667           1 :         p->EdgeSupportIndex = -1;
   35668           1 :         p->IsGenericTexture = 1;
   35669           1 :         p->TextureXScale = FLT2FIX(1.0);
   35670           1 :         p->TextureYScale = FLT2FIX(1.0);
   35671           1 :         p->TextureXPosition = FLT2FIX(0.0);
   35672           1 :         p->TextureYPosition = FLT2FIX(0.0);
   35673           1 :         p->TextureRotation = FLT2FIX(0.0);
   35674           1 :         return (GF_Node *)p;
   35675             : }
   35676             : 
   35677             : 
   35678             : /*
   35679             :         FacadeNode Node deletion
   35680             : */
   35681             : 
   35682           1 : static void FacadeNode_Del(GF_Node *node)
   35683             : {
   35684             :         M_FacadeNode *p = (M_FacadeNode *) node;
   35685           1 :         gf_sg_sfurl_del(p->FacadePrimitive);
   35686           1 :         gf_sg_mfint32_del(p->NbFacadeCellsByStorey);
   35687           1 :         gf_sg_mffloat_del(p->StoreyHeight);
   35688           1 :         gf_node_unregister_children((GF_Node *) p, p->FacadeCellsArray);
   35689           1 :         gf_node_free((GF_Node *) p);
   35690           1 : }
   35691             : 
   35692             : static const u16 FacadeNode_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   35693             : static const u16 FacadeNode_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   35694             : static const u16 FacadeNode_Out2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
   35695             : 
   35696             : static u32 FacadeNode_get_field_count(GF_Node *node, u8 IndexMode)
   35697             : {
   35698           6 :         switch(IndexMode) {
   35699             :         case GF_SG_FIELD_CODING_IN:
   35700             :                 return 13;
   35701             :         case GF_SG_FIELD_CODING_DEF:
   35702             :                 return 13;
   35703             :         case GF_SG_FIELD_CODING_OUT:
   35704             :                 return 13;
   35705           1 :         case GF_SG_FIELD_CODING_DYN:
   35706             :                 return 0;
   35707             :         default:
   35708             :                 return 13;
   35709             :         }
   35710             : }
   35711             : 
   35712             : static GF_Err FacadeNode_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35713             : {
   35714          13 :         switch(IndexMode) {
   35715           0 :         case GF_SG_FIELD_CODING_IN:
   35716           0 :                 *allField = FacadeNode_In2All[inField];
   35717             :                 return GF_OK;
   35718           0 :         case GF_SG_FIELD_CODING_DEF:
   35719           0 :                 *allField = FacadeNode_Def2All[inField];
   35720             :                 return GF_OK;
   35721           0 :         case GF_SG_FIELD_CODING_OUT:
   35722           0 :                 *allField = FacadeNode_Out2All[inField];
   35723             :                 return GF_OK;
   35724             :         default:
   35725             :                 return GF_BAD_PARAM;
   35726             :         }
   35727             : }
   35728          26 : static GF_Err FacadeNode_get_field(GF_Node *node, GF_FieldInfo *info)
   35729             : {
   35730          26 :         switch (info->fieldIndex) {
   35731           2 :         case 0:
   35732           2 :                 info->name = "WidthRatio";
   35733           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35734           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35735           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->WidthRatio;
   35736           2 :                 return GF_OK;
   35737           2 :         case 1:
   35738           2 :                 info->name = "XScale";
   35739           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35740           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35741           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->XScale;
   35742           2 :                 return GF_OK;
   35743           2 :         case 2:
   35744           2 :                 info->name = "YScale";
   35745           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35746           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35747           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->YScale;
   35748           2 :                 return GF_OK;
   35749           2 :         case 3:
   35750           2 :                 info->name = "XPosition";
   35751           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35752           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35753           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->XPosition;
   35754           2 :                 return GF_OK;
   35755           2 :         case 4:
   35756           2 :                 info->name = "YPosition";
   35757           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35758           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35759           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->YPosition;
   35760           2 :                 return GF_OK;
   35761           2 :         case 5:
   35762           2 :                 info->name = "XRepeatInterval";
   35763           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35764           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35765           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->XRepeatInterval;
   35766           2 :                 return GF_OK;
   35767           2 :         case 6:
   35768           2 :                 info->name = "YRepeatInterval";
   35769           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35770           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35771           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->YRepeatInterval;
   35772           2 :                 return GF_OK;
   35773           2 :         case 7:
   35774           2 :                 info->name = "Repeat";
   35775           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35776           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35777           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->Repeat;
   35778           2 :                 return GF_OK;
   35779           2 :         case 8:
   35780           2 :                 info->name = "FacadePrimitive";
   35781           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35782           2 :                 info->fieldType = GF_SG_VRML_SFURL;
   35783           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->FacadePrimitive;
   35784           2 :                 return GF_OK;
   35785           2 :         case 9:
   35786           2 :                 info->name = "NbStories";
   35787           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35788           2 :                 info->fieldType = GF_SG_VRML_SFINT32;
   35789           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->NbStories;
   35790           2 :                 return GF_OK;
   35791           2 :         case 10:
   35792           2 :                 info->name = "NbFacadeCellsByStorey";
   35793           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35794           2 :                 info->fieldType = GF_SG_VRML_MFINT32;
   35795           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->NbFacadeCellsByStorey;
   35796           2 :                 return GF_OK;
   35797           2 :         case 11:
   35798           2 :                 info->name = "StoreyHeight";
   35799           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35800           2 :                 info->fieldType = GF_SG_VRML_MFFLOAT;
   35801           2 :                 info->far_ptr = & ((M_FacadeNode *) node)->StoreyHeight;
   35802           2 :                 return GF_OK;
   35803           2 :         case 12:
   35804           2 :                 info->name = "FacadeCellsArray";
   35805           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35806           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35807           2 :                 info->NDTtype = NDT_SFGeometryNode;
   35808           2 :                 info->far_ptr = & ((M_FacadeNode *)node)->FacadeCellsArray;
   35809           2 :                 return GF_OK;
   35810             :         default:
   35811             :                 return GF_BAD_PARAM;
   35812             :         }
   35813             : }
   35814             : 
   35815             : 
   35816          13 : static s32 FacadeNode_get_field_index_by_name(char *name)
   35817             : {
   35818          13 :         if (!strcmp("WidthRatio", name)) return 0;
   35819          12 :         if (!strcmp("XScale", name)) return 1;
   35820          11 :         if (!strcmp("YScale", name)) return 2;
   35821          10 :         if (!strcmp("XPosition", name)) return 3;
   35822           9 :         if (!strcmp("YPosition", name)) return 4;
   35823           8 :         if (!strcmp("XRepeatInterval", name)) return 5;
   35824           7 :         if (!strcmp("YRepeatInterval", name)) return 6;
   35825           6 :         if (!strcmp("Repeat", name)) return 7;
   35826           5 :         if (!strcmp("FacadePrimitive", name)) return 8;
   35827           4 :         if (!strcmp("NbStories", name)) return 9;
   35828           3 :         if (!strcmp("NbFacadeCellsByStorey", name)) return 10;
   35829           2 :         if (!strcmp("StoreyHeight", name)) return 11;
   35830           1 :         if (!strcmp("FacadeCellsArray", name)) return 12;
   35831           0 :         return -1;
   35832             : }
   35833             : static Bool FacadeNode_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35834             : {
   35835             :         switch (FieldIndex) {
   35836             :         default:
   35837             :                 return 0;
   35838             :         }
   35839             : }
   35840             : 
   35841             : 
   35842             : 
   35843           1 : GF_Node *FacadeNode_Create()
   35844             : {
   35845             :         M_FacadeNode *p;
   35846           1 :         GF_SAFEALLOC(p, M_FacadeNode);
   35847           1 :         if(!p) return NULL;
   35848           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_FacadeNode);
   35849             : 
   35850             :         /*default field values*/
   35851           1 :         p->WidthRatio = FLT2FIX(1.0);
   35852           1 :         p->XScale = FLT2FIX(1.0);
   35853           1 :         p->YScale = FLT2FIX(1.0);
   35854           1 :         p->XPosition = FLT2FIX(0.0);
   35855           1 :         p->YPosition = FLT2FIX(0.0);
   35856           1 :         p->XRepeatInterval = FLT2FIX(0.0);
   35857           1 :         p->YRepeatInterval = FLT2FIX(0.0);
   35858           1 :         p->NbStories = 0;
   35859           1 :         p->NbFacadeCellsByStorey.vals = (SFInt32*)gf_malloc(sizeof(SFInt32)*1);
   35860           1 :         p->NbFacadeCellsByStorey.count = 1;
   35861           1 :         p->NbFacadeCellsByStorey.vals[0] = 0;
   35862           1 :         p->StoreyHeight.vals = (SFFloat*)gf_malloc(sizeof(SFFloat)*1);
   35863           1 :         p->StoreyHeight.count = 1;
   35864           1 :         p->StoreyHeight.vals[0] = FLT2FIX(1.0);
   35865           1 :         return (GF_Node *)p;
   35866             : }
   35867             : 
   35868             : 
   35869             : /*
   35870             :         Shadow Node deletion
   35871             : */
   35872             : 
   35873             : static void Shadow_Del(GF_Node *node)
   35874             : {
   35875             :         M_Shadow *p = (M_Shadow *) node;
   35876          23 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   35877          23 :         gf_node_free((GF_Node *) p);
   35878             : }
   35879             : 
   35880             : static const u16 Shadow_Def2All[] = { 2, 3, 4, 5, 6};
   35881             : static const u16 Shadow_In2All[] = { 0, 1, 2, 3, 4, 5, 6};
   35882             : static const u16 Shadow_Out2All[] = { 2, 3, 4, 5, 6};
   35883             : 
   35884             : static u32 Shadow_get_field_count(GF_Node *node, u8 IndexMode)
   35885             : {
   35886             :         switch(IndexMode) {
   35887             :         case GF_SG_FIELD_CODING_IN:
   35888             :                 return 7;
   35889             :         case GF_SG_FIELD_CODING_DEF:
   35890             :                 return 5;
   35891             :         case GF_SG_FIELD_CODING_OUT:
   35892             :                 return 5;
   35893             :         case GF_SG_FIELD_CODING_DYN:
   35894             :                 return 0;
   35895             :         default:
   35896             :                 return 7;
   35897             :         }
   35898             : }
   35899             : 
   35900             : static GF_Err Shadow_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   35901             : {
   35902          42 :         switch(IndexMode) {
   35903           0 :         case GF_SG_FIELD_CODING_IN:
   35904           0 :                 *allField = Shadow_In2All[inField];
   35905             :                 return GF_OK;
   35906          35 :         case GF_SG_FIELD_CODING_DEF:
   35907          35 :                 *allField = Shadow_Def2All[inField];
   35908             :                 return GF_OK;
   35909           0 :         case GF_SG_FIELD_CODING_OUT:
   35910           0 :                 *allField = Shadow_Out2All[inField];
   35911             :                 return GF_OK;
   35912             :         default:
   35913             :                 return GF_BAD_PARAM;
   35914             :         }
   35915             : }
   35916         132 : static GF_Err Shadow_get_field(GF_Node *node, GF_FieldInfo *info)
   35917             : {
   35918         132 :         switch (info->fieldIndex) {
   35919           7 :         case 0:
   35920           7 :                 info->name = "addChildren";
   35921           7 :                 info->eventType = GF_SG_EVENT_IN;
   35922           7 :                 info->on_event_in = ((M_Shadow *)node)->on_addChildren;
   35923           7 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35924           7 :                 info->NDTtype = NDT_SF3DNode;
   35925           7 :                 info->far_ptr = & ((M_Shadow *)node)->addChildren;
   35926           7 :                 return GF_OK;
   35927           7 :         case 1:
   35928           7 :                 info->name = "removeChildren";
   35929           7 :                 info->eventType = GF_SG_EVENT_IN;
   35930           7 :                 info->on_event_in = ((M_Shadow *)node)->on_removeChildren;
   35931           7 :                 info->fieldType = GF_SG_VRML_SFNODE;
   35932           7 :                 info->NDTtype = NDT_SF3DNode;
   35933           7 :                 info->far_ptr = & ((M_Shadow *)node)->removeChildren;
   35934           7 :                 return GF_OK;
   35935          14 :         case 2:
   35936          14 :                 info->name = "children";
   35937          14 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35938          14 :                 info->fieldType = GF_SG_VRML_MFNODE;
   35939          14 :                 info->NDTtype = NDT_SF3DNode;
   35940          14 :                 info->far_ptr = & ((M_Shadow *)node)->children;
   35941          14 :                 return GF_OK;
   35942          26 :         case 3:
   35943          26 :                 info->name = "enabled";
   35944          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35945          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35946          26 :                 info->far_ptr = & ((M_Shadow *) node)->enabled;
   35947          26 :                 return GF_OK;
   35948          26 :         case 4:
   35949          26 :                 info->name = "cast";
   35950          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35951          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35952          26 :                 info->far_ptr = & ((M_Shadow *) node)->cast;
   35953          26 :                 return GF_OK;
   35954          26 :         case 5:
   35955          26 :                 info->name = "receive";
   35956          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35957          26 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   35958          26 :                 info->far_ptr = & ((M_Shadow *) node)->receive;
   35959          26 :                 return GF_OK;
   35960          26 :         case 6:
   35961          26 :                 info->name = "penumbra";
   35962          26 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   35963          26 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   35964          26 :                 info->far_ptr = & ((M_Shadow *) node)->penumbra;
   35965          26 :                 return GF_OK;
   35966             :         default:
   35967             :                 return GF_BAD_PARAM;
   35968             :         }
   35969             : }
   35970             : 
   35971             : 
   35972           7 : static s32 Shadow_get_field_index_by_name(char *name)
   35973             : {
   35974           7 :         if (!strcmp("addChildren", name)) return 0;
   35975           6 :         if (!strcmp("removeChildren", name)) return 1;
   35976           5 :         if (!strcmp("children", name)) return 2;
   35977           4 :         if (!strcmp("enabled", name)) return 3;
   35978           3 :         if (!strcmp("cast", name)) return 4;
   35979           2 :         if (!strcmp("receive", name)) return 5;
   35980           1 :         if (!strcmp("penumbra", name)) return 6;
   35981           0 :         return -1;
   35982             : }
   35983             : static Bool Shadow_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   35984             : {
   35985             :         switch (FieldIndex) {
   35986             :         default:
   35987             :                 return 0;
   35988             :         }
   35989             : }
   35990             : 
   35991             : 
   35992             : 
   35993          23 : GF_Node *Shadow_Create()
   35994             : {
   35995             :         M_Shadow *p;
   35996          23 :         GF_SAFEALLOC(p, M_Shadow);
   35997          23 :         if(!p) return NULL;
   35998          23 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Shadow);
   35999          23 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   36000             : 
   36001             :         /*default field values*/
   36002          23 :         p->enabled = 1;
   36003          23 :         p->cast = 1;
   36004          23 :         p->receive = 1;
   36005          23 :         p->penumbra = FLT2FIX(0);
   36006          23 :         return (GF_Node *)p;
   36007             : }
   36008             : 
   36009             : 
   36010             : /*
   36011             :         CacheTexture Node deletion
   36012             : */
   36013             : 
   36014          64 : static void CacheTexture_Del(GF_Node *node)
   36015             : {
   36016             :         M_CacheTexture *p = (M_CacheTexture *) node;
   36017          64 :         gf_sg_sfstring_del(p->decoderSpecificInfo);
   36018          64 :         gf_sg_sfstring_del(p->image);
   36019          64 :         gf_sg_sfstring_del(p->cacheURL);
   36020          64 :         gf_sg_mfurl_del(p->cacheOD);
   36021          64 :         if (p->data) gf_free(p->data);
   36022          64 :         gf_node_free((GF_Node *) p);
   36023          64 : }
   36024             : 
   36025             : static const u16 CacheTexture_Def2All[] = { 0, 1, 2, 3, 4, 5, 6, 7};
   36026             : 
   36027             : static u32 CacheTexture_get_field_count(GF_Node *node, u8 IndexMode)
   36028             : {
   36029          68 :         switch(IndexMode) {
   36030             :         case GF_SG_FIELD_CODING_IN:
   36031             :                 return 0;
   36032          48 :         case GF_SG_FIELD_CODING_DEF:
   36033             :                 return 8;
   36034             :         case GF_SG_FIELD_CODING_OUT:
   36035             :                 return 0;
   36036             :         case GF_SG_FIELD_CODING_DYN:
   36037             :                 return 0;
   36038          17 :         default:
   36039             :                 return 8;
   36040             :         }
   36041             : }
   36042             : 
   36043             : static GF_Err CacheTexture_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36044             : {
   36045         181 :         switch(IndexMode) {
   36046         173 :         case GF_SG_FIELD_CODING_DEF:
   36047         173 :                 *allField = CacheTexture_Def2All[inField];
   36048             :                 return GF_OK;
   36049             :         default:
   36050             :                 return GF_BAD_PARAM;
   36051             :         }
   36052             : }
   36053         683 : static GF_Err CacheTexture_get_field(GF_Node *node, GF_FieldInfo *info)
   36054             : {
   36055         683 :         switch (info->fieldIndex) {
   36056         121 :         case 0:
   36057         121 :                 info->name = "objectTypeIndication";
   36058         121 :                 info->eventType = GF_SG_EVENT_FIELD;
   36059         121 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36060         121 :                 info->far_ptr = & ((M_CacheTexture *) node)->objectTypeIndication;
   36061         121 :                 return GF_OK;
   36062          64 :         case 1:
   36063          64 :                 info->name = "decoderSpecificInfo";
   36064          64 :                 info->eventType = GF_SG_EVENT_FIELD;
   36065          64 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36066          64 :                 info->far_ptr = & ((M_CacheTexture *) node)->decoderSpecificInfo;
   36067          64 :                 return GF_OK;
   36068          66 :         case 2:
   36069          66 :                 info->name = "image";
   36070          66 :                 info->eventType = GF_SG_EVENT_FIELD;
   36071          66 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36072          66 :                 info->far_ptr = & ((M_CacheTexture *) node)->image;
   36073          66 :                 return GF_OK;
   36074         120 :         case 3:
   36075         120 :                 info->name = "cacheURL";
   36076         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   36077         120 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36078         120 :                 info->far_ptr = & ((M_CacheTexture *) node)->cacheURL;
   36079         120 :                 return GF_OK;
   36080          64 :         case 4:
   36081          64 :                 info->name = "cacheOD";
   36082          64 :                 info->eventType = GF_SG_EVENT_FIELD;
   36083          64 :                 info->fieldType = GF_SG_VRML_MFURL;
   36084          64 :                 info->far_ptr = & ((M_CacheTexture *) node)->cacheOD;
   36085          64 :                 return GF_OK;
   36086         120 :         case 5:
   36087         120 :                 info->name = "expirationDate";
   36088         120 :                 info->eventType = GF_SG_EVENT_FIELD;
   36089         120 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36090         120 :                 info->far_ptr = & ((M_CacheTexture *) node)->expirationDate;
   36091         120 :                 return GF_OK;
   36092          64 :         case 6:
   36093          64 :                 info->name = "repeatS";
   36094          64 :                 info->eventType = GF_SG_EVENT_FIELD;
   36095          64 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36096          64 :                 info->far_ptr = & ((M_CacheTexture *) node)->repeatS;
   36097          64 :                 return GF_OK;
   36098          64 :         case 7:
   36099          64 :                 info->name = "repeatT";
   36100          64 :                 info->eventType = GF_SG_EVENT_FIELD;
   36101          64 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36102          64 :                 info->far_ptr = & ((M_CacheTexture *) node)->repeatT;
   36103          64 :                 return GF_OK;
   36104             :         default:
   36105             :                 return GF_BAD_PARAM;
   36106             :         }
   36107             : }
   36108             : 
   36109             : 
   36110          59 : static s32 CacheTexture_get_field_index_by_name(char *name)
   36111             : {
   36112          59 :         if (!strcmp("objectTypeIndication", name)) return 0;
   36113          41 :         if (!strcmp("decoderSpecificInfo", name)) return 1;
   36114          40 :         if (!strcmp("image", name)) return 2;
   36115          37 :         if (!strcmp("cacheURL", name)) return 3;
   36116          20 :         if (!strcmp("cacheOD", name)) return 4;
   36117          19 :         if (!strcmp("expirationDate", name)) return 5;
   36118           2 :         if (!strcmp("repeatS", name)) return 6;
   36119           1 :         if (!strcmp("repeatT", name)) return 7;
   36120           0 :         return -1;
   36121             : }
   36122             : static Bool CacheTexture_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36123             : {
   36124             :         switch (FieldIndex) {
   36125             :         default:
   36126             :                 return 0;
   36127             :         }
   36128             : }
   36129             : 
   36130             : 
   36131             : 
   36132          64 : GF_Node *CacheTexture_Create()
   36133             : {
   36134             :         M_CacheTexture *p;
   36135          64 :         GF_SAFEALLOC(p, M_CacheTexture);
   36136          64 :         if(!p) return NULL;
   36137          64 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_CacheTexture);
   36138             : 
   36139             :         /*default field values*/
   36140          64 :         p->objectTypeIndication = 0;
   36141          64 :         p->expirationDate = 0;
   36142          64 :         p->repeatS = 1;
   36143          64 :         p->repeatT = 1;
   36144          64 :         return (GF_Node *)p;
   36145             : }
   36146             : 
   36147             : 
   36148             : /*
   36149             :         EnvironmentTest Node deletion
   36150             : */
   36151             : 
   36152          91 : static void EnvironmentTest_Del(GF_Node *node)
   36153             : {
   36154             :         M_EnvironmentTest *p = (M_EnvironmentTest *) node;
   36155          91 :         gf_sg_sfstring_del(p->compareValue);
   36156          91 :         gf_sg_sfstring_del(p->parameterValue);
   36157          91 :         gf_node_free((GF_Node *) p);
   36158          91 : }
   36159             : 
   36160             : static const u16 EnvironmentTest_Def2All[] = { 1, 2, 3, 4};
   36161             : static const u16 EnvironmentTest_In2All[] = { 0, 1, 2, 3, 4};
   36162             : static const u16 EnvironmentTest_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8};
   36163             : 
   36164             : static u32 EnvironmentTest_get_field_count(GF_Node *node, u8 IndexMode)
   36165             : {
   36166             :         switch(IndexMode) {
   36167             :         case GF_SG_FIELD_CODING_IN:
   36168             :                 return 5;
   36169             :         case GF_SG_FIELD_CODING_DEF:
   36170             :                 return 4;
   36171             :         case GF_SG_FIELD_CODING_OUT:
   36172             :                 return 8;
   36173             :         case GF_SG_FIELD_CODING_DYN:
   36174             :                 return 0;
   36175             :         default:
   36176             :                 return 9;
   36177             :         }
   36178             : }
   36179             : 
   36180             : static GF_Err EnvironmentTest_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36181             : {
   36182         104 :         switch(IndexMode) {
   36183           0 :         case GF_SG_FIELD_CODING_IN:
   36184           0 :                 *allField = EnvironmentTest_In2All[inField];
   36185             :                 return GF_OK;
   36186          95 :         case GF_SG_FIELD_CODING_DEF:
   36187          95 :                 *allField = EnvironmentTest_Def2All[inField];
   36188             :                 return GF_OK;
   36189           0 :         case GF_SG_FIELD_CODING_OUT:
   36190           0 :                 *allField = EnvironmentTest_Out2All[inField];
   36191             :                 return GF_OK;
   36192             :         default:
   36193             :                 return GF_BAD_PARAM;
   36194             :         }
   36195             : }
   36196         597 : static GF_Err EnvironmentTest_get_field(GF_Node *node, GF_FieldInfo *info)
   36197             : {
   36198         597 :         switch (info->fieldIndex) {
   36199          29 :         case 0:
   36200          29 :                 info->name = "evaluate";
   36201          29 :                 info->eventType = GF_SG_EVENT_IN;
   36202          29 :                 info->on_event_in = ((M_EnvironmentTest *)node)->on_evaluate;
   36203          29 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36204          29 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->evaluate;
   36205          29 :                 return GF_OK;
   36206          96 :         case 1:
   36207          96 :                 info->name = "enabled";
   36208          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36209          96 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36210          96 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->enabled;
   36211          96 :                 return GF_OK;
   36212         158 :         case 2:
   36213         158 :                 info->name = "parameter";
   36214         158 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36215         158 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36216         158 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->parameter;
   36217         158 :                 return GF_OK;
   36218          96 :         case 3:
   36219          96 :                 info->name = "compareValue";
   36220          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36221          96 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36222          96 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->compareValue;
   36223          96 :                 return GF_OK;
   36224          96 :         case 4:
   36225          96 :                 info->name = "evaluateOnChange";
   36226          96 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36227          96 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36228          96 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->evaluateOnChange;
   36229          96 :                 return GF_OK;
   36230          29 :         case 5:
   36231          29 :                 info->name = "valueLarger";
   36232          29 :                 info->eventType = GF_SG_EVENT_OUT;
   36233          29 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36234          29 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->valueLarger;
   36235          29 :                 return GF_OK;
   36236          31 :         case 6:
   36237          31 :                 info->name = "valueEqual";
   36238          31 :                 info->eventType = GF_SG_EVENT_OUT;
   36239          31 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36240          31 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->valueEqual;
   36241          31 :                 return GF_OK;
   36242          29 :         case 7:
   36243          29 :                 info->name = "valueSmaller";
   36244          29 :                 info->eventType = GF_SG_EVENT_OUT;
   36245          29 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36246          29 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->valueSmaller;
   36247          29 :                 return GF_OK;
   36248          33 :         case 8:
   36249          33 :                 info->name = "parameterValue";
   36250          33 :                 info->eventType = GF_SG_EVENT_OUT;
   36251          33 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36252          33 :                 info->far_ptr = & ((M_EnvironmentTest *) node)->parameterValue;
   36253          33 :                 return GF_OK;
   36254             :         default:
   36255             :                 return GF_BAD_PARAM;
   36256             :         }
   36257             : }
   36258             : 
   36259             : 
   36260          30 : static s32 EnvironmentTest_get_field_index_by_name(char *name)
   36261             : {
   36262          30 :         if (!strcmp("evaluate", name)) return 0;
   36263          29 :         if (!strcmp("enabled", name)) return 1;
   36264          28 :         if (!strcmp("parameter", name)) return 2;
   36265           9 :         if (!strcmp("compareValue", name)) return 3;
   36266           8 :         if (!strcmp("evaluateOnChange", name)) return 4;
   36267           7 :         if (!strcmp("valueLarger", name)) return 5;
   36268           6 :         if (!strcmp("valueEqual", name)) return 6;
   36269           4 :         if (!strcmp("valueSmaller", name)) return 7;
   36270           3 :         if (!strcmp("parameterValue", name)) return 8;
   36271           0 :         return -1;
   36272             : }
   36273             : static Bool EnvironmentTest_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36274             : {
   36275             :         switch (FieldIndex) {
   36276             :         default:
   36277             :                 return 0;
   36278             :         }
   36279             : }
   36280             : 
   36281             : 
   36282             : 
   36283          91 : GF_Node *EnvironmentTest_Create()
   36284             : {
   36285             :         M_EnvironmentTest *p;
   36286          91 :         GF_SAFEALLOC(p, M_EnvironmentTest);
   36287          91 :         if(!p) return NULL;
   36288          91 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_EnvironmentTest);
   36289             : 
   36290             :         /*default field values*/
   36291          91 :         p->enabled = 1;
   36292          91 :         p->parameter = 0;
   36293          91 :         p->evaluateOnChange = 1;
   36294          91 :         return (GF_Node *)p;
   36295             : }
   36296             : 
   36297             : 
   36298             : /*
   36299             :         KeyNavigator Node deletion
   36300             : */
   36301             : 
   36302           5 : static void KeyNavigator_Del(GF_Node *node)
   36303             : {
   36304             :         M_KeyNavigator *p = (M_KeyNavigator *) node;
   36305           5 :         gf_node_unregister((GF_Node *) p->sensor, (GF_Node *) p);
   36306           5 :         gf_node_unregister((GF_Node *) p->left, (GF_Node *) p);
   36307           5 :         gf_node_unregister((GF_Node *) p->right, (GF_Node *) p);
   36308           5 :         gf_node_unregister((GF_Node *) p->up, (GF_Node *) p);
   36309           5 :         gf_node_unregister((GF_Node *) p->down, (GF_Node *) p);
   36310           5 :         gf_node_unregister((GF_Node *) p->select, (GF_Node *) p);
   36311           5 :         gf_node_unregister((GF_Node *) p->quit, (GF_Node *) p);
   36312           5 :         gf_node_free((GF_Node *) p);
   36313           5 : }
   36314             : 
   36315             : static const u16 KeyNavigator_Def2All[] = { 1, 2, 3, 4, 5, 6, 7, 8};
   36316             : static const u16 KeyNavigator_In2All[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8};
   36317             : static const u16 KeyNavigator_Out2All[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
   36318             : 
   36319             : static u32 KeyNavigator_get_field_count(GF_Node *node, u8 IndexMode)
   36320             : {
   36321             :         switch(IndexMode) {
   36322             :         case GF_SG_FIELD_CODING_IN:
   36323             :                 return 9;
   36324             :         case GF_SG_FIELD_CODING_DEF:
   36325             :                 return 8;
   36326             :         case GF_SG_FIELD_CODING_OUT:
   36327             :                 return 9;
   36328             :         case GF_SG_FIELD_CODING_DYN:
   36329             :                 return 0;
   36330             :         default:
   36331             :                 return 10;
   36332             :         }
   36333             : }
   36334             : 
   36335             : static GF_Err KeyNavigator_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36336             : {
   36337          10 :         switch(IndexMode) {
   36338           0 :         case GF_SG_FIELD_CODING_IN:
   36339           0 :                 *allField = KeyNavigator_In2All[inField];
   36340             :                 return GF_OK;
   36341           0 :         case GF_SG_FIELD_CODING_DEF:
   36342           0 :                 *allField = KeyNavigator_Def2All[inField];
   36343             :                 return GF_OK;
   36344           0 :         case GF_SG_FIELD_CODING_OUT:
   36345           0 :                 *allField = KeyNavigator_Out2All[inField];
   36346             :                 return GF_OK;
   36347             :         default:
   36348             :                 return GF_BAD_PARAM;
   36349             :         }
   36350             : }
   36351         101 : static GF_Err KeyNavigator_get_field(GF_Node *node, GF_FieldInfo *info)
   36352             : {
   36353         101 :         switch (info->fieldIndex) {
   36354          16 :         case 0:
   36355          16 :                 info->name = "setFocus";
   36356          16 :                 info->eventType = GF_SG_EVENT_IN;
   36357          16 :                 info->on_event_in = ((M_KeyNavigator *)node)->on_setFocus;
   36358          16 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36359          16 :                 info->far_ptr = & ((M_KeyNavigator *) node)->setFocus;
   36360          16 :                 return GF_OK;
   36361          19 :         case 1:
   36362          19 :                 info->name = "sensor";
   36363          19 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36364          19 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36365          19 :                 info->NDTtype = NDT_SF3DNode;
   36366          19 :                 info->far_ptr = & ((M_KeyNavigator *)node)->sensor;
   36367          19 :                 return GF_OK;
   36368          13 :         case 2:
   36369          13 :                 info->name = "left";
   36370          13 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36371          13 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36372          13 :                 info->NDTtype = NDT_SF2DNode;
   36373          13 :                 info->far_ptr = & ((M_KeyNavigator *)node)->left;
   36374          13 :                 return GF_OK;
   36375          11 :         case 3:
   36376          11 :                 info->name = "right";
   36377          11 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36378          11 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36379          11 :                 info->NDTtype = NDT_SF2DNode;
   36380          11 :                 info->far_ptr = & ((M_KeyNavigator *)node)->right;
   36381          11 :                 return GF_OK;
   36382           9 :         case 4:
   36383           9 :                 info->name = "up";
   36384           9 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36385           9 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36386           9 :                 info->NDTtype = NDT_SF2DNode;
   36387           9 :                 info->far_ptr = & ((M_KeyNavigator *)node)->up;
   36388           9 :                 return GF_OK;
   36389           7 :         case 5:
   36390           7 :                 info->name = "down";
   36391           7 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36392           7 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36393           7 :                 info->NDTtype = NDT_SF2DNode;
   36394           7 :                 info->far_ptr = & ((M_KeyNavigator *)node)->down;
   36395           7 :                 return GF_OK;
   36396           4 :         case 6:
   36397           4 :                 info->name = "select";
   36398           4 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36399           4 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36400           4 :                 info->NDTtype = NDT_SF2DNode;
   36401           4 :                 info->far_ptr = & ((M_KeyNavigator *)node)->select;
   36402           4 :                 return GF_OK;
   36403           2 :         case 7:
   36404           2 :                 info->name = "quit";
   36405           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36406           2 :                 info->fieldType = GF_SG_VRML_SFNODE;
   36407           2 :                 info->NDTtype = NDT_SF2DNode;
   36408           2 :                 info->far_ptr = & ((M_KeyNavigator *)node)->quit;
   36409           2 :                 return GF_OK;
   36410           2 :         case 8:
   36411           2 :                 info->name = "step";
   36412           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36413           2 :                 info->fieldType = GF_SG_VRML_SFFLOAT;
   36414           2 :                 info->far_ptr = & ((M_KeyNavigator *) node)->step;
   36415           2 :                 return GF_OK;
   36416          18 :         case 9:
   36417          18 :                 info->name = "focusSet";
   36418          18 :                 info->eventType = GF_SG_EVENT_OUT;
   36419          18 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36420          18 :                 info->far_ptr = & ((M_KeyNavigator *) node)->focusSet;
   36421          18 :                 return GF_OK;
   36422             :         default:
   36423             :                 return GF_BAD_PARAM;
   36424             :         }
   36425             : }
   36426             : 
   36427             : 
   36428          32 : static s32 KeyNavigator_get_field_index_by_name(char *name)
   36429             : {
   36430          32 :         if (!strcmp("setFocus", name)) return 0;
   36431          30 :         if (!strcmp("sensor", name)) return 1;
   36432          25 :         if (!strcmp("left", name)) return 2;
   36433          22 :         if (!strcmp("right", name)) return 3;
   36434          19 :         if (!strcmp("up", name)) return 4;
   36435          16 :         if (!strcmp("down", name)) return 5;
   36436          13 :         if (!strcmp("select", name)) return 6;
   36437          11 :         if (!strcmp("quit", name)) return 7;
   36438          10 :         if (!strcmp("step", name)) return 8;
   36439           9 :         if (!strcmp("focusSet", name)) return 9;
   36440           0 :         return -1;
   36441             : }
   36442             : static Bool KeyNavigator_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36443             : {
   36444             :         switch (FieldIndex) {
   36445             :         default:
   36446             :                 return 0;
   36447             :         }
   36448             : }
   36449             : 
   36450             : 
   36451             : 
   36452           5 : GF_Node *KeyNavigator_Create()
   36453             : {
   36454             :         M_KeyNavigator *p;
   36455           5 :         GF_SAFEALLOC(p, M_KeyNavigator);
   36456           5 :         if(!p) return NULL;
   36457           5 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_KeyNavigator);
   36458             : 
   36459             :         /*default field values*/
   36460           5 :         p->step = FLT2FIX(0);
   36461           5 :         return (GF_Node *)p;
   36462             : }
   36463             : 
   36464             : 
   36465             : /*
   36466             :         SpacePartition Node deletion
   36467             : */
   36468             : 
   36469           1 : static void SpacePartition_Del(GF_Node *node)
   36470             : {
   36471             :         M_SpacePartition *p = (M_SpacePartition *) node;
   36472           1 :         gf_sg_sfurl_del(p->SPStream);
   36473           1 :         gf_sg_vrml_parent_destroy((GF_Node *) p);
   36474           1 :         gf_node_free((GF_Node *) p);
   36475           1 : }
   36476             : 
   36477             : static const u16 SpacePartition_Def2All[] = { 2, 3};
   36478             : static const u16 SpacePartition_In2All[] = { 0, 1, 2, 3};
   36479             : static const u16 SpacePartition_Out2All[] = { 2, 3};
   36480             : 
   36481             : static u32 SpacePartition_get_field_count(GF_Node *node, u8 IndexMode)
   36482             : {
   36483             :         switch(IndexMode) {
   36484             :         case GF_SG_FIELD_CODING_IN:
   36485             :                 return 4;
   36486             :         case GF_SG_FIELD_CODING_DEF:
   36487             :                 return 2;
   36488             :         case GF_SG_FIELD_CODING_OUT:
   36489             :                 return 2;
   36490             :         case GF_SG_FIELD_CODING_DYN:
   36491             :                 return 0;
   36492             :         default:
   36493             :                 return 4;
   36494             :         }
   36495             : }
   36496             : 
   36497             : static GF_Err SpacePartition_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36498             : {
   36499           4 :         switch(IndexMode) {
   36500           0 :         case GF_SG_FIELD_CODING_IN:
   36501           0 :                 *allField = SpacePartition_In2All[inField];
   36502             :                 return GF_OK;
   36503           0 :         case GF_SG_FIELD_CODING_DEF:
   36504           0 :                 *allField = SpacePartition_Def2All[inField];
   36505             :                 return GF_OK;
   36506           0 :         case GF_SG_FIELD_CODING_OUT:
   36507           0 :                 *allField = SpacePartition_Out2All[inField];
   36508             :                 return GF_OK;
   36509             :         default:
   36510             :                 return GF_BAD_PARAM;
   36511             :         }
   36512             : }
   36513           8 : static GF_Err SpacePartition_get_field(GF_Node *node, GF_FieldInfo *info)
   36514             : {
   36515           8 :         switch (info->fieldIndex) {
   36516           2 :         case 0:
   36517           2 :                 info->name = "addChildren";
   36518           2 :                 info->eventType = GF_SG_EVENT_IN;
   36519           2 :                 info->on_event_in = ((M_SpacePartition *)node)->on_addChildren;
   36520           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   36521           2 :                 info->NDTtype = NDT_SF3DNode;
   36522           2 :                 info->far_ptr = & ((M_SpacePartition *)node)->addChildren;
   36523           2 :                 return GF_OK;
   36524           2 :         case 1:
   36525           2 :                 info->name = "removeChildren";
   36526           2 :                 info->eventType = GF_SG_EVENT_IN;
   36527           2 :                 info->on_event_in = ((M_SpacePartition *)node)->on_removeChildren;
   36528           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   36529           2 :                 info->NDTtype = NDT_SF3DNode;
   36530           2 :                 info->far_ptr = & ((M_SpacePartition *)node)->removeChildren;
   36531           2 :                 return GF_OK;
   36532           2 :         case 2:
   36533           2 :                 info->name = "children";
   36534           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36535           2 :                 info->fieldType = GF_SG_VRML_MFNODE;
   36536           2 :                 info->NDTtype = NDT_SF3DNode;
   36537           2 :                 info->far_ptr = & ((M_SpacePartition *)node)->children;
   36538           2 :                 return GF_OK;
   36539           2 :         case 3:
   36540           2 :                 info->name = "SPStream";
   36541           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36542           2 :                 info->fieldType = GF_SG_VRML_SFURL;
   36543           2 :                 info->far_ptr = & ((M_SpacePartition *) node)->SPStream;
   36544           2 :                 return GF_OK;
   36545             :         default:
   36546             :                 return GF_BAD_PARAM;
   36547             :         }
   36548             : }
   36549             : 
   36550             : 
   36551           4 : static s32 SpacePartition_get_field_index_by_name(char *name)
   36552             : {
   36553           4 :         if (!strcmp("addChildren", name)) return 0;
   36554           3 :         if (!strcmp("removeChildren", name)) return 1;
   36555           2 :         if (!strcmp("children", name)) return 2;
   36556           1 :         if (!strcmp("SPStream", name)) return 3;
   36557           0 :         return -1;
   36558             : }
   36559             : static Bool SpacePartition_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36560             : {
   36561             :         switch (FieldIndex) {
   36562             :         default:
   36563             :                 return 0;
   36564             :         }
   36565             : }
   36566             : 
   36567             : 
   36568             : 
   36569           1 : GF_Node *SpacePartition_Create()
   36570             : {
   36571             :         M_SpacePartition *p;
   36572           1 :         GF_SAFEALLOC(p, M_SpacePartition);
   36573           1 :         if(!p) return NULL;
   36574           1 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_SpacePartition);
   36575           1 :         gf_sg_vrml_parent_setup((GF_Node *) p);
   36576             : 
   36577             :         /*default field values*/
   36578           1 :         return (GF_Node *)p;
   36579             : }
   36580             : 
   36581             : 
   36582             : /*
   36583             :         Storage Node deletion
   36584             : */
   36585             : 
   36586           2 : static void Storage_Del(GF_Node *node)
   36587             : {
   36588             :         M_Storage *p = (M_Storage *) node;
   36589           2 :         gf_sg_sfstring_del(p->name);
   36590           2 :         gf_sg_mfattrref_del(p->storageList);
   36591           2 :         gf_node_free((GF_Node *) p);
   36592           2 : }
   36593             : 
   36594             : static const u16 Storage_Def2All[] = { 2, 3, 4, 5};
   36595             : static const u16 Storage_In2All[] = { 0, 1, 2};
   36596             : static const u16 Storage_Out2All[] = { 2};
   36597             : 
   36598             : static u32 Storage_get_field_count(GF_Node *node, u8 IndexMode)
   36599             : {
   36600             :         switch(IndexMode) {
   36601             :         case GF_SG_FIELD_CODING_IN:
   36602             :                 return 3;
   36603             :         case GF_SG_FIELD_CODING_DEF:
   36604             :                 return 4;
   36605             :         case GF_SG_FIELD_CODING_OUT:
   36606             :                 return 1;
   36607             :         case GF_SG_FIELD_CODING_DYN:
   36608             :                 return 0;
   36609             :         default:
   36610             :                 return 6;
   36611             :         }
   36612             : }
   36613             : 
   36614             : static GF_Err Storage_get_field_index(GF_Node *n, u32 inField, u8 IndexMode, u32 *allField)
   36615             : {
   36616           6 :         switch(IndexMode) {
   36617           0 :         case GF_SG_FIELD_CODING_IN:
   36618           0 :                 *allField = Storage_In2All[inField];
   36619             :                 return GF_OK;
   36620           0 :         case GF_SG_FIELD_CODING_DEF:
   36621           0 :                 *allField = Storage_Def2All[inField];
   36622             :                 return GF_OK;
   36623           0 :         case GF_SG_FIELD_CODING_OUT:
   36624           0 :                 *allField = Storage_Out2All[inField];
   36625             :                 return GF_OK;
   36626             :         default:
   36627             :                 return GF_BAD_PARAM;
   36628             :         }
   36629             : }
   36630          15 : static GF_Err Storage_get_field(GF_Node *node, GF_FieldInfo *info)
   36631             : {
   36632          15 :         switch (info->fieldIndex) {
   36633           2 :         case 0:
   36634           2 :                 info->name = "forceSave";
   36635           2 :                 info->eventType = GF_SG_EVENT_IN;
   36636           2 :                 info->on_event_in = ((M_Storage *)node)->on_forceSave;
   36637           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36638           2 :                 info->far_ptr = & ((M_Storage *) node)->forceSave;
   36639           2 :                 return GF_OK;
   36640           2 :         case 1:
   36641           2 :                 info->name = "forceRestore";
   36642           2 :                 info->eventType = GF_SG_EVENT_IN;
   36643           2 :                 info->on_event_in = ((M_Storage *)node)->on_forceRestore;
   36644           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36645           2 :                 info->far_ptr = & ((M_Storage *) node)->forceRestore;
   36646           2 :                 return GF_OK;
   36647           2 :         case 2:
   36648           2 :                 info->name = "auto";
   36649           2 :                 info->eventType = GF_SG_EVENT_EXPOSED_FIELD;
   36650           2 :                 info->fieldType = GF_SG_VRML_SFBOOL;
   36651           2 :                 info->far_ptr = & ((M_Storage *) node)->_auto;
   36652           2 :                 return GF_OK;
   36653           3 :         case 3:
   36654           3 :                 info->name = "expireAfter";
   36655           3 :                 info->eventType = GF_SG_EVENT_FIELD;
   36656           3 :                 info->fieldType = GF_SG_VRML_SFINT32;
   36657           3 :                 info->far_ptr = & ((M_Storage *) node)->expireAfter;
   36658           3 :                 return GF_OK;
   36659           3 :         case 4:
   36660           3 :                 info->name = "name";
   36661           3 :                 info->eventType = GF_SG_EVENT_FIELD;
   36662           3 :                 info->fieldType = GF_SG_VRML_SFSTRING;
   36663           3 :                 info->far_ptr = & ((M_Storage *) node)->name;
   36664           3 :                 return GF_OK;
   36665           3 :         case 5:
   36666           3 :                 info->name = "storageList";
   36667           3 :                 info->eventType = GF_SG_EVENT_FIELD;
   36668           3 :                 info->fieldType = GF_SG_VRML_MFATTRREF;
   36669           3 :                 info->far_ptr = & ((M_Storage *) node)->storageList;
   36670           3 :                 return GF_OK;
   36671             :         default:
   36672             :                 return GF_BAD_PARAM;
   36673             :         }
   36674             : }
   36675             : 
   36676             : 
   36677           9 : static s32 Storage_get_field_index_by_name(char *name)
   36678             : {
   36679           9 :         if (!strcmp("forceSave", name)) return 0;
   36680           8 :         if (!strcmp("forceRestore", name)) return 1;
   36681           7 :         if (!strcmp("auto", name)) return 2;
   36682           6 :         if (!strcmp("expireAfter", name)) return 3;
   36683           4 :         if (!strcmp("name", name)) return 4;
   36684           2 :         if (!strcmp("storageList", name)) return 5;
   36685           0 :         return -1;
   36686             : }
   36687             : static Bool Storage_get_aq_info(GF_Node *n, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   36688             : {
   36689             :         switch (FieldIndex) {
   36690             :         default:
   36691             :                 return 0;
   36692             :         }
   36693             : }
   36694             : 
   36695             : 
   36696             : 
   36697           2 : GF_Node *Storage_Create()
   36698             : {
   36699             :         M_Storage *p;
   36700           2 :         GF_SAFEALLOC(p, M_Storage);
   36701           2 :         if(!p) return NULL;
   36702           2 :         gf_node_setup((GF_Node *)p, TAG_MPEG4_Storage);
   36703             : 
   36704             :         /*default field values*/
   36705           2 :         p->_auto = 1;
   36706           2 :         p->expireAfter = 0;
   36707           2 :         return (GF_Node *)p;
   36708             : }
   36709             : 
   36710             : 
   36711             : 
   36712             : 
   36713       70350 : GF_Node *gf_sg_mpeg4_node_new(u32 NodeTag)
   36714             : {
   36715       70350 :         switch (NodeTag) {
   36716          21 :         case TAG_MPEG4_Anchor:
   36717          21 :                 return Anchor_Create();
   36718         292 :         case TAG_MPEG4_AnimationStream:
   36719         292 :                 return AnimationStream_Create();
   36720        6273 :         case TAG_MPEG4_Appearance:
   36721        6273 :                 return Appearance_Create();
   36722          45 :         case TAG_MPEG4_AudioBuffer:
   36723          45 :                 return AudioBuffer_Create();
   36724         262 :         case TAG_MPEG4_AudioClip:
   36725         262 :                 return AudioClip_Create();
   36726           1 :         case TAG_MPEG4_AudioDelay:
   36727           1 :                 return AudioDelay_Create();
   36728           1 :         case TAG_MPEG4_AudioFX:
   36729           1 :                 return AudioFX_Create();
   36730           1 :         case TAG_MPEG4_AudioMix:
   36731           1 :                 return AudioMix_Create();
   36732          59 :         case TAG_MPEG4_AudioSource:
   36733          59 :                 return AudioSource_Create();
   36734           1 :         case TAG_MPEG4_AudioSwitch:
   36735           1 :                 return AudioSwitch_Create();
   36736          77 :         case TAG_MPEG4_Background:
   36737          77 :                 return Background_Create();
   36738         885 :         case TAG_MPEG4_Background2D:
   36739         885 :                 return Background2D_Create();
   36740           4 :         case TAG_MPEG4_Billboard:
   36741           4 :                 return Billboard_Create();
   36742         346 :         case TAG_MPEG4_Bitmap:
   36743         346 :                 return Bitmap_Create();
   36744         115 :         case TAG_MPEG4_Box:
   36745         115 :                 return Box_Create();
   36746        1144 :         case TAG_MPEG4_Circle:
   36747        1144 :                 return Circle_Create();
   36748          68 :         case TAG_MPEG4_Collision:
   36749          68 :                 return Collision_Create();
   36750         139 :         case TAG_MPEG4_Color:
   36751         139 :                 return Color_Create();
   36752           7 :         case TAG_MPEG4_ColorInterpolator:
   36753           7 :                 return ColorInterpolator_Create();
   36754          31 :         case TAG_MPEG4_CompositeTexture2D:
   36755          31 :                 return CompositeTexture2D_Create();
   36756           3 :         case TAG_MPEG4_CompositeTexture3D:
   36757           3 :                 return CompositeTexture3D_Create();
   36758         953 :         case TAG_MPEG4_Conditional:
   36759         953 :                 return Conditional_Create();
   36760          72 :         case TAG_MPEG4_Cone:
   36761          72 :                 return Cone_Create();
   36762         200 :         case TAG_MPEG4_Coordinate:
   36763         200 :                 return Coordinate_Create();
   36764        4435 :         case TAG_MPEG4_Coordinate2D:
   36765        4435 :                 return Coordinate2D_Create();
   36766           2 :         case TAG_MPEG4_CoordinateInterpolator:
   36767           2 :                 return CoordinateInterpolator_Create();
   36768           3 :         case TAG_MPEG4_CoordinateInterpolator2D:
   36769           3 :                 return CoordinateInterpolator2D_Create();
   36770        2574 :         case TAG_MPEG4_Curve2D:
   36771        2574 :                 return Curve2D_Create();
   36772          81 :         case TAG_MPEG4_Cylinder:
   36773          81 :                 return Cylinder_Create();
   36774          67 :         case TAG_MPEG4_CylinderSensor:
   36775          67 :                 return CylinderSensor_Create();
   36776           9 :         case TAG_MPEG4_DirectionalLight:
   36777           9 :                 return DirectionalLight_Create();
   36778          69 :         case TAG_MPEG4_DiscSensor:
   36779          69 :                 return DiscSensor_Create();
   36780          67 :         case TAG_MPEG4_ElevationGrid:
   36781          67 :                 return ElevationGrid_Create();
   36782           1 :         case TAG_MPEG4_Expression:
   36783           1 :                 return Expression_Create();
   36784          67 :         case TAG_MPEG4_Extrusion:
   36785          67 :                 return Extrusion_Create();
   36786           1 :         case TAG_MPEG4_Face:
   36787           1 :                 return Face_Create();
   36788           1 :         case TAG_MPEG4_FaceDefMesh:
   36789           1 :                 return FaceDefMesh_Create();
   36790           1 :         case TAG_MPEG4_FaceDefTables:
   36791           1 :                 return FaceDefTables_Create();
   36792           1 :         case TAG_MPEG4_FaceDefTransform:
   36793           1 :                 return FaceDefTransform_Create();
   36794           1 :         case TAG_MPEG4_FAP:
   36795           1 :                 return FAP_Create();
   36796           1 :         case TAG_MPEG4_FDP:
   36797           1 :                 return FDP_Create();
   36798           1 :         case TAG_MPEG4_FIT:
   36799           1 :                 return FIT_Create();
   36800           5 :         case TAG_MPEG4_Fog:
   36801           5 :                 return Fog_Create();
   36802         573 :         case TAG_MPEG4_FontStyle:
   36803         573 :                 return FontStyle_Create();
   36804         108 :         case TAG_MPEG4_Form:
   36805         108 :                 return Form_Create();
   36806         113 :         case TAG_MPEG4_Group:
   36807         113 :                 return Group_Create();
   36808         224 :         case TAG_MPEG4_ImageTexture:
   36809         224 :                 return ImageTexture_Create();
   36810         199 :         case TAG_MPEG4_IndexedFaceSet:
   36811         199 :                 return IndexedFaceSet_Create();
   36812         363 :         case TAG_MPEG4_IndexedFaceSet2D:
   36813         363 :                 return IndexedFaceSet2D_Create();
   36814          68 :         case TAG_MPEG4_IndexedLineSet:
   36815          68 :                 return IndexedLineSet_Create();
   36816         109 :         case TAG_MPEG4_IndexedLineSet2D:
   36817         109 :                 return IndexedLineSet2D_Create();
   36818         729 :         case TAG_MPEG4_Inline:
   36819         729 :                 return Inline_Create();
   36820           2 :         case TAG_MPEG4_LOD:
   36821           2 :                 return LOD_Create();
   36822         444 :         case TAG_MPEG4_Layer2D:
   36823         444 :                 return Layer2D_Create();
   36824          75 :         case TAG_MPEG4_Layer3D:
   36825          75 :                 return Layer3D_Create();
   36826         230 :         case TAG_MPEG4_Layout:
   36827         230 :                 return Layout_Create();
   36828        1140 :         case TAG_MPEG4_LineProperties:
   36829        1140 :                 return LineProperties_Create();
   36830           1 :         case TAG_MPEG4_ListeningPoint:
   36831           1 :                 return ListeningPoint_Create();
   36832         135 :         case TAG_MPEG4_Material:
   36833         135 :                 return Material_Create();
   36834        5460 :         case TAG_MPEG4_Material2D:
   36835        5460 :                 return Material2D_Create();
   36836         321 :         case TAG_MPEG4_MovieTexture:
   36837         321 :                 return MovieTexture_Create();
   36838          93 :         case TAG_MPEG4_NavigationInfo:
   36839          93 :                 return NavigationInfo_Create();
   36840          66 :         case TAG_MPEG4_Normal:
   36841          66 :                 return Normal_Create();
   36842           2 :         case TAG_MPEG4_NormalInterpolator:
   36843           2 :                 return NormalInterpolator_Create();
   36844        1525 :         case TAG_MPEG4_OrderedGroup:
   36845        1525 :                 return OrderedGroup_Create();
   36846          19 :         case TAG_MPEG4_OrientationInterpolator:
   36847          19 :                 return OrientationInterpolator_Create();
   36848          70 :         case TAG_MPEG4_PixelTexture:
   36849          70 :                 return PixelTexture_Create();
   36850          67 :         case TAG_MPEG4_PlaneSensor:
   36851          67 :                 return PlaneSensor_Create();
   36852         103 :         case TAG_MPEG4_PlaneSensor2D:
   36853         103 :                 return PlaneSensor2D_Create();
   36854           2 :         case TAG_MPEG4_PointLight:
   36855           2 :                 return PointLight_Create();
   36856          67 :         case TAG_MPEG4_PointSet:
   36857          67 :                 return PointSet_Create();
   36858          78 :         case TAG_MPEG4_PointSet2D:
   36859          78 :                 return PointSet2D_Create();
   36860          12 :         case TAG_MPEG4_PositionInterpolator:
   36861          12 :                 return PositionInterpolator_Create();
   36862         410 :         case TAG_MPEG4_PositionInterpolator2D:
   36863         410 :                 return PositionInterpolator2D_Create();
   36864          68 :         case TAG_MPEG4_ProximitySensor2D:
   36865          68 :                 return ProximitySensor2D_Create();
   36866           2 :         case TAG_MPEG4_ProximitySensor:
   36867           2 :                 return ProximitySensor_Create();
   36868         233 :         case TAG_MPEG4_QuantizationParameter:
   36869         233 :                 return QuantizationParameter_Create();
   36870         601 :         case TAG_MPEG4_Rectangle:
   36871         601 :                 return Rectangle_Create();
   36872          71 :         case TAG_MPEG4_ScalarInterpolator:
   36873          71 :                 return ScalarInterpolator_Create();
   36874         456 :         case TAG_MPEG4_Script:
   36875         456 :                 return Script_Create();
   36876       11668 :         case TAG_MPEG4_Shape:
   36877       11668 :                 return Shape_Create();
   36878           3 :         case TAG_MPEG4_Sound:
   36879           3 :                 return Sound_Create();
   36880         275 :         case TAG_MPEG4_Sound2D:
   36881         275 :                 return Sound2D_Create();
   36882          79 :         case TAG_MPEG4_Sphere:
   36883          79 :                 return Sphere_Create();
   36884          67 :         case TAG_MPEG4_SphereSensor:
   36885          67 :                 return SphereSensor_Create();
   36886           2 :         case TAG_MPEG4_SpotLight:
   36887           2 :                 return SpotLight_Create();
   36888         540 :         case TAG_MPEG4_Switch:
   36889         540 :                 return Switch_Create();
   36890           2 :         case TAG_MPEG4_TermCap:
   36891           2 :                 return TermCap_Create();
   36892        1103 :         case TAG_MPEG4_Text:
   36893        1103 :                 return Text_Create();
   36894           1 :         case TAG_MPEG4_TextureCoordinate:
   36895           1 :                 return TextureCoordinate_Create();
   36896          85 :         case TAG_MPEG4_TextureTransform:
   36897          85 :                 return TextureTransform_Create();
   36898         583 :         case TAG_MPEG4_TimeSensor:
   36899         583 :                 return TimeSensor_Create();
   36900        1513 :         case TAG_MPEG4_TouchSensor:
   36901        1513 :                 return TouchSensor_Create();
   36902         333 :         case TAG_MPEG4_Transform:
   36903         333 :                 return Transform_Create();
   36904        7625 :         case TAG_MPEG4_Transform2D:
   36905        7625 :                 return Transform2D_Create();
   36906        2035 :         case TAG_MPEG4_Valuator:
   36907        2035 :                 return Valuator_Create();
   36908         103 :         case TAG_MPEG4_Viewpoint:
   36909         103 :                 return Viewpoint_Create();
   36910          78 :         case TAG_MPEG4_VisibilitySensor:
   36911          78 :                 return VisibilitySensor_Create();
   36912           1 :         case TAG_MPEG4_Viseme:
   36913           1 :                 return Viseme_Create();
   36914         511 :         case TAG_MPEG4_WorldInfo:
   36915         511 :                 return WorldInfo_Create();
   36916           1 :         case TAG_MPEG4_AcousticMaterial:
   36917           1 :                 return AcousticMaterial_Create();
   36918           1 :         case TAG_MPEG4_AcousticScene:
   36919           1 :                 return AcousticScene_Create();
   36920           1 :         case TAG_MPEG4_ApplicationWindow:
   36921           1 :                 return ApplicationWindow_Create();
   36922           1 :         case TAG_MPEG4_BAP:
   36923           1 :                 return BAP_Create();
   36924           1 :         case TAG_MPEG4_BDP:
   36925           1 :                 return BDP_Create();
   36926           1 :         case TAG_MPEG4_Body:
   36927           1 :                 return Body_Create();
   36928           1 :         case TAG_MPEG4_BodyDefTable:
   36929           1 :                 return BodyDefTable_Create();
   36930           1 :         case TAG_MPEG4_BodySegmentConnectionHint:
   36931           1 :                 return BodySegmentConnectionHint_Create();
   36932           1 :         case TAG_MPEG4_DirectiveSound:
   36933           1 :                 return DirectiveSound_Create();
   36934           1 :         case TAG_MPEG4_Hierarchical3DMesh:
   36935           1 :                 return Hierarchical3DMesh_Create();
   36936          24 :         case TAG_MPEG4_MaterialKey:
   36937          24 :                 return MaterialKey_Create();
   36938           1 :         case TAG_MPEG4_PerceptualParameters:
   36939           1 :                 return PerceptualParameters_Create();
   36940           1 :         case TAG_MPEG4_TemporalTransform:
   36941           1 :                 return TemporalTransform_Create();
   36942           1 :         case TAG_MPEG4_TemporalGroup:
   36943           1 :                 return TemporalGroup_Create();
   36944          23 :         case TAG_MPEG4_ServerCommand:
   36945          23 :                 return ServerCommand_Create();
   36946         134 :         case TAG_MPEG4_InputSensor:
   36947         134 :                 return InputSensor_Create();
   36948           1 :         case TAG_MPEG4_MatteTexture:
   36949           1 :                 return MatteTexture_Create();
   36950           1 :         case TAG_MPEG4_MediaBuffer:
   36951           1 :                 return MediaBuffer_Create();
   36952          54 :         case TAG_MPEG4_MediaControl:
   36953          54 :                 return MediaControl_Create();
   36954          17 :         case TAG_MPEG4_MediaSensor:
   36955          17 :                 return MediaSensor_Create();
   36956          67 :         case TAG_MPEG4_BitWrapper:
   36957          67 :                 return BitWrapper_Create();
   36958           2 :         case TAG_MPEG4_CoordinateInterpolator4D:
   36959           2 :                 return CoordinateInterpolator4D_Create();
   36960           1 :         case TAG_MPEG4_DepthImage:
   36961           1 :                 return DepthImage_Create();
   36962           1 :         case TAG_MPEG4_FFD:
   36963           1 :                 return FFD_Create();
   36964           1 :         case TAG_MPEG4_Implicit:
   36965           1 :                 return Implicit_Create();
   36966           1 :         case TAG_MPEG4_XXLFM_Appearance:
   36967           1 :                 return XXLFM_Appearance_Create();
   36968           1 :         case TAG_MPEG4_XXLFM_BlendList:
   36969           1 :                 return XXLFM_BlendList_Create();
   36970           1 :         case TAG_MPEG4_XXLFM_FrameList:
   36971           1 :                 return XXLFM_FrameList_Create();
   36972           1 :         case TAG_MPEG4_XXLFM_LightMap:
   36973           1 :                 return XXLFM_LightMap_Create();
   36974           1 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   36975           1 :                 return XXLFM_SurfaceMapList_Create();
   36976           1 :         case TAG_MPEG4_XXLFM_ViewMapList:
   36977           1 :                 return XXLFM_ViewMapList_Create();
   36978           1 :         case TAG_MPEG4_MeshGrid:
   36979           1 :                 return MeshGrid_Create();
   36980          67 :         case TAG_MPEG4_NonLinearDeformer:
   36981          67 :                 return NonLinearDeformer_Create();
   36982           1 :         case TAG_MPEG4_NurbsCurve:
   36983           1 :                 return NurbsCurve_Create();
   36984           1 :         case TAG_MPEG4_NurbsCurve2D:
   36985           1 :                 return NurbsCurve2D_Create();
   36986           1 :         case TAG_MPEG4_NurbsSurface:
   36987           1 :                 return NurbsSurface_Create();
   36988           1 :         case TAG_MPEG4_OctreeImage:
   36989           1 :                 return OctreeImage_Create();
   36990           1 :         case TAG_MPEG4_XXParticles:
   36991           1 :                 return XXParticles_Create();
   36992           1 :         case TAG_MPEG4_XXParticleInitBox:
   36993           1 :                 return XXParticleInitBox_Create();
   36994           1 :         case TAG_MPEG4_XXPlanarObstacle:
   36995           1 :                 return XXPlanarObstacle_Create();
   36996           1 :         case TAG_MPEG4_XXPointAttractor:
   36997           1 :                 return XXPointAttractor_Create();
   36998           1 :         case TAG_MPEG4_PointTexture:
   36999           1 :                 return PointTexture_Create();
   37000           2 :         case TAG_MPEG4_PositionAnimator:
   37001           2 :                 return PositionAnimator_Create();
   37002           3 :         case TAG_MPEG4_PositionAnimator2D:
   37003           3 :                 return PositionAnimator2D_Create();
   37004           2 :         case TAG_MPEG4_PositionInterpolator4D:
   37005           2 :                 return PositionInterpolator4D_Create();
   37006           1 :         case TAG_MPEG4_ProceduralTexture:
   37007           1 :                 return ProceduralTexture_Create();
   37008           1 :         case TAG_MPEG4_Quadric:
   37009           1 :                 return Quadric_Create();
   37010           1 :         case TAG_MPEG4_SBBone:
   37011           1 :                 return SBBone_Create();
   37012           1 :         case TAG_MPEG4_SBMuscle:
   37013           1 :                 return SBMuscle_Create();
   37014           1 :         case TAG_MPEG4_SBSegment:
   37015           1 :                 return SBSegment_Create();
   37016           1 :         case TAG_MPEG4_SBSite:
   37017           1 :                 return SBSite_Create();
   37018           1 :         case TAG_MPEG4_SBSkinnedModel:
   37019           1 :                 return SBSkinnedModel_Create();
   37020           1 :         case TAG_MPEG4_SBVCAnimation:
   37021           1 :                 return SBVCAnimation_Create();
   37022           2 :         case TAG_MPEG4_ScalarAnimator:
   37023           2 :                 return ScalarAnimator_Create();
   37024           1 :         case TAG_MPEG4_SimpleTexture:
   37025           1 :                 return SimpleTexture_Create();
   37026           1 :         case TAG_MPEG4_SolidRep:
   37027           1 :                 return SolidRep_Create();
   37028           1 :         case TAG_MPEG4_SubdivisionSurface:
   37029           1 :                 return SubdivisionSurface_Create();
   37030           1 :         case TAG_MPEG4_SubdivSurfaceSector:
   37031           1 :                 return SubdivSurfaceSector_Create();
   37032           1 :         case TAG_MPEG4_WaveletSubdivisionSurface:
   37033           1 :                 return WaveletSubdivisionSurface_Create();
   37034          68 :         case TAG_MPEG4_Clipper2D:
   37035          68 :                 return Clipper2D_Create();
   37036         633 :         case TAG_MPEG4_ColorTransform:
   37037         633 :                 return ColorTransform_Create();
   37038           5 :         case TAG_MPEG4_Ellipse:
   37039           5 :                 return Ellipse_Create();
   37040         338 :         case TAG_MPEG4_LinearGradient:
   37041         338 :                 return LinearGradient_Create();
   37042          68 :         case TAG_MPEG4_PathLayout:
   37043          68 :                 return PathLayout_Create();
   37044         497 :         case TAG_MPEG4_RadialGradient:
   37045         497 :                 return RadialGradient_Create();
   37046           1 :         case TAG_MPEG4_SynthesizedTexture:
   37047           1 :                 return SynthesizedTexture_Create();
   37048        7370 :         case TAG_MPEG4_TransformMatrix2D:
   37049        7370 :                 return TransformMatrix2D_Create();
   37050         106 :         case TAG_MPEG4_Viewport:
   37051         106 :                 return Viewport_Create();
   37052         834 :         case TAG_MPEG4_XCurve2D:
   37053         834 :                 return XCurve2D_Create();
   37054           1 :         case TAG_MPEG4_XFontStyle:
   37055           1 :                 return XFontStyle_Create();
   37056         504 :         case TAG_MPEG4_XLineProperties:
   37057         504 :                 return XLineProperties_Create();
   37058           1 :         case TAG_MPEG4_AdvancedAudioBuffer:
   37059           1 :                 return AdvancedAudioBuffer_Create();
   37060           1 :         case TAG_MPEG4_AudioChannelConfig:
   37061           1 :                 return AudioChannelConfig_Create();
   37062           1 :         case TAG_MPEG4_DepthImageV2:
   37063           1 :                 return DepthImageV2_Create();
   37064           1 :         case TAG_MPEG4_MorphShape:
   37065           1 :                 return MorphShape_Create();
   37066           1 :         case TAG_MPEG4_MultiTexture:
   37067           1 :                 return MultiTexture_Create();
   37068           1 :         case TAG_MPEG4_PointTextureV2:
   37069           1 :                 return PointTextureV2_Create();
   37070           1 :         case TAG_MPEG4_SBVCAnimationV2:
   37071           1 :                 return SBVCAnimationV2_Create();
   37072           1 :         case TAG_MPEG4_SimpleTextureV2:
   37073           1 :                 return SimpleTextureV2_Create();
   37074           1 :         case TAG_MPEG4_SurroundingSound:
   37075           1 :                 return SurroundingSound_Create();
   37076           1 :         case TAG_MPEG4_Transform3DAudio:
   37077           1 :                 return Transform3DAudio_Create();
   37078          23 :         case TAG_MPEG4_WideSound:
   37079          23 :                 return WideSound_Create();
   37080          23 :         case TAG_MPEG4_ScoreShape:
   37081          23 :                 return ScoreShape_Create();
   37082           1 :         case TAG_MPEG4_MusicScore:
   37083           1 :                 return MusicScore_Create();
   37084           1 :         case TAG_MPEG4_FootPrintSetNode:
   37085           1 :                 return FootPrintSetNode_Create();
   37086           1 :         case TAG_MPEG4_FootPrintNode:
   37087           1 :                 return FootPrintNode_Create();
   37088           1 :         case TAG_MPEG4_BuildingPartNode:
   37089           1 :                 return BuildingPartNode_Create();
   37090           1 :         case TAG_MPEG4_RoofNode:
   37091           1 :                 return RoofNode_Create();
   37092           1 :         case TAG_MPEG4_FacadeNode:
   37093           1 :                 return FacadeNode_Create();
   37094          23 :         case TAG_MPEG4_Shadow:
   37095          23 :                 return Shadow_Create();
   37096          64 :         case TAG_MPEG4_CacheTexture:
   37097          64 :                 return CacheTexture_Create();
   37098          91 :         case TAG_MPEG4_EnvironmentTest:
   37099          91 :                 return EnvironmentTest_Create();
   37100           5 :         case TAG_MPEG4_KeyNavigator:
   37101           5 :                 return KeyNavigator_Create();
   37102           1 :         case TAG_MPEG4_SpacePartition:
   37103           1 :                 return SpacePartition_Create();
   37104           2 :         case TAG_MPEG4_Storage:
   37105           2 :                 return Storage_Create();
   37106             :         default:
   37107             :                 return NULL;
   37108             :         }
   37109             : }
   37110             : 
   37111        3878 : const char *gf_sg_mpeg4_node_get_class_name(u32 NodeTag)
   37112             : {
   37113        3878 :         switch (NodeTag) {
   37114             :         case TAG_MPEG4_Anchor:
   37115             :                 return "Anchor";
   37116          18 :         case TAG_MPEG4_AnimationStream:
   37117          18 :                 return "AnimationStream";
   37118         295 :         case TAG_MPEG4_Appearance:
   37119         295 :                 return "Appearance";
   37120          15 :         case TAG_MPEG4_AudioBuffer:
   37121          15 :                 return "AudioBuffer";
   37122          15 :         case TAG_MPEG4_AudioClip:
   37123          15 :                 return "AudioClip";
   37124           1 :         case TAG_MPEG4_AudioDelay:
   37125           1 :                 return "AudioDelay";
   37126           1 :         case TAG_MPEG4_AudioFX:
   37127           1 :                 return "AudioFX";
   37128           1 :         case TAG_MPEG4_AudioMix:
   37129           1 :                 return "AudioMix";
   37130          15 :         case TAG_MPEG4_AudioSource:
   37131          15 :                 return "AudioSource";
   37132           1 :         case TAG_MPEG4_AudioSwitch:
   37133           1 :                 return "AudioSwitch";
   37134          22 :         case TAG_MPEG4_Background:
   37135          22 :                 return "Background";
   37136          81 :         case TAG_MPEG4_Background2D:
   37137          81 :                 return "Background2D";
   37138           1 :         case TAG_MPEG4_Billboard:
   37139           1 :                 return "Billboard";
   37140          24 :         case TAG_MPEG4_Bitmap:
   37141          24 :                 return "Bitmap";
   37142          23 :         case TAG_MPEG4_Box:
   37143          23 :                 return "Box";
   37144          68 :         case TAG_MPEG4_Circle:
   37145          68 :                 return "Circle";
   37146          22 :         case TAG_MPEG4_Collision:
   37147          22 :                 return "Collision";
   37148          37 :         case TAG_MPEG4_Color:
   37149          37 :                 return "Color";
   37150           1 :         case TAG_MPEG4_ColorInterpolator:
   37151           1 :                 return "ColorInterpolator";
   37152           1 :         case TAG_MPEG4_CompositeTexture2D:
   37153           1 :                 return "CompositeTexture2D";
   37154           1 :         case TAG_MPEG4_CompositeTexture3D:
   37155           1 :                 return "CompositeTexture3D";
   37156          97 :         case TAG_MPEG4_Conditional:
   37157          97 :                 return "Conditional";
   37158          22 :         case TAG_MPEG4_Cone:
   37159          22 :                 return "Cone";
   37160          52 :         case TAG_MPEG4_Coordinate:
   37161          52 :                 return "Coordinate";
   37162         154 :         case TAG_MPEG4_Coordinate2D:
   37163         154 :                 return "Coordinate2D";
   37164           1 :         case TAG_MPEG4_CoordinateInterpolator:
   37165           1 :                 return "CoordinateInterpolator";
   37166           1 :         case TAG_MPEG4_CoordinateInterpolator2D:
   37167           1 :                 return "CoordinateInterpolator2D";
   37168          22 :         case TAG_MPEG4_Curve2D:
   37169          22 :                 return "Curve2D";
   37170          22 :         case TAG_MPEG4_Cylinder:
   37171          22 :                 return "Cylinder";
   37172          22 :         case TAG_MPEG4_CylinderSensor:
   37173          22 :                 return "CylinderSensor";
   37174           1 :         case TAG_MPEG4_DirectionalLight:
   37175           1 :                 return "DirectionalLight";
   37176          22 :         case TAG_MPEG4_DiscSensor:
   37177          22 :                 return "DiscSensor";
   37178          22 :         case TAG_MPEG4_ElevationGrid:
   37179          22 :                 return "ElevationGrid";
   37180           1 :         case TAG_MPEG4_Expression:
   37181           1 :                 return "Expression";
   37182          22 :         case TAG_MPEG4_Extrusion:
   37183          22 :                 return "Extrusion";
   37184           1 :         case TAG_MPEG4_Face:
   37185           1 :                 return "Face";
   37186           1 :         case TAG_MPEG4_FaceDefMesh:
   37187           1 :                 return "FaceDefMesh";
   37188           1 :         case TAG_MPEG4_FaceDefTables:
   37189           1 :                 return "FaceDefTables";
   37190           1 :         case TAG_MPEG4_FaceDefTransform:
   37191           1 :                 return "FaceDefTransform";
   37192           1 :         case TAG_MPEG4_FAP:
   37193           1 :                 return "FAP";
   37194           1 :         case TAG_MPEG4_FDP:
   37195           1 :                 return "FDP";
   37196           1 :         case TAG_MPEG4_FIT:
   37197           1 :                 return "FIT";
   37198           1 :         case TAG_MPEG4_Fog:
   37199           1 :                 return "Fog";
   37200          31 :         case TAG_MPEG4_FontStyle:
   37201          31 :                 return "FontStyle";
   37202          22 :         case TAG_MPEG4_Form:
   37203          22 :                 return "Form";
   37204           2 :         case TAG_MPEG4_Group:
   37205           2 :                 return "Group";
   37206          37 :         case TAG_MPEG4_ImageTexture:
   37207          37 :                 return "ImageTexture";
   37208          55 :         case TAG_MPEG4_IndexedFaceSet:
   37209          55 :                 return "IndexedFaceSet";
   37210          94 :         case TAG_MPEG4_IndexedFaceSet2D:
   37211          94 :                 return "IndexedFaceSet2D";
   37212          22 :         case TAG_MPEG4_IndexedLineSet:
   37213          22 :                 return "IndexedLineSet";
   37214          22 :         case TAG_MPEG4_IndexedLineSet2D:
   37215          22 :                 return "IndexedLineSet2D";
   37216           1 :         case TAG_MPEG4_Inline:
   37217           1 :                 return "Inline";
   37218           1 :         case TAG_MPEG4_LOD:
   37219           1 :                 return "LOD";
   37220          22 :         case TAG_MPEG4_Layer2D:
   37221          22 :                 return "Layer2D";
   37222          22 :         case TAG_MPEG4_Layer3D:
   37223          22 :                 return "Layer3D";
   37224          22 :         case TAG_MPEG4_Layout:
   37225          22 :                 return "Layout";
   37226          55 :         case TAG_MPEG4_LineProperties:
   37227          55 :                 return "LineProperties";
   37228           1 :         case TAG_MPEG4_ListeningPoint:
   37229           1 :                 return "ListeningPoint";
   37230          23 :         case TAG_MPEG4_Material:
   37231          23 :                 return "Material";
   37232         177 :         case TAG_MPEG4_Material2D:
   37233         177 :                 return "Material2D";
   37234          24 :         case TAG_MPEG4_MovieTexture:
   37235          24 :                 return "MovieTexture";
   37236          22 :         case TAG_MPEG4_NavigationInfo:
   37237          22 :                 return "NavigationInfo";
   37238          22 :         case TAG_MPEG4_Normal:
   37239          22 :                 return "Normal";
   37240           1 :         case TAG_MPEG4_NormalInterpolator:
   37241           1 :                 return "NormalInterpolator";
   37242          49 :         case TAG_MPEG4_OrderedGroup:
   37243          49 :                 return "OrderedGroup";
   37244           1 :         case TAG_MPEG4_OrientationInterpolator:
   37245           1 :                 return "OrientationInterpolator";
   37246          22 :         case TAG_MPEG4_PixelTexture:
   37247          22 :                 return "PixelTexture";
   37248          22 :         case TAG_MPEG4_PlaneSensor:
   37249          22 :                 return "PlaneSensor";
   37250          22 :         case TAG_MPEG4_PlaneSensor2D:
   37251          22 :                 return "PlaneSensor2D";
   37252           1 :         case TAG_MPEG4_PointLight:
   37253           1 :                 return "PointLight";
   37254          22 :         case TAG_MPEG4_PointSet:
   37255          22 :                 return "PointSet";
   37256          22 :         case TAG_MPEG4_PointSet2D:
   37257          22 :                 return "PointSet2D";
   37258           1 :         case TAG_MPEG4_PositionInterpolator:
   37259           1 :                 return "PositionInterpolator";
   37260           1 :         case TAG_MPEG4_PositionInterpolator2D:
   37261           1 :                 return "PositionInterpolator2D";
   37262          22 :         case TAG_MPEG4_ProximitySensor2D:
   37263          22 :                 return "ProximitySensor2D";
   37264           1 :         case TAG_MPEG4_ProximitySensor:
   37265           1 :                 return "ProximitySensor";
   37266          70 :         case TAG_MPEG4_QuantizationParameter:
   37267          70 :                 return "QuantizationParameter";
   37268          90 :         case TAG_MPEG4_Rectangle:
   37269          90 :                 return "Rectangle";
   37270           1 :         case TAG_MPEG4_ScalarInterpolator:
   37271           1 :                 return "ScalarInterpolator";
   37272          22 :         case TAG_MPEG4_Script:
   37273          22 :                 return "Script";
   37274         475 :         case TAG_MPEG4_Shape:
   37275         475 :                 return "Shape";
   37276           1 :         case TAG_MPEG4_Sound:
   37277           1 :                 return "Sound";
   37278          15 :         case TAG_MPEG4_Sound2D:
   37279          15 :                 return "Sound2D";
   37280          22 :         case TAG_MPEG4_Sphere:
   37281          22 :                 return "Sphere";
   37282          22 :         case TAG_MPEG4_SphereSensor:
   37283          22 :                 return "SphereSensor";
   37284           1 :         case TAG_MPEG4_SpotLight:
   37285           1 :                 return "SpotLight";
   37286          22 :         case TAG_MPEG4_Switch:
   37287          22 :                 return "Switch";
   37288           1 :         case TAG_MPEG4_TermCap:
   37289           1 :                 return "TermCap";
   37290          31 :         case TAG_MPEG4_Text:
   37291          31 :                 return "Text";
   37292           1 :         case TAG_MPEG4_TextureCoordinate:
   37293           1 :                 return "TextureCoordinate";
   37294          22 :         case TAG_MPEG4_TextureTransform:
   37295          22 :                 return "TextureTransform";
   37296          15 :         case TAG_MPEG4_TimeSensor:
   37297          15 :                 return "TimeSensor";
   37298          37 :         case TAG_MPEG4_TouchSensor:
   37299          37 :                 return "TouchSensor";
   37300          56 :         case TAG_MPEG4_Transform:
   37301          56 :                 return "Transform";
   37302         272 :         case TAG_MPEG4_Transform2D:
   37303         272 :                 return "Transform2D";
   37304         127 :         case TAG_MPEG4_Valuator:
   37305         127 :                 return "Valuator";
   37306          22 :         case TAG_MPEG4_Viewpoint:
   37307          22 :                 return "Viewpoint";
   37308          37 :         case TAG_MPEG4_VisibilitySensor:
   37309          37 :                 return "VisibilitySensor";
   37310           1 :         case TAG_MPEG4_Viseme:
   37311           1 :                 return "Viseme";
   37312          43 :         case TAG_MPEG4_WorldInfo:
   37313          43 :                 return "WorldInfo";
   37314           1 :         case TAG_MPEG4_AcousticMaterial:
   37315           1 :                 return "AcousticMaterial";
   37316           1 :         case TAG_MPEG4_AcousticScene:
   37317           1 :                 return "AcousticScene";
   37318           1 :         case TAG_MPEG4_ApplicationWindow:
   37319           1 :                 return "ApplicationWindow";
   37320           1 :         case TAG_MPEG4_BAP:
   37321           1 :                 return "BAP";
   37322           1 :         case TAG_MPEG4_BDP:
   37323           1 :                 return "BDP";
   37324           1 :         case TAG_MPEG4_Body:
   37325           1 :                 return "Body";
   37326           1 :         case TAG_MPEG4_BodyDefTable:
   37327           1 :                 return "BodyDefTable";
   37328           1 :         case TAG_MPEG4_BodySegmentConnectionHint:
   37329           1 :                 return "BodySegmentConnectionHint";
   37330           1 :         case TAG_MPEG4_DirectiveSound:
   37331           1 :                 return "DirectiveSound";
   37332           1 :         case TAG_MPEG4_Hierarchical3DMesh:
   37333           1 :                 return "Hierarchical3DMesh";
   37334           8 :         case TAG_MPEG4_MaterialKey:
   37335           8 :                 return "MaterialKey";
   37336           1 :         case TAG_MPEG4_PerceptualParameters:
   37337           1 :                 return "PerceptualParameters";
   37338           1 :         case TAG_MPEG4_TemporalTransform:
   37339           1 :                 return "TemporalTransform";
   37340           1 :         case TAG_MPEG4_TemporalGroup:
   37341           1 :                 return "TemporalGroup";
   37342           8 :         case TAG_MPEG4_ServerCommand:
   37343           8 :                 return "ServerCommand";
   37344          37 :         case TAG_MPEG4_InputSensor:
   37345          37 :                 return "InputSensor";
   37346           1 :         case TAG_MPEG4_MatteTexture:
   37347           1 :                 return "MatteTexture";
   37348           1 :         case TAG_MPEG4_MediaBuffer:
   37349           1 :                 return "MediaBuffer";
   37350           1 :         case TAG_MPEG4_MediaControl:
   37351           1 :                 return "MediaControl";
   37352           1 :         case TAG_MPEG4_MediaSensor:
   37353           1 :                 return "MediaSensor";
   37354          24 :         case TAG_MPEG4_BitWrapper:
   37355          24 :                 return "BitWrapper";
   37356           1 :         case TAG_MPEG4_CoordinateInterpolator4D:
   37357           1 :                 return "CoordinateInterpolator4D";
   37358           1 :         case TAG_MPEG4_DepthImage:
   37359           1 :                 return "DepthImage";
   37360           1 :         case TAG_MPEG4_FFD:
   37361           1 :                 return "FFD";
   37362           1 :         case TAG_MPEG4_Implicit:
   37363           1 :                 return "Implicit";
   37364           1 :         case TAG_MPEG4_XXLFM_Appearance:
   37365           1 :                 return "XXLFM_Appearance";
   37366           1 :         case TAG_MPEG4_XXLFM_BlendList:
   37367           1 :                 return "XXLFM_BlendList";
   37368           1 :         case TAG_MPEG4_XXLFM_FrameList:
   37369           1 :                 return "XXLFM_FrameList";
   37370           1 :         case TAG_MPEG4_XXLFM_LightMap:
   37371           1 :                 return "XXLFM_LightMap";
   37372           1 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   37373           1 :                 return "XXLFM_SurfaceMapList";
   37374           1 :         case TAG_MPEG4_XXLFM_ViewMapList:
   37375           1 :                 return "XXLFM_ViewMapList";
   37376           1 :         case TAG_MPEG4_MeshGrid:
   37377           1 :                 return "MeshGrid";
   37378          22 :         case TAG_MPEG4_NonLinearDeformer:
   37379          22 :                 return "NonLinearDeformer";
   37380           1 :         case TAG_MPEG4_NurbsCurve:
   37381           1 :                 return "NurbsCurve";
   37382           1 :         case TAG_MPEG4_NurbsCurve2D:
   37383           1 :                 return "NurbsCurve2D";
   37384           1 :         case TAG_MPEG4_NurbsSurface:
   37385           1 :                 return "NurbsSurface";
   37386           1 :         case TAG_MPEG4_OctreeImage:
   37387           1 :                 return "OctreeImage";
   37388           1 :         case TAG_MPEG4_XXParticles:
   37389           1 :                 return "XXParticles";
   37390           1 :         case TAG_MPEG4_XXParticleInitBox:
   37391           1 :                 return "XXParticleInitBox";
   37392           1 :         case TAG_MPEG4_XXPlanarObstacle:
   37393           1 :                 return "XXPlanarObstacle";
   37394           1 :         case TAG_MPEG4_XXPointAttractor:
   37395           1 :                 return "XXPointAttractor";
   37396           1 :         case TAG_MPEG4_PointTexture:
   37397           1 :                 return "PointTexture";
   37398           1 :         case TAG_MPEG4_PositionAnimator:
   37399           1 :                 return "PositionAnimator";
   37400           1 :         case TAG_MPEG4_PositionAnimator2D:
   37401           1 :                 return "PositionAnimator2D";
   37402           1 :         case TAG_MPEG4_PositionInterpolator4D:
   37403           1 :                 return "PositionInterpolator4D";
   37404           1 :         case TAG_MPEG4_ProceduralTexture:
   37405           1 :                 return "ProceduralTexture";
   37406           1 :         case TAG_MPEG4_Quadric:
   37407           1 :                 return "Quadric";
   37408           1 :         case TAG_MPEG4_SBBone:
   37409           1 :                 return "SBBone";
   37410           1 :         case TAG_MPEG4_SBMuscle:
   37411           1 :                 return "SBMuscle";
   37412           1 :         case TAG_MPEG4_SBSegment:
   37413           1 :                 return "SBSegment";
   37414           1 :         case TAG_MPEG4_SBSite:
   37415           1 :                 return "SBSite";
   37416           1 :         case TAG_MPEG4_SBSkinnedModel:
   37417           1 :                 return "SBSkinnedModel";
   37418           1 :         case TAG_MPEG4_SBVCAnimation:
   37419           1 :                 return "SBVCAnimation";
   37420           1 :         case TAG_MPEG4_ScalarAnimator:
   37421           1 :                 return "ScalarAnimator";
   37422           1 :         case TAG_MPEG4_SimpleTexture:
   37423           1 :                 return "SimpleTexture";
   37424           1 :         case TAG_MPEG4_SolidRep:
   37425           1 :                 return "SolidRep";
   37426           1 :         case TAG_MPEG4_SubdivisionSurface:
   37427           1 :                 return "SubdivisionSurface";
   37428           1 :         case TAG_MPEG4_SubdivSurfaceSector:
   37429           1 :                 return "SubdivSurfaceSector";
   37430           1 :         case TAG_MPEG4_WaveletSubdivisionSurface:
   37431           1 :                 return "WaveletSubdivisionSurface";
   37432          22 :         case TAG_MPEG4_Clipper2D:
   37433          22 :                 return "Clipper2D";
   37434          22 :         case TAG_MPEG4_ColorTransform:
   37435          22 :                 return "ColorTransform";
   37436           1 :         case TAG_MPEG4_Ellipse:
   37437           1 :                 return "Ellipse";
   37438          22 :         case TAG_MPEG4_LinearGradient:
   37439          22 :                 return "LinearGradient";
   37440          22 :         case TAG_MPEG4_PathLayout:
   37441          22 :                 return "PathLayout";
   37442          22 :         case TAG_MPEG4_RadialGradient:
   37443          22 :                 return "RadialGradient";
   37444           1 :         case TAG_MPEG4_SynthesizedTexture:
   37445           1 :                 return "SynthesizedTexture";
   37446          37 :         case TAG_MPEG4_TransformMatrix2D:
   37447          37 :                 return "TransformMatrix2D";
   37448          25 :         case TAG_MPEG4_Viewport:
   37449          25 :                 return "Viewport";
   37450          22 :         case TAG_MPEG4_XCurve2D:
   37451          22 :                 return "XCurve2D";
   37452           1 :         case TAG_MPEG4_XFontStyle:
   37453           1 :                 return "XFontStyle";
   37454          22 :         case TAG_MPEG4_XLineProperties:
   37455          22 :                 return "XLineProperties";
   37456           1 :         case TAG_MPEG4_AdvancedAudioBuffer:
   37457           1 :                 return "AdvancedAudioBuffer";
   37458           1 :         case TAG_MPEG4_AudioChannelConfig:
   37459           1 :                 return "AudioChannelConfig";
   37460           1 :         case TAG_MPEG4_DepthImageV2:
   37461           1 :                 return "DepthImageV2";
   37462           1 :         case TAG_MPEG4_MorphShape:
   37463           1 :                 return "MorphShape";
   37464           1 :         case TAG_MPEG4_MultiTexture:
   37465           1 :                 return "MultiTexture";
   37466           1 :         case TAG_MPEG4_PointTextureV2:
   37467           1 :                 return "PointTextureV2";
   37468           1 :         case TAG_MPEG4_SBVCAnimationV2:
   37469           1 :                 return "SBVCAnimationV2";
   37470           1 :         case TAG_MPEG4_SimpleTextureV2:
   37471           1 :                 return "SimpleTextureV2";
   37472           1 :         case TAG_MPEG4_SurroundingSound:
   37473           1 :                 return "SurroundingSound";
   37474           1 :         case TAG_MPEG4_Transform3DAudio:
   37475           1 :                 return "Transform3DAudio";
   37476           8 :         case TAG_MPEG4_WideSound:
   37477           8 :                 return "WideSound";
   37478           8 :         case TAG_MPEG4_ScoreShape:
   37479           8 :                 return "ScoreShape";
   37480           1 :         case TAG_MPEG4_MusicScore:
   37481           1 :                 return "MusicScore";
   37482           1 :         case TAG_MPEG4_FootPrintSetNode:
   37483           1 :                 return "FootPrintSetNode";
   37484           1 :         case TAG_MPEG4_FootPrintNode:
   37485           1 :                 return "FootPrintNode";
   37486           1 :         case TAG_MPEG4_BuildingPartNode:
   37487           1 :                 return "BuildingPartNode";
   37488           1 :         case TAG_MPEG4_RoofNode:
   37489           1 :                 return "RoofNode";
   37490           1 :         case TAG_MPEG4_FacadeNode:
   37491           1 :                 return "FacadeNode";
   37492           8 :         case TAG_MPEG4_Shadow:
   37493           8 :                 return "Shadow";
   37494          22 :         case TAG_MPEG4_CacheTexture:
   37495          22 :                 return "CacheTexture";
   37496          58 :         case TAG_MPEG4_EnvironmentTest:
   37497          58 :                 return "EnvironmentTest";
   37498           1 :         case TAG_MPEG4_KeyNavigator:
   37499           1 :                 return "KeyNavigator";
   37500           1 :         case TAG_MPEG4_SpacePartition:
   37501           1 :                 return "SpacePartition";
   37502           1 :         case TAG_MPEG4_Storage:
   37503           1 :                 return "Storage";
   37504           0 :         default:
   37505           0 :                 return "Unknown Node";
   37506             :         }
   37507             : }
   37508             : 
   37509       70350 : void gf_sg_mpeg4_node_del(GF_Node *node)
   37510             : {
   37511       70350 :         switch (node->sgprivate->tag) {
   37512          21 :         case TAG_MPEG4_Anchor:
   37513          21 :                 Anchor_Del(node);
   37514          21 :                 return;
   37515             :         case TAG_MPEG4_AnimationStream:
   37516             :                 AnimationStream_Del(node);
   37517             :                 return;
   37518        6273 :         case TAG_MPEG4_Appearance:
   37519        6273 :                 Appearance_Del(node);
   37520        6273 :                 return;
   37521          45 :         case TAG_MPEG4_AudioBuffer:
   37522          45 :                 AudioBuffer_Del(node);
   37523          45 :                 return;
   37524         262 :         case TAG_MPEG4_AudioClip:
   37525         262 :                 AudioClip_Del(node);
   37526         262 :                 return;
   37527           1 :         case TAG_MPEG4_AudioDelay:
   37528           1 :                 AudioDelay_Del(node);
   37529           1 :                 return;
   37530           1 :         case TAG_MPEG4_AudioFX:
   37531           1 :                 AudioFX_Del(node);
   37532           1 :                 return;
   37533           1 :         case TAG_MPEG4_AudioMix:
   37534           1 :                 AudioMix_Del(node);
   37535           1 :                 return;
   37536          59 :         case TAG_MPEG4_AudioSource:
   37537          59 :                 AudioSource_Del(node);
   37538          59 :                 return;
   37539           1 :         case TAG_MPEG4_AudioSwitch:
   37540           1 :                 AudioSwitch_Del(node);
   37541           1 :                 return;
   37542          77 :         case TAG_MPEG4_Background:
   37543          77 :                 Background_Del(node);
   37544          77 :                 return;
   37545             :         case TAG_MPEG4_Background2D:
   37546             :                 Background2D_Del(node);
   37547             :                 return;
   37548             :         case TAG_MPEG4_Billboard:
   37549             :                 Billboard_Del(node);
   37550             :                 return;
   37551             :         case TAG_MPEG4_Bitmap:
   37552             :                 Bitmap_Del(node);
   37553             :                 return;
   37554             :         case TAG_MPEG4_Box:
   37555             :                 Box_Del(node);
   37556             :                 return;
   37557             :         case TAG_MPEG4_Circle:
   37558             :                 Circle_Del(node);
   37559             :                 return;
   37560          68 :         case TAG_MPEG4_Collision:
   37561          68 :                 Collision_Del(node);
   37562          68 :                 return;
   37563             :         case TAG_MPEG4_Color:
   37564             :                 Color_Del(node);
   37565             :                 return;
   37566           7 :         case TAG_MPEG4_ColorInterpolator:
   37567           7 :                 ColorInterpolator_Del(node);
   37568           7 :                 return;
   37569          31 :         case TAG_MPEG4_CompositeTexture2D:
   37570          31 :                 CompositeTexture2D_Del(node);
   37571          31 :                 return;
   37572           3 :         case TAG_MPEG4_CompositeTexture3D:
   37573           3 :                 CompositeTexture3D_Del(node);
   37574           3 :                 return;
   37575             :         case TAG_MPEG4_Conditional:
   37576             :                 Conditional_Del(node);
   37577             :                 return;
   37578             :         case TAG_MPEG4_Cone:
   37579             :                 Cone_Del(node);
   37580             :                 return;
   37581             :         case TAG_MPEG4_Coordinate:
   37582             :                 Coordinate_Del(node);
   37583             :                 return;
   37584             :         case TAG_MPEG4_Coordinate2D:
   37585             :                 Coordinate2D_Del(node);
   37586             :                 return;
   37587           2 :         case TAG_MPEG4_CoordinateInterpolator:
   37588           2 :                 CoordinateInterpolator_Del(node);
   37589           2 :                 return;
   37590           3 :         case TAG_MPEG4_CoordinateInterpolator2D:
   37591           3 :                 CoordinateInterpolator2D_Del(node);
   37592           3 :                 return;
   37593        2574 :         case TAG_MPEG4_Curve2D:
   37594        2574 :                 Curve2D_Del(node);
   37595        2574 :                 return;
   37596             :         case TAG_MPEG4_Cylinder:
   37597             :                 Cylinder_Del(node);
   37598             :                 return;
   37599             :         case TAG_MPEG4_CylinderSensor:
   37600             :                 CylinderSensor_Del(node);
   37601             :                 return;
   37602             :         case TAG_MPEG4_DirectionalLight:
   37603             :                 DirectionalLight_Del(node);
   37604             :                 return;
   37605             :         case TAG_MPEG4_DiscSensor:
   37606             :                 DiscSensor_Del(node);
   37607             :                 return;
   37608          67 :         case TAG_MPEG4_ElevationGrid:
   37609          67 :                 ElevationGrid_Del(node);
   37610          67 :                 return;
   37611             :         case TAG_MPEG4_Expression:
   37612             :                 Expression_Del(node);
   37613             :                 return;
   37614          67 :         case TAG_MPEG4_Extrusion:
   37615          67 :                 Extrusion_Del(node);
   37616          67 :                 return;
   37617           1 :         case TAG_MPEG4_Face:
   37618           1 :                 Face_Del(node);
   37619           1 :                 return;
   37620           1 :         case TAG_MPEG4_FaceDefMesh:
   37621           1 :                 FaceDefMesh_Del(node);
   37622           1 :                 return;
   37623           1 :         case TAG_MPEG4_FaceDefTables:
   37624           1 :                 FaceDefTables_Del(node);
   37625           1 :                 return;
   37626             :         case TAG_MPEG4_FaceDefTransform:
   37627             :                 FaceDefTransform_Del(node);
   37628             :                 return;
   37629           1 :         case TAG_MPEG4_FAP:
   37630           1 :                 FAP_Del(node);
   37631           1 :                 return;
   37632           1 :         case TAG_MPEG4_FDP:
   37633           1 :                 FDP_Del(node);
   37634           1 :                 return;
   37635           1 :         case TAG_MPEG4_FIT:
   37636           1 :                 FIT_Del(node);
   37637           1 :                 return;
   37638             :         case TAG_MPEG4_Fog:
   37639             :                 Fog_Del(node);
   37640             :                 return;
   37641         573 :         case TAG_MPEG4_FontStyle:
   37642         573 :                 FontStyle_Del(node);
   37643         573 :                 return;
   37644         108 :         case TAG_MPEG4_Form:
   37645         108 :                 Form_Del(node);
   37646         108 :                 return;
   37647             :         case TAG_MPEG4_Group:
   37648             :                 Group_Del(node);
   37649             :                 return;
   37650             :         case TAG_MPEG4_ImageTexture:
   37651             :                 ImageTexture_Del(node);
   37652             :                 return;
   37653         199 :         case TAG_MPEG4_IndexedFaceSet:
   37654         199 :                 IndexedFaceSet_Del(node);
   37655         199 :                 return;
   37656         363 :         case TAG_MPEG4_IndexedFaceSet2D:
   37657         363 :                 IndexedFaceSet2D_Del(node);
   37658         363 :                 return;
   37659          68 :         case TAG_MPEG4_IndexedLineSet:
   37660          68 :                 IndexedLineSet_Del(node);
   37661          68 :                 return;
   37662         109 :         case TAG_MPEG4_IndexedLineSet2D:
   37663         109 :                 IndexedLineSet2D_Del(node);
   37664         109 :                 return;
   37665             :         case TAG_MPEG4_Inline:
   37666             :                 Inline_Del(node);
   37667             :                 return;
   37668           2 :         case TAG_MPEG4_LOD:
   37669           2 :                 LOD_Del(node);
   37670           2 :                 return;
   37671         444 :         case TAG_MPEG4_Layer2D:
   37672         444 :                 Layer2D_Del(node);
   37673         444 :                 return;
   37674          75 :         case TAG_MPEG4_Layer3D:
   37675          75 :                 Layer3D_Del(node);
   37676          75 :                 return;
   37677         230 :         case TAG_MPEG4_Layout:
   37678         230 :                 Layout_Del(node);
   37679         230 :                 return;
   37680             :         case TAG_MPEG4_LineProperties:
   37681             :                 LineProperties_Del(node);
   37682             :                 return;
   37683             :         case TAG_MPEG4_ListeningPoint:
   37684             :                 ListeningPoint_Del(node);
   37685             :                 return;
   37686             :         case TAG_MPEG4_Material:
   37687             :                 Material_Del(node);
   37688             :                 return;
   37689             :         case TAG_MPEG4_Material2D:
   37690             :                 Material2D_Del(node);
   37691             :                 return;
   37692             :         case TAG_MPEG4_MovieTexture:
   37693             :                 MovieTexture_Del(node);
   37694             :                 return;
   37695          93 :         case TAG_MPEG4_NavigationInfo:
   37696          93 :                 NavigationInfo_Del(node);
   37697          93 :                 return;
   37698             :         case TAG_MPEG4_Normal:
   37699             :                 Normal_Del(node);
   37700             :                 return;
   37701           2 :         case TAG_MPEG4_NormalInterpolator:
   37702           2 :                 NormalInterpolator_Del(node);
   37703           2 :                 return;
   37704        1525 :         case TAG_MPEG4_OrderedGroup:
   37705        1525 :                 OrderedGroup_Del(node);
   37706        1525 :                 return;
   37707          19 :         case TAG_MPEG4_OrientationInterpolator:
   37708          19 :                 OrientationInterpolator_Del(node);
   37709          19 :                 return;
   37710             :         case TAG_MPEG4_PixelTexture:
   37711             :                 PixelTexture_Del(node);
   37712             :                 return;
   37713             :         case TAG_MPEG4_PlaneSensor:
   37714             :                 PlaneSensor_Del(node);
   37715             :                 return;
   37716             :         case TAG_MPEG4_PlaneSensor2D:
   37717             :                 PlaneSensor2D_Del(node);
   37718             :                 return;
   37719             :         case TAG_MPEG4_PointLight:
   37720             :                 PointLight_Del(node);
   37721             :                 return;
   37722          67 :         case TAG_MPEG4_PointSet:
   37723          67 :                 PointSet_Del(node);
   37724          67 :                 return;
   37725          78 :         case TAG_MPEG4_PointSet2D:
   37726          78 :                 PointSet2D_Del(node);
   37727          78 :                 return;
   37728          12 :         case TAG_MPEG4_PositionInterpolator:
   37729          12 :                 PositionInterpolator_Del(node);
   37730          12 :                 return;
   37731         410 :         case TAG_MPEG4_PositionInterpolator2D:
   37732         410 :                 PositionInterpolator2D_Del(node);
   37733         410 :                 return;
   37734             :         case TAG_MPEG4_ProximitySensor2D:
   37735             :                 ProximitySensor2D_Del(node);
   37736             :                 return;
   37737             :         case TAG_MPEG4_ProximitySensor:
   37738             :                 ProximitySensor_Del(node);
   37739             :                 return;
   37740             :         case TAG_MPEG4_QuantizationParameter:
   37741             :                 QuantizationParameter_Del(node);
   37742             :                 return;
   37743             :         case TAG_MPEG4_Rectangle:
   37744             :                 Rectangle_Del(node);
   37745             :                 return;
   37746          71 :         case TAG_MPEG4_ScalarInterpolator:
   37747          71 :                 ScalarInterpolator_Del(node);
   37748          71 :                 return;
   37749             :         case TAG_MPEG4_Script:
   37750             :                 Script_Del(node);
   37751             :                 return;
   37752       11668 :         case TAG_MPEG4_Shape:
   37753       11668 :                 Shape_Del(node);
   37754       11668 :                 return;
   37755             :         case TAG_MPEG4_Sound:
   37756             :                 Sound_Del(node);
   37757             :                 return;
   37758             :         case TAG_MPEG4_Sound2D:
   37759             :                 Sound2D_Del(node);
   37760             :                 return;
   37761             :         case TAG_MPEG4_Sphere:
   37762             :                 Sphere_Del(node);
   37763             :                 return;
   37764             :         case TAG_MPEG4_SphereSensor:
   37765             :                 SphereSensor_Del(node);
   37766             :                 return;
   37767             :         case TAG_MPEG4_SpotLight:
   37768             :                 SpotLight_Del(node);
   37769             :                 return;
   37770             :         case TAG_MPEG4_Switch:
   37771             :                 Switch_Del(node);
   37772             :                 return;
   37773             :         case TAG_MPEG4_TermCap:
   37774             :                 TermCap_Del(node);
   37775             :                 return;
   37776        1103 :         case TAG_MPEG4_Text:
   37777        1103 :                 Text_Del(node);
   37778        1103 :                 return;
   37779             :         case TAG_MPEG4_TextureCoordinate:
   37780             :                 TextureCoordinate_Del(node);
   37781             :                 return;
   37782             :         case TAG_MPEG4_TextureTransform:
   37783             :                 TextureTransform_Del(node);
   37784             :                 return;
   37785             :         case TAG_MPEG4_TimeSensor:
   37786             :                 TimeSensor_Del(node);
   37787             :                 return;
   37788             :         case TAG_MPEG4_TouchSensor:
   37789             :                 TouchSensor_Del(node);
   37790             :                 return;
   37791             :         case TAG_MPEG4_Transform:
   37792             :                 Transform_Del(node);
   37793             :                 return;
   37794             :         case TAG_MPEG4_Transform2D:
   37795             :                 Transform2D_Del(node);
   37796             :                 return;
   37797        2035 :         case TAG_MPEG4_Valuator:
   37798        2035 :                 Valuator_Del(node);
   37799        2035 :                 return;
   37800             :         case TAG_MPEG4_Viewpoint:
   37801             :                 Viewpoint_Del(node);
   37802             :                 return;
   37803             :         case TAG_MPEG4_VisibilitySensor:
   37804             :                 VisibilitySensor_Del(node);
   37805             :                 return;
   37806             :         case TAG_MPEG4_Viseme:
   37807             :                 Viseme_Del(node);
   37808             :                 return;
   37809         511 :         case TAG_MPEG4_WorldInfo:
   37810         511 :                 WorldInfo_Del(node);
   37811         511 :                 return;
   37812           1 :         case TAG_MPEG4_AcousticMaterial:
   37813           1 :                 AcousticMaterial_Del(node);
   37814           1 :                 return;
   37815           1 :         case TAG_MPEG4_AcousticScene:
   37816           1 :                 AcousticScene_Del(node);
   37817           1 :                 return;
   37818           1 :         case TAG_MPEG4_ApplicationWindow:
   37819           1 :                 ApplicationWindow_Del(node);
   37820           1 :                 return;
   37821             :         case TAG_MPEG4_BAP:
   37822             :                 BAP_Del(node);
   37823             :                 return;
   37824           1 :         case TAG_MPEG4_BDP:
   37825           1 :                 BDP_Del(node);
   37826           1 :                 return;
   37827           1 :         case TAG_MPEG4_Body:
   37828           1 :                 Body_Del(node);
   37829           1 :                 return;
   37830           1 :         case TAG_MPEG4_BodyDefTable:
   37831           1 :                 BodyDefTable_Del(node);
   37832           1 :                 return;
   37833           1 :         case TAG_MPEG4_BodySegmentConnectionHint:
   37834           1 :                 BodySegmentConnectionHint_Del(node);
   37835           1 :                 return;
   37836           1 :         case TAG_MPEG4_DirectiveSound:
   37837           1 :                 DirectiveSound_Del(node);
   37838           1 :                 return;
   37839             :         case TAG_MPEG4_Hierarchical3DMesh:
   37840             :                 Hierarchical3DMesh_Del(node);
   37841             :                 return;
   37842             :         case TAG_MPEG4_MaterialKey:
   37843             :                 MaterialKey_Del(node);
   37844             :                 return;
   37845           1 :         case TAG_MPEG4_PerceptualParameters:
   37846           1 :                 PerceptualParameters_Del(node);
   37847           1 :                 return;
   37848           1 :         case TAG_MPEG4_TemporalTransform:
   37849           1 :                 TemporalTransform_Del(node);
   37850           1 :                 return;
   37851           1 :         case TAG_MPEG4_TemporalGroup:
   37852           1 :                 TemporalGroup_Del(node);
   37853           1 :                 return;
   37854          23 :         case TAG_MPEG4_ServerCommand:
   37855          23 :                 ServerCommand_Del(node);
   37856          23 :                 return;
   37857         134 :         case TAG_MPEG4_InputSensor:
   37858         134 :                 InputSensor_Del(node);
   37859         134 :                 return;
   37860           1 :         case TAG_MPEG4_MatteTexture:
   37861           1 :                 MatteTexture_Del(node);
   37862           1 :                 return;
   37863             :         case TAG_MPEG4_MediaBuffer:
   37864             :                 MediaBuffer_Del(node);
   37865             :                 return;
   37866             :         case TAG_MPEG4_MediaControl:
   37867             :                 MediaControl_Del(node);
   37868             :                 return;
   37869          17 :         case TAG_MPEG4_MediaSensor:
   37870          17 :                 MediaSensor_Del(node);
   37871          17 :                 return;
   37872          67 :         case TAG_MPEG4_BitWrapper:
   37873          67 :                 BitWrapper_Del(node);
   37874          67 :                 return;
   37875           2 :         case TAG_MPEG4_CoordinateInterpolator4D:
   37876           2 :                 CoordinateInterpolator4D_Del(node);
   37877           2 :                 return;
   37878             :         case TAG_MPEG4_DepthImage:
   37879             :                 DepthImage_Del(node);
   37880             :                 return;
   37881           1 :         case TAG_MPEG4_FFD:
   37882           1 :                 FFD_Del(node);
   37883           1 :                 return;
   37884           1 :         case TAG_MPEG4_Implicit:
   37885           1 :                 Implicit_Del(node);
   37886           1 :                 return;
   37887           1 :         case TAG_MPEG4_XXLFM_Appearance:
   37888           1 :                 XXLFM_Appearance_Del(node);
   37889           1 :                 return;
   37890           1 :         case TAG_MPEG4_XXLFM_BlendList:
   37891           1 :                 XXLFM_BlendList_Del(node);
   37892           1 :                 return;
   37893           1 :         case TAG_MPEG4_XXLFM_FrameList:
   37894           1 :                 XXLFM_FrameList_Del(node);
   37895           1 :                 return;
   37896           1 :         case TAG_MPEG4_XXLFM_LightMap:
   37897           1 :                 XXLFM_LightMap_Del(node);
   37898           1 :                 return;
   37899           1 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   37900           1 :                 XXLFM_SurfaceMapList_Del(node);
   37901           1 :                 return;
   37902           1 :         case TAG_MPEG4_XXLFM_ViewMapList:
   37903           1 :                 XXLFM_ViewMapList_Del(node);
   37904           1 :                 return;
   37905           1 :         case TAG_MPEG4_MeshGrid:
   37906           1 :                 MeshGrid_Del(node);
   37907           1 :                 return;
   37908          67 :         case TAG_MPEG4_NonLinearDeformer:
   37909          67 :                 NonLinearDeformer_Del(node);
   37910          67 :                 return;
   37911           1 :         case TAG_MPEG4_NurbsCurve:
   37912           1 :                 NurbsCurve_Del(node);
   37913           1 :                 return;
   37914           1 :         case TAG_MPEG4_NurbsCurve2D:
   37915           1 :                 NurbsCurve2D_Del(node);
   37916           1 :                 return;
   37917           1 :         case TAG_MPEG4_NurbsSurface:
   37918           1 :                 NurbsSurface_Del(node);
   37919           1 :                 return;
   37920           1 :         case TAG_MPEG4_OctreeImage:
   37921           1 :                 OctreeImage_Del(node);
   37922           1 :                 return;
   37923           1 :         case TAG_MPEG4_XXParticles:
   37924           1 :                 XXParticles_Del(node);
   37925           1 :                 return;
   37926             :         case TAG_MPEG4_XXParticleInitBox:
   37927             :                 XXParticleInitBox_Del(node);
   37928             :                 return;
   37929             :         case TAG_MPEG4_XXPlanarObstacle:
   37930             :                 XXPlanarObstacle_Del(node);
   37931             :                 return;
   37932             :         case TAG_MPEG4_XXPointAttractor:
   37933             :                 XXPointAttractor_Del(node);
   37934             :                 return;
   37935           1 :         case TAG_MPEG4_PointTexture:
   37936           1 :                 PointTexture_Del(node);
   37937           1 :                 return;
   37938           2 :         case TAG_MPEG4_PositionAnimator:
   37939           2 :                 PositionAnimator_Del(node);
   37940           2 :                 return;
   37941           3 :         case TAG_MPEG4_PositionAnimator2D:
   37942           3 :                 PositionAnimator2D_Del(node);
   37943           3 :                 return;
   37944           2 :         case TAG_MPEG4_PositionInterpolator4D:
   37945           2 :                 PositionInterpolator4D_Del(node);
   37946           2 :                 return;
   37947           1 :         case TAG_MPEG4_ProceduralTexture:
   37948           1 :                 ProceduralTexture_Del(node);
   37949           1 :                 return;
   37950             :         case TAG_MPEG4_Quadric:
   37951             :                 Quadric_Del(node);
   37952             :                 return;
   37953           1 :         case TAG_MPEG4_SBBone:
   37954           1 :                 SBBone_Del(node);
   37955           1 :                 return;
   37956           1 :         case TAG_MPEG4_SBMuscle:
   37957           1 :                 SBMuscle_Del(node);
   37958           1 :                 return;
   37959           1 :         case TAG_MPEG4_SBSegment:
   37960           1 :                 SBSegment_Del(node);
   37961           1 :                 return;
   37962           1 :         case TAG_MPEG4_SBSite:
   37963           1 :                 SBSite_Del(node);
   37964           1 :                 return;
   37965           1 :         case TAG_MPEG4_SBSkinnedModel:
   37966           1 :                 SBSkinnedModel_Del(node);
   37967           1 :                 return;
   37968           1 :         case TAG_MPEG4_SBVCAnimation:
   37969           1 :                 SBVCAnimation_Del(node);
   37970           1 :                 return;
   37971           2 :         case TAG_MPEG4_ScalarAnimator:
   37972           2 :                 ScalarAnimator_Del(node);
   37973           2 :                 return;
   37974           1 :         case TAG_MPEG4_SimpleTexture:
   37975           1 :                 SimpleTexture_Del(node);
   37976           1 :                 return;
   37977           1 :         case TAG_MPEG4_SolidRep:
   37978           1 :                 SolidRep_Del(node);
   37979           1 :                 return;
   37980           1 :         case TAG_MPEG4_SubdivisionSurface:
   37981           1 :                 SubdivisionSurface_Del(node);
   37982           1 :                 return;
   37983             :         case TAG_MPEG4_SubdivSurfaceSector:
   37984             :                 SubdivSurfaceSector_Del(node);
   37985             :                 return;
   37986             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   37987             :                 WaveletSubdivisionSurface_Del(node);
   37988             :                 return;
   37989          68 :         case TAG_MPEG4_Clipper2D:
   37990          68 :                 Clipper2D_Del(node);
   37991          68 :                 return;
   37992             :         case TAG_MPEG4_ColorTransform:
   37993             :                 ColorTransform_Del(node);
   37994             :                 return;
   37995             :         case TAG_MPEG4_Ellipse:
   37996             :                 Ellipse_Del(node);
   37997             :                 return;
   37998         338 :         case TAG_MPEG4_LinearGradient:
   37999         338 :                 LinearGradient_Del(node);
   38000         338 :                 return;
   38001          68 :         case TAG_MPEG4_PathLayout:
   38002          68 :                 PathLayout_Del(node);
   38003          68 :                 return;
   38004         497 :         case TAG_MPEG4_RadialGradient:
   38005         497 :                 RadialGradient_Del(node);
   38006         497 :                 return;
   38007           1 :         case TAG_MPEG4_SynthesizedTexture:
   38008           1 :                 SynthesizedTexture_Del(node);
   38009           1 :                 return;
   38010             :         case TAG_MPEG4_TransformMatrix2D:
   38011             :                 TransformMatrix2D_Del(node);
   38012             :                 return;
   38013         106 :         case TAG_MPEG4_Viewport:
   38014         106 :                 Viewport_Del(node);
   38015         106 :                 return;
   38016         834 :         case TAG_MPEG4_XCurve2D:
   38017         834 :                 XCurve2D_Del(node);
   38018         834 :                 return;
   38019           1 :         case TAG_MPEG4_XFontStyle:
   38020           1 :                 XFontStyle_Del(node);
   38021           1 :                 return;
   38022         504 :         case TAG_MPEG4_XLineProperties:
   38023         504 :                 XLineProperties_Del(node);
   38024         504 :                 return;
   38025           1 :         case TAG_MPEG4_AdvancedAudioBuffer:
   38026           1 :                 AdvancedAudioBuffer_Del(node);
   38027           1 :                 return;
   38028           1 :         case TAG_MPEG4_AudioChannelConfig:
   38029           1 :                 AudioChannelConfig_Del(node);
   38030           1 :                 return;
   38031             :         case TAG_MPEG4_DepthImageV2:
   38032             :                 DepthImageV2_Del(node);
   38033             :                 return;
   38034           1 :         case TAG_MPEG4_MorphShape:
   38035           1 :                 MorphShape_Del(node);
   38036           1 :                 return;
   38037           1 :         case TAG_MPEG4_MultiTexture:
   38038           1 :                 MultiTexture_Del(node);
   38039           1 :                 return;
   38040           1 :         case TAG_MPEG4_PointTextureV2:
   38041           1 :                 PointTextureV2_Del(node);
   38042           1 :                 return;
   38043           1 :         case TAG_MPEG4_SBVCAnimationV2:
   38044           1 :                 SBVCAnimationV2_Del(node);
   38045           1 :                 return;
   38046           1 :         case TAG_MPEG4_SimpleTextureV2:
   38047           1 :                 SimpleTextureV2_Del(node);
   38048           1 :                 return;
   38049             :         case TAG_MPEG4_SurroundingSound:
   38050             :                 SurroundingSound_Del(node);
   38051             :                 return;
   38052             :         case TAG_MPEG4_Transform3DAudio:
   38053             :                 Transform3DAudio_Del(node);
   38054             :                 return;
   38055          23 :         case TAG_MPEG4_WideSound:
   38056          23 :                 WideSound_Del(node);
   38057          23 :                 return;
   38058          23 :         case TAG_MPEG4_ScoreShape:
   38059          23 :                 ScoreShape_Del(node);
   38060          23 :                 return;
   38061           1 :         case TAG_MPEG4_MusicScore:
   38062           1 :                 MusicScore_Del(node);
   38063           1 :                 return;
   38064             :         case TAG_MPEG4_FootPrintSetNode:
   38065             :                 FootPrintSetNode_Del(node);
   38066             :                 return;
   38067             :         case TAG_MPEG4_FootPrintNode:
   38068             :                 FootPrintNode_Del(node);
   38069             :                 return;
   38070           1 :         case TAG_MPEG4_BuildingPartNode:
   38071           1 :                 BuildingPartNode_Del(node);
   38072           1 :                 return;
   38073           1 :         case TAG_MPEG4_RoofNode:
   38074           1 :                 RoofNode_Del(node);
   38075           1 :                 return;
   38076           1 :         case TAG_MPEG4_FacadeNode:
   38077           1 :                 FacadeNode_Del(node);
   38078           1 :                 return;
   38079             :         case TAG_MPEG4_Shadow:
   38080             :                 Shadow_Del(node);
   38081             :                 return;
   38082          64 :         case TAG_MPEG4_CacheTexture:
   38083          64 :                 CacheTexture_Del(node);
   38084          64 :                 return;
   38085          91 :         case TAG_MPEG4_EnvironmentTest:
   38086          91 :                 EnvironmentTest_Del(node);
   38087          91 :                 return;
   38088           5 :         case TAG_MPEG4_KeyNavigator:
   38089           5 :                 KeyNavigator_Del(node);
   38090           5 :                 return;
   38091           1 :         case TAG_MPEG4_SpacePartition:
   38092           1 :                 SpacePartition_Del(node);
   38093           1 :                 return;
   38094           2 :         case TAG_MPEG4_Storage:
   38095           2 :                 Storage_Del(node);
   38096           2 :                 return;
   38097             :         default:
   38098             :                 return;
   38099             :         }
   38100             : }
   38101             : 
   38102       78440 : u32 gf_sg_mpeg4_node_get_field_count(GF_Node *node, u8 code_mode)
   38103             : {
   38104       78440 :         switch (node->sgprivate->tag) {
   38105          25 :         case TAG_MPEG4_Anchor:
   38106             :                 return Anchor_get_field_count(node, code_mode);
   38107          86 :         case TAG_MPEG4_AnimationStream:
   38108             :                 return AnimationStream_get_field_count(node, code_mode);
   38109        5508 :         case TAG_MPEG4_Appearance:
   38110             :                 return Appearance_get_field_count(node, code_mode);
   38111          52 :         case TAG_MPEG4_AudioBuffer:
   38112             :                 return AudioBuffer_get_field_count(node, code_mode);
   38113          58 :         case TAG_MPEG4_AudioClip:
   38114             :                 return AudioClip_get_field_count(node, code_mode);
   38115           6 :         case TAG_MPEG4_AudioDelay:
   38116             :                 return AudioDelay_get_field_count(node, code_mode);
   38117           6 :         case TAG_MPEG4_AudioFX:
   38118             :                 return AudioFX_get_field_count(node, code_mode);
   38119           6 :         case TAG_MPEG4_AudioMix:
   38120             :                 return AudioMix_get_field_count(node, code_mode);
   38121          60 :         case TAG_MPEG4_AudioSource:
   38122             :                 return AudioSource_get_field_count(node, code_mode);
   38123           6 :         case TAG_MPEG4_AudioSwitch:
   38124             :                 return AudioSwitch_get_field_count(node, code_mode);
   38125          82 :         case TAG_MPEG4_Background:
   38126             :                 return Background_get_field_count(node, code_mode);
   38127         424 :         case TAG_MPEG4_Background2D:
   38128             :                 return Background2D_get_field_count(node, code_mode);
   38129           6 :         case TAG_MPEG4_Billboard:
   38130             :                 return Billboard_get_field_count(node, code_mode);
   38131          96 :         case TAG_MPEG4_Bitmap:
   38132          96 :                 return Bitmap_get_field_count(node, code_mode);
   38133          77 :         case TAG_MPEG4_Box:
   38134             :                 return Box_get_field_count(node, code_mode);
   38135        1635 :         case TAG_MPEG4_Circle:
   38136        1635 :                 return Circle_get_field_count(node, code_mode);
   38137          76 :         case TAG_MPEG4_Collision:
   38138             :                 return Collision_get_field_count(node, code_mode);
   38139         146 :         case TAG_MPEG4_Color:
   38140         146 :                 return Color_get_field_count(node, code_mode);
   38141           6 :         case TAG_MPEG4_ColorInterpolator:
   38142             :                 return ColorInterpolator_get_field_count(node, code_mode);
   38143         594 :         case TAG_MPEG4_CompositeTexture2D:
   38144             :                 return CompositeTexture2D_get_field_count(node, code_mode);
   38145           6 :         case TAG_MPEG4_CompositeTexture3D:
   38146             :                 return CompositeTexture3D_get_field_count(node, code_mode);
   38147         803 :         case TAG_MPEG4_Conditional:
   38148             :                 return Conditional_get_field_count(node, code_mode);
   38149          76 :         case TAG_MPEG4_Cone:
   38150             :                 return Cone_get_field_count(node, code_mode);
   38151         216 :         case TAG_MPEG4_Coordinate:
   38152         216 :                 return Coordinate_get_field_count(node, code_mode);
   38153        4276 :         case TAG_MPEG4_Coordinate2D:
   38154        4276 :                 return Coordinate2D_get_field_count(node, code_mode);
   38155           6 :         case TAG_MPEG4_CoordinateInterpolator:
   38156             :                 return CoordinateInterpolator_get_field_count(node, code_mode);
   38157           6 :         case TAG_MPEG4_CoordinateInterpolator2D:
   38158             :                 return CoordinateInterpolator2D_get_field_count(node, code_mode);
   38159        2420 :         case TAG_MPEG4_Curve2D:
   38160             :                 return Curve2D_get_field_count(node, code_mode);
   38161          76 :         case TAG_MPEG4_Cylinder:
   38162             :                 return Cylinder_get_field_count(node, code_mode);
   38163          76 :         case TAG_MPEG4_CylinderSensor:
   38164             :                 return CylinderSensor_get_field_count(node, code_mode);
   38165           6 :         case TAG_MPEG4_DirectionalLight:
   38166             :                 return DirectionalLight_get_field_count(node, code_mode);
   38167          76 :         case TAG_MPEG4_DiscSensor:
   38168             :                 return DiscSensor_get_field_count(node, code_mode);
   38169          76 :         case TAG_MPEG4_ElevationGrid:
   38170             :                 return ElevationGrid_get_field_count(node, code_mode);
   38171           6 :         case TAG_MPEG4_Expression:
   38172             :                 return Expression_get_field_count(node, code_mode);
   38173          76 :         case TAG_MPEG4_Extrusion:
   38174             :                 return Extrusion_get_field_count(node, code_mode);
   38175           6 :         case TAG_MPEG4_Face:
   38176             :                 return Face_get_field_count(node, code_mode);
   38177           6 :         case TAG_MPEG4_FaceDefMesh:
   38178             :                 return FaceDefMesh_get_field_count(node, code_mode);
   38179           6 :         case TAG_MPEG4_FaceDefTables:
   38180             :                 return FaceDefTables_get_field_count(node, code_mode);
   38181           6 :         case TAG_MPEG4_FaceDefTransform:
   38182             :                 return FaceDefTransform_get_field_count(node, code_mode);
   38183           6 :         case TAG_MPEG4_FAP:
   38184             :                 return FAP_get_field_count(node, code_mode);
   38185           6 :         case TAG_MPEG4_FDP:
   38186             :                 return FDP_get_field_count(node, code_mode);
   38187           6 :         case TAG_MPEG4_FIT:
   38188             :                 return FIT_get_field_count(node, code_mode);
   38189           6 :         case TAG_MPEG4_Fog:
   38190             :                 return Fog_get_field_count(node, code_mode);
   38191         160 :         case TAG_MPEG4_FontStyle:
   38192             :                 return FontStyle_get_field_count(node, code_mode);
   38193          76 :         case TAG_MPEG4_Form:
   38194             :                 return Form_get_field_count(node, code_mode);
   38195         162 :         case TAG_MPEG4_Group:
   38196             :                 return Group_get_field_count(node, code_mode);
   38197         752 :         case TAG_MPEG4_ImageTexture:
   38198             :                 return ImageTexture_get_field_count(node, code_mode);
   38199         216 :         case TAG_MPEG4_IndexedFaceSet:
   38200             :                 return IndexedFaceSet_get_field_count(node, code_mode);
   38201         305 :         case TAG_MPEG4_IndexedFaceSet2D:
   38202             :                 return IndexedFaceSet2D_get_field_count(node, code_mode);
   38203          76 :         case TAG_MPEG4_IndexedLineSet:
   38204             :                 return IndexedLineSet_get_field_count(node, code_mode);
   38205          76 :         case TAG_MPEG4_IndexedLineSet2D:
   38206             :                 return IndexedLineSet2D_get_field_count(node, code_mode);
   38207           6 :         case TAG_MPEG4_Inline:
   38208             :                 return Inline_get_field_count(node, code_mode);
   38209           6 :         case TAG_MPEG4_LOD:
   38210             :                 return LOD_get_field_count(node, code_mode);
   38211          76 :         case TAG_MPEG4_Layer2D:
   38212             :                 return Layer2D_get_field_count(node, code_mode);
   38213          76 :         case TAG_MPEG4_Layer3D:
   38214             :                 return Layer3D_get_field_count(node, code_mode);
   38215          76 :         case TAG_MPEG4_Layout:
   38216             :                 return Layout_get_field_count(node, code_mode);
   38217        1562 :         case TAG_MPEG4_LineProperties:
   38218             :                 return LineProperties_get_field_count(node, code_mode);
   38219           6 :         case TAG_MPEG4_ListeningPoint:
   38220             :                 return ListeningPoint_get_field_count(node, code_mode);
   38221        1163 :         case TAG_MPEG4_Material:
   38222        1163 :                 return Material_get_field_count(node, code_mode);
   38223        9991 :         case TAG_MPEG4_Material2D:
   38224             :                 return Material2D_get_field_count(node, code_mode);
   38225          89 :         case TAG_MPEG4_MovieTexture:
   38226             :                 return MovieTexture_get_field_count(node, code_mode);
   38227          82 :         case TAG_MPEG4_NavigationInfo:
   38228             :                 return NavigationInfo_get_field_count(node, code_mode);
   38229          76 :         case TAG_MPEG4_Normal:
   38230          76 :                 return Normal_get_field_count(node, code_mode);
   38231           6 :         case TAG_MPEG4_NormalInterpolator:
   38232             :                 return NormalInterpolator_get_field_count(node, code_mode);
   38233        1078 :         case TAG_MPEG4_OrderedGroup:
   38234             :                 return OrderedGroup_get_field_count(node, code_mode);
   38235           6 :         case TAG_MPEG4_OrientationInterpolator:
   38236             :                 return OrientationInterpolator_get_field_count(node, code_mode);
   38237          76 :         case TAG_MPEG4_PixelTexture:
   38238             :                 return PixelTexture_get_field_count(node, code_mode);
   38239          76 :         case TAG_MPEG4_PlaneSensor:
   38240             :                 return PlaneSensor_get_field_count(node, code_mode);
   38241          86 :         case TAG_MPEG4_PlaneSensor2D:
   38242             :                 return PlaneSensor2D_get_field_count(node, code_mode);
   38243           6 :         case TAG_MPEG4_PointLight:
   38244             :                 return PointLight_get_field_count(node, code_mode);
   38245          76 :         case TAG_MPEG4_PointSet:
   38246             :                 return PointSet_get_field_count(node, code_mode);
   38247          76 :         case TAG_MPEG4_PointSet2D:
   38248             :                 return PointSet2D_get_field_count(node, code_mode);
   38249           6 :         case TAG_MPEG4_PositionInterpolator:
   38250             :                 return PositionInterpolator_get_field_count(node, code_mode);
   38251         367 :         case TAG_MPEG4_PositionInterpolator2D:
   38252             :                 return PositionInterpolator2D_get_field_count(node, code_mode);
   38253          76 :         case TAG_MPEG4_ProximitySensor2D:
   38254             :                 return ProximitySensor2D_get_field_count(node, code_mode);
   38255           6 :         case TAG_MPEG4_ProximitySensor:
   38256             :                 return ProximitySensor_get_field_count(node, code_mode);
   38257         236 :         case TAG_MPEG4_QuantizationParameter:
   38258             :                 return QuantizationParameter_get_field_count(node, code_mode);
   38259         239 :         case TAG_MPEG4_Rectangle:
   38260         239 :                 return Rectangle_get_field_count(node, code_mode);
   38261          10 :         case TAG_MPEG4_ScalarInterpolator:
   38262             :                 return ScalarInterpolator_get_field_count(node, code_mode);
   38263           0 :         case TAG_MPEG4_Script:
   38264             :                 return Script_get_field_count(node, code_mode);
   38265        9897 :         case TAG_MPEG4_Shape:
   38266             :                 return Shape_get_field_count(node, code_mode);
   38267           6 :         case TAG_MPEG4_Sound:
   38268             :                 return Sound_get_field_count(node, code_mode);
   38269          64 :         case TAG_MPEG4_Sound2D:
   38270             :                 return Sound2D_get_field_count(node, code_mode);
   38271          76 :         case TAG_MPEG4_Sphere:
   38272             :                 return Sphere_get_field_count(node, code_mode);
   38273          76 :         case TAG_MPEG4_SphereSensor:
   38274             :                 return SphereSensor_get_field_count(node, code_mode);
   38275           6 :         case TAG_MPEG4_SpotLight:
   38276             :                 return SpotLight_get_field_count(node, code_mode);
   38277        1495 :         case TAG_MPEG4_Switch:
   38278             :                 return Switch_get_field_count(node, code_mode);
   38279           6 :         case TAG_MPEG4_TermCap:
   38280             :                 return TermCap_get_field_count(node, code_mode);
   38281         170 :         case TAG_MPEG4_Text:
   38282             :                 return Text_get_field_count(node, code_mode);
   38283           6 :         case TAG_MPEG4_TextureCoordinate:
   38284           6 :                 return TextureCoordinate_get_field_count(node, code_mode);
   38285         370 :         case TAG_MPEG4_TextureTransform:
   38286         370 :                 return TextureTransform_get_field_count(node, code_mode);
   38287         434 :         case TAG_MPEG4_TimeSensor:
   38288             :                 return TimeSensor_get_field_count(node, code_mode);
   38289        1232 :         case TAG_MPEG4_TouchSensor:
   38290             :                 return TouchSensor_get_field_count(node, code_mode);
   38291         217 :         case TAG_MPEG4_Transform:
   38292             :                 return Transform_get_field_count(node, code_mode);
   38293       12889 :         case TAG_MPEG4_Transform2D:
   38294             :                 return Transform2D_get_field_count(node, code_mode);
   38295        2148 :         case TAG_MPEG4_Valuator:
   38296             :                 return Valuator_get_field_count(node, code_mode);
   38297          76 :         case TAG_MPEG4_Viewpoint:
   38298             :                 return Viewpoint_get_field_count(node, code_mode);
   38299          82 :         case TAG_MPEG4_VisibilitySensor:
   38300             :                 return VisibilitySensor_get_field_count(node, code_mode);
   38301           6 :         case TAG_MPEG4_Viseme:
   38302             :                 return Viseme_get_field_count(node, code_mode);
   38303         173 :         case TAG_MPEG4_WorldInfo:
   38304             :                 return WorldInfo_get_field_count(node, code_mode);
   38305           6 :         case TAG_MPEG4_AcousticMaterial:
   38306             :                 return AcousticMaterial_get_field_count(node, code_mode);
   38307           6 :         case TAG_MPEG4_AcousticScene:
   38308             :                 return AcousticScene_get_field_count(node, code_mode);
   38309           6 :         case TAG_MPEG4_ApplicationWindow:
   38310             :                 return ApplicationWindow_get_field_count(node, code_mode);
   38311           6 :         case TAG_MPEG4_BAP:
   38312             :                 return BAP_get_field_count(node, code_mode);
   38313           6 :         case TAG_MPEG4_BDP:
   38314             :                 return BDP_get_field_count(node, code_mode);
   38315           6 :         case TAG_MPEG4_Body:
   38316             :                 return Body_get_field_count(node, code_mode);
   38317           6 :         case TAG_MPEG4_BodyDefTable:
   38318             :                 return BodyDefTable_get_field_count(node, code_mode);
   38319           6 :         case TAG_MPEG4_BodySegmentConnectionHint:
   38320             :                 return BodySegmentConnectionHint_get_field_count(node, code_mode);
   38321           6 :         case TAG_MPEG4_DirectiveSound:
   38322             :                 return DirectiveSound_get_field_count(node, code_mode);
   38323           6 :         case TAG_MPEG4_Hierarchical3DMesh:
   38324             :                 return Hierarchical3DMesh_get_field_count(node, code_mode);
   38325          31 :         case TAG_MPEG4_MaterialKey:
   38326             :                 return MaterialKey_get_field_count(node, code_mode);
   38327           6 :         case TAG_MPEG4_PerceptualParameters:
   38328             :                 return PerceptualParameters_get_field_count(node, code_mode);
   38329           6 :         case TAG_MPEG4_TemporalTransform:
   38330             :                 return TemporalTransform_get_field_count(node, code_mode);
   38331           6 :         case TAG_MPEG4_TemporalGroup:
   38332             :                 return TemporalGroup_get_field_count(node, code_mode);
   38333          30 :         case TAG_MPEG4_ServerCommand:
   38334             :                 return ServerCommand_get_field_count(node, code_mode);
   38335         146 :         case TAG_MPEG4_InputSensor:
   38336             :                 return InputSensor_get_field_count(node, code_mode);
   38337           6 :         case TAG_MPEG4_MatteTexture:
   38338             :                 return MatteTexture_get_field_count(node, code_mode);
   38339           6 :         case TAG_MPEG4_MediaBuffer:
   38340             :                 return MediaBuffer_get_field_count(node, code_mode);
   38341         188 :         case TAG_MPEG4_MediaControl:
   38342             :                 return MediaControl_get_field_count(node, code_mode);
   38343           6 :         case TAG_MPEG4_MediaSensor:
   38344             :                 return MediaSensor_get_field_count(node, code_mode);
   38345          78 :         case TAG_MPEG4_BitWrapper:
   38346             :                 return BitWrapper_get_field_count(node, code_mode);
   38347           6 :         case TAG_MPEG4_CoordinateInterpolator4D:
   38348             :                 return CoordinateInterpolator4D_get_field_count(node, code_mode);
   38349           6 :         case TAG_MPEG4_DepthImage:
   38350             :                 return DepthImage_get_field_count(node, code_mode);
   38351           6 :         case TAG_MPEG4_FFD:
   38352             :                 return FFD_get_field_count(node, code_mode);
   38353           6 :         case TAG_MPEG4_Implicit:
   38354             :                 return Implicit_get_field_count(node, code_mode);
   38355           6 :         case TAG_MPEG4_XXLFM_Appearance:
   38356             :                 return XXLFM_Appearance_get_field_count(node, code_mode);
   38357           6 :         case TAG_MPEG4_XXLFM_BlendList:
   38358             :                 return XXLFM_BlendList_get_field_count(node, code_mode);
   38359           6 :         case TAG_MPEG4_XXLFM_FrameList:
   38360             :                 return XXLFM_FrameList_get_field_count(node, code_mode);
   38361           6 :         case TAG_MPEG4_XXLFM_LightMap:
   38362             :                 return XXLFM_LightMap_get_field_count(node, code_mode);
   38363           6 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   38364             :                 return XXLFM_SurfaceMapList_get_field_count(node, code_mode);
   38365           6 :         case TAG_MPEG4_XXLFM_ViewMapList:
   38366             :                 return XXLFM_ViewMapList_get_field_count(node, code_mode);
   38367           6 :         case TAG_MPEG4_MeshGrid:
   38368             :                 return MeshGrid_get_field_count(node, code_mode);
   38369          76 :         case TAG_MPEG4_NonLinearDeformer:
   38370             :                 return NonLinearDeformer_get_field_count(node, code_mode);
   38371           6 :         case TAG_MPEG4_NurbsCurve:
   38372             :                 return NurbsCurve_get_field_count(node, code_mode);
   38373           6 :         case TAG_MPEG4_NurbsCurve2D:
   38374             :                 return NurbsCurve2D_get_field_count(node, code_mode);
   38375           6 :         case TAG_MPEG4_NurbsSurface:
   38376             :                 return NurbsSurface_get_field_count(node, code_mode);
   38377           6 :         case TAG_MPEG4_OctreeImage:
   38378             :                 return OctreeImage_get_field_count(node, code_mode);
   38379           6 :         case TAG_MPEG4_XXParticles:
   38380             :                 return XXParticles_get_field_count(node, code_mode);
   38381           6 :         case TAG_MPEG4_XXParticleInitBox:
   38382             :                 return XXParticleInitBox_get_field_count(node, code_mode);
   38383           6 :         case TAG_MPEG4_XXPlanarObstacle:
   38384             :                 return XXPlanarObstacle_get_field_count(node, code_mode);
   38385           6 :         case TAG_MPEG4_XXPointAttractor:
   38386             :                 return XXPointAttractor_get_field_count(node, code_mode);
   38387           6 :         case TAG_MPEG4_PointTexture:
   38388             :                 return PointTexture_get_field_count(node, code_mode);
   38389           6 :         case TAG_MPEG4_PositionAnimator:
   38390             :                 return PositionAnimator_get_field_count(node, code_mode);
   38391           6 :         case TAG_MPEG4_PositionAnimator2D:
   38392             :                 return PositionAnimator2D_get_field_count(node, code_mode);
   38393           6 :         case TAG_MPEG4_PositionInterpolator4D:
   38394             :                 return PositionInterpolator4D_get_field_count(node, code_mode);
   38395           6 :         case TAG_MPEG4_ProceduralTexture:
   38396             :                 return ProceduralTexture_get_field_count(node, code_mode);
   38397           6 :         case TAG_MPEG4_Quadric:
   38398             :                 return Quadric_get_field_count(node, code_mode);
   38399           6 :         case TAG_MPEG4_SBBone:
   38400             :                 return SBBone_get_field_count(node, code_mode);
   38401           6 :         case TAG_MPEG4_SBMuscle:
   38402             :                 return SBMuscle_get_field_count(node, code_mode);
   38403           6 :         case TAG_MPEG4_SBSegment:
   38404             :                 return SBSegment_get_field_count(node, code_mode);
   38405           6 :         case TAG_MPEG4_SBSite:
   38406             :                 return SBSite_get_field_count(node, code_mode);
   38407           6 :         case TAG_MPEG4_SBSkinnedModel:
   38408             :                 return SBSkinnedModel_get_field_count(node, code_mode);
   38409           6 :         case TAG_MPEG4_SBVCAnimation:
   38410             :                 return SBVCAnimation_get_field_count(node, code_mode);
   38411           6 :         case TAG_MPEG4_ScalarAnimator:
   38412             :                 return ScalarAnimator_get_field_count(node, code_mode);
   38413           6 :         case TAG_MPEG4_SimpleTexture:
   38414             :                 return SimpleTexture_get_field_count(node, code_mode);
   38415           6 :         case TAG_MPEG4_SolidRep:
   38416             :                 return SolidRep_get_field_count(node, code_mode);
   38417           6 :         case TAG_MPEG4_SubdivisionSurface:
   38418             :                 return SubdivisionSurface_get_field_count(node, code_mode);
   38419           6 :         case TAG_MPEG4_SubdivSurfaceSector:
   38420             :                 return SubdivSurfaceSector_get_field_count(node, code_mode);
   38421           6 :         case TAG_MPEG4_WaveletSubdivisionSurface:
   38422             :                 return WaveletSubdivisionSurface_get_field_count(node, code_mode);
   38423          76 :         case TAG_MPEG4_Clipper2D:
   38424             :                 return Clipper2D_get_field_count(node, code_mode);
   38425         609 :         case TAG_MPEG4_ColorTransform:
   38426             :                 return ColorTransform_get_field_count(node, code_mode);
   38427           6 :         case TAG_MPEG4_Ellipse:
   38428           6 :                 return Ellipse_get_field_count(node, code_mode);
   38429         580 :         case TAG_MPEG4_LinearGradient:
   38430             :                 return LinearGradient_get_field_count(node, code_mode);
   38431          76 :         case TAG_MPEG4_PathLayout:
   38432             :                 return PathLayout_get_field_count(node, code_mode);
   38433         618 :         case TAG_MPEG4_RadialGradient:
   38434             :                 return RadialGradient_get_field_count(node, code_mode);
   38435           6 :         case TAG_MPEG4_SynthesizedTexture:
   38436             :                 return SynthesizedTexture_get_field_count(node, code_mode);
   38437        7367 :         case TAG_MPEG4_TransformMatrix2D:
   38438             :                 return TransformMatrix2D_get_field_count(node, code_mode);
   38439          66 :         case TAG_MPEG4_Viewport:
   38440             :                 return Viewport_get_field_count(node, code_mode);
   38441         790 :         case TAG_MPEG4_XCurve2D:
   38442             :                 return XCurve2D_get_field_count(node, code_mode);
   38443           6 :         case TAG_MPEG4_XFontStyle:
   38444             :                 return XFontStyle_get_field_count(node, code_mode);
   38445        2909 :         case TAG_MPEG4_XLineProperties:
   38446             :                 return XLineProperties_get_field_count(node, code_mode);
   38447           6 :         case TAG_MPEG4_AdvancedAudioBuffer:
   38448             :                 return AdvancedAudioBuffer_get_field_count(node, code_mode);
   38449           6 :         case TAG_MPEG4_AudioChannelConfig:
   38450             :                 return AudioChannelConfig_get_field_count(node, code_mode);
   38451           6 :         case TAG_MPEG4_DepthImageV2:
   38452             :                 return DepthImageV2_get_field_count(node, code_mode);
   38453           6 :         case TAG_MPEG4_MorphShape:
   38454             :                 return MorphShape_get_field_count(node, code_mode);
   38455           6 :         case TAG_MPEG4_MultiTexture:
   38456             :                 return MultiTexture_get_field_count(node, code_mode);
   38457           6 :         case TAG_MPEG4_PointTextureV2:
   38458             :                 return PointTextureV2_get_field_count(node, code_mode);
   38459           6 :         case TAG_MPEG4_SBVCAnimationV2:
   38460             :                 return SBVCAnimationV2_get_field_count(node, code_mode);
   38461           6 :         case TAG_MPEG4_SimpleTextureV2:
   38462             :                 return SimpleTextureV2_get_field_count(node, code_mode);
   38463           6 :         case TAG_MPEG4_SurroundingSound:
   38464             :                 return SurroundingSound_get_field_count(node, code_mode);
   38465           6 :         case TAG_MPEG4_Transform3DAudio:
   38466             :                 return Transform3DAudio_get_field_count(node, code_mode);
   38467          30 :         case TAG_MPEG4_WideSound:
   38468             :                 return WideSound_get_field_count(node, code_mode);
   38469          30 :         case TAG_MPEG4_ScoreShape:
   38470             :                 return ScoreShape_get_field_count(node, code_mode);
   38471           6 :         case TAG_MPEG4_MusicScore:
   38472             :                 return MusicScore_get_field_count(node, code_mode);
   38473           6 :         case TAG_MPEG4_FootPrintSetNode:
   38474             :                 return FootPrintSetNode_get_field_count(node, code_mode);
   38475           6 :         case TAG_MPEG4_FootPrintNode:
   38476             :                 return FootPrintNode_get_field_count(node, code_mode);
   38477           6 :         case TAG_MPEG4_BuildingPartNode:
   38478             :                 return BuildingPartNode_get_field_count(node, code_mode);
   38479           6 :         case TAG_MPEG4_RoofNode:
   38480             :                 return RoofNode_get_field_count(node, code_mode);
   38481           6 :         case TAG_MPEG4_FacadeNode:
   38482             :                 return FacadeNode_get_field_count(node, code_mode);
   38483          30 :         case TAG_MPEG4_Shadow:
   38484             :                 return Shadow_get_field_count(node, code_mode);
   38485          68 :         case TAG_MPEG4_CacheTexture:
   38486             :                 return CacheTexture_get_field_count(node, code_mode);
   38487          88 :         case TAG_MPEG4_EnvironmentTest:
   38488             :                 return EnvironmentTest_get_field_count(node, code_mode);
   38489          19 :         case TAG_MPEG4_KeyNavigator:
   38490             :                 return KeyNavigator_get_field_count(node, code_mode);
   38491           6 :         case TAG_MPEG4_SpacePartition:
   38492             :                 return SpacePartition_get_field_count(node, code_mode);
   38493           6 :         case TAG_MPEG4_Storage:
   38494             :                 return Storage_get_field_count(node, code_mode);
   38495             :         default:
   38496             :                 return 0;
   38497             :         }
   38498             : }
   38499             : 
   38500      587604 : GF_Err gf_sg_mpeg4_node_get_field(GF_Node *node, GF_FieldInfo *field)
   38501             : {
   38502      587604 :         switch (node->sgprivate->tag) {
   38503          77 :         case TAG_MPEG4_Anchor:
   38504          77 :                 return Anchor_get_field(node, field);
   38505         503 :         case TAG_MPEG4_AnimationStream:
   38506         503 :                 return AnimationStream_get_field(node, field);
   38507             :         case TAG_MPEG4_Appearance:
   38508             :                 return Appearance_get_field(node, field);
   38509         395 :         case TAG_MPEG4_AudioBuffer:
   38510         395 :                 return AudioBuffer_get_field(node, field);
   38511         362 :         case TAG_MPEG4_AudioClip:
   38512         362 :                 return AudioClip_get_field(node, field);
   38513          12 :         case TAG_MPEG4_AudioDelay:
   38514          12 :                 return AudioDelay_get_field(node, field);
   38515          16 :         case TAG_MPEG4_AudioFX:
   38516          16 :                 return AudioFX_get_field(node, field);
   38517          14 :         case TAG_MPEG4_AudioMix:
   38518          14 :                 return AudioMix_get_field(node, field);
   38519         566 :         case TAG_MPEG4_AudioSource:
   38520         566 :                 return AudioSource_get_field(node, field);
   38521          12 :         case TAG_MPEG4_AudioSwitch:
   38522          12 :                 return AudioSwitch_get_field(node, field);
   38523        1093 :         case TAG_MPEG4_Background:
   38524        1093 :                 return Background_get_field(node, field);
   38525        1691 :         case TAG_MPEG4_Background2D:
   38526        1691 :                 return Background2D_get_field(node, field);
   38527          14 :         case TAG_MPEG4_Billboard:
   38528          14 :                 return Billboard_get_field(node, field);
   38529             :         case TAG_MPEG4_Bitmap:
   38530             :                 return Bitmap_get_field(node, field);
   38531             :         case TAG_MPEG4_Box:
   38532             :                 return Box_get_field(node, field);
   38533             :         case TAG_MPEG4_Circle:
   38534             :                 return Circle_get_field(node, field);
   38535         261 :         case TAG_MPEG4_Collision:
   38536         261 :                 return Collision_get_field(node, field);
   38537             :         case TAG_MPEG4_Color:
   38538             :                 return Color_get_field(node, field);
   38539          44 :         case TAG_MPEG4_ColorInterpolator:
   38540          44 :                 return ColorInterpolator_get_field(node, field);
   38541        5156 :         case TAG_MPEG4_CompositeTexture2D:
   38542        5156 :                 return CompositeTexture2D_get_field(node, field);
   38543          28 :         case TAG_MPEG4_CompositeTexture3D:
   38544          28 :                 return CompositeTexture3D_get_field(node, field);
   38545        2621 :         case TAG_MPEG4_Conditional:
   38546        2621 :                 return Conditional_get_field(node, field);
   38547         421 :         case TAG_MPEG4_Cone:
   38548         421 :                 return Cone_get_field(node, field);
   38549             :         case TAG_MPEG4_Coordinate:
   38550             :                 return Coordinate_get_field(node, field);
   38551             :         case TAG_MPEG4_Coordinate2D:
   38552             :                 return Coordinate2D_get_field(node, field);
   38553          12 :         case TAG_MPEG4_CoordinateInterpolator:
   38554          12 :                 return CoordinateInterpolator_get_field(node, field);
   38555          20 :         case TAG_MPEG4_CoordinateInterpolator2D:
   38556          20 :                 return CoordinateInterpolator2D_get_field(node, field);
   38557             :         case TAG_MPEG4_Curve2D:
   38558             :                 return Curve2D_get_field(node, field);
   38559         523 :         case TAG_MPEG4_Cylinder:
   38560         523 :                 return Cylinder_get_field(node, field);
   38561         491 :         case TAG_MPEG4_CylinderSensor:
   38562         491 :                 return CylinderSensor_get_field(node, field);
   38563          26 :         case TAG_MPEG4_DirectionalLight:
   38564          26 :                 return DirectionalLight_get_field(node, field);
   38565         476 :         case TAG_MPEG4_DiscSensor:
   38566         476 :                 return DiscSensor_get_field(node, field);
   38567        1208 :         case TAG_MPEG4_ElevationGrid:
   38568        1208 :                 return ElevationGrid_get_field(node, field);
   38569          12 :         case TAG_MPEG4_Expression:
   38570          12 :                 return Expression_get_field(node, field);
   38571        1149 :         case TAG_MPEG4_Extrusion:
   38572        1149 :                 return Extrusion_get_field(node, field);
   38573          10 :         case TAG_MPEG4_Face:
   38574          10 :                 return Face_get_field(node, field);
   38575           8 :         case TAG_MPEG4_FaceDefMesh:
   38576           8 :                 return FaceDefMesh_get_field(node, field);
   38577           8 :         case TAG_MPEG4_FaceDefTables:
   38578           8 :                 return FaceDefTables_get_field(node, field);
   38579          10 :         case TAG_MPEG4_FaceDefTransform:
   38580          10 :                 return FaceDefTransform_get_field(node, field);
   38581         136 :         case TAG_MPEG4_FAP:
   38582         136 :                 return FAP_get_field(node, field);
   38583          10 :         case TAG_MPEG4_FDP:
   38584          10 :                 return FDP_get_field(node, field);
   38585          18 :         case TAG_MPEG4_FIT:
   38586          18 :                 return FIT_get_field(node, field);
   38587          31 :         case TAG_MPEG4_Fog:
   38588          31 :                 return Fog_get_field(node, field);
   38589        3419 :         case TAG_MPEG4_FontStyle:
   38590        3419 :                 return FontStyle_get_field(node, field);
   38591        1026 :         case TAG_MPEG4_Form:
   38592        1026 :                 return Form_get_field(node, field);
   38593             :         case TAG_MPEG4_Group:
   38594             :                 return Group_get_field(node, field);
   38595             :         case TAG_MPEG4_ImageTexture:
   38596             :                 return ImageTexture_get_field(node, field);
   38597        3104 :         case TAG_MPEG4_IndexedFaceSet:
   38598        3104 :                 return IndexedFaceSet_get_field(node, field);
   38599        2727 :         case TAG_MPEG4_IndexedFaceSet2D:
   38600        2727 :                 return IndexedFaceSet2D_get_field(node, field);
   38601         570 :         case TAG_MPEG4_IndexedLineSet:
   38602         570 :                 return IndexedLineSet_get_field(node, field);
   38603         445 :         case TAG_MPEG4_IndexedLineSet2D:
   38604         445 :                 return IndexedLineSet2D_get_field(node, field);
   38605             :         case TAG_MPEG4_Inline:
   38606             :                 return Inline_get_field(node, field);
   38607             :         case TAG_MPEG4_LOD:
   38608             :                 return LOD_get_field(node, field);
   38609        2585 :         case TAG_MPEG4_Layer2D:
   38610        2585 :                 return Layer2D_get_field(node, field);
   38611         442 :         case TAG_MPEG4_Layer3D:
   38612         442 :                 return Layer3D_get_field(node, field);
   38613        1831 :         case TAG_MPEG4_Layout:
   38614        1831 :                 return Layout_get_field(node, field);
   38615             :         case TAG_MPEG4_LineProperties:
   38616             :                 return LineProperties_get_field(node, field);
   38617          14 :         case TAG_MPEG4_ListeningPoint:
   38618          14 :                 return ListeningPoint_get_field(node, field);
   38619        7128 :         case TAG_MPEG4_Material:
   38620        7128 :                 return Material_get_field(node, field);
   38621       48726 :         case TAG_MPEG4_Material2D:
   38622       48726 :                 return Material2D_get_field(node, field);
   38623         786 :         case TAG_MPEG4_MovieTexture:
   38624         786 :                 return MovieTexture_get_field(node, field);
   38625         509 :         case TAG_MPEG4_NavigationInfo:
   38626         509 :                 return NavigationInfo_get_field(node, field);
   38627             :         case TAG_MPEG4_Normal:
   38628             :                 return Normal_get_field(node, field);
   38629          12 :         case TAG_MPEG4_NormalInterpolator:
   38630          12 :                 return NormalInterpolator_get_field(node, field);
   38631        2685 :         case TAG_MPEG4_OrderedGroup:
   38632        2685 :                 return OrderedGroup_get_field(node, field);
   38633         116 :         case TAG_MPEG4_OrientationInterpolator:
   38634         116 :                 return OrientationInterpolator_get_field(node, field);
   38635             :         case TAG_MPEG4_PixelTexture:
   38636             :                 return PixelTexture_get_field(node, field);
   38637         422 :         case TAG_MPEG4_PlaneSensor:
   38638         422 :                 return PlaneSensor_get_field(node, field);
   38639         591 :         case TAG_MPEG4_PlaneSensor2D:
   38640         591 :                 return PlaneSensor2D_get_field(node, field);
   38641          19 :         case TAG_MPEG4_PointLight:
   38642          19 :                 return PointLight_get_field(node, field);
   38643             :         case TAG_MPEG4_PointSet:
   38644             :                 return PointSet_get_field(node, field);
   38645             :         case TAG_MPEG4_PointSet2D:
   38646             :                 return PointSet2D_get_field(node, field);
   38647          74 :         case TAG_MPEG4_PositionInterpolator:
   38648          74 :                 return PositionInterpolator_get_field(node, field);
   38649        3236 :         case TAG_MPEG4_PositionInterpolator2D:
   38650        3236 :                 return PositionInterpolator2D_get_field(node, field);
   38651         311 :         case TAG_MPEG4_ProximitySensor2D:
   38652         311 :                 return ProximitySensor2D_get_field(node, field);
   38653          20 :         case TAG_MPEG4_ProximitySensor:
   38654          20 :                 return ProximitySensor_get_field(node, field);
   38655       10092 :         case TAG_MPEG4_QuantizationParameter:
   38656       10092 :                 return QuantizationParameter_get_field(node, field);
   38657             :         case TAG_MPEG4_Rectangle:
   38658             :                 return Rectangle_get_field(node, field);
   38659         372 :         case TAG_MPEG4_ScalarInterpolator:
   38660         372 :                 return ScalarInterpolator_get_field(node, field);
   38661             :         case TAG_MPEG4_Script:
   38662             :                 return Script_get_field(node, field);
   38663             :         case TAG_MPEG4_Shape:
   38664             :                 return Shape_get_field(node, field);
   38665          26 :         case TAG_MPEG4_Sound:
   38666          26 :                 return Sound_get_field(node, field);
   38667         330 :         case TAG_MPEG4_Sound2D:
   38668         330 :                 return Sound2D_get_field(node, field);
   38669             :         case TAG_MPEG4_Sphere:
   38670             :                 return Sphere_get_field(node, field);
   38671         275 :         case TAG_MPEG4_SphereSensor:
   38672         275 :                 return SphereSensor_get_field(node, field);
   38673          25 :         case TAG_MPEG4_SpotLight:
   38674          25 :                 return SpotLight_get_field(node, field);
   38675             :         case TAG_MPEG4_Switch:
   38676             :                 return Switch_get_field(node, field);
   38677             :         case TAG_MPEG4_TermCap:
   38678             :                 return TermCap_get_field(node, field);
   38679        4698 :         case TAG_MPEG4_Text:
   38680        4698 :                 return Text_get_field(node, field);
   38681             :         case TAG_MPEG4_TextureCoordinate:
   38682             :                 return TextureCoordinate_get_field(node, field);
   38683        1553 :         case TAG_MPEG4_TextureTransform:
   38684        1553 :                 return TextureTransform_get_field(node, field);
   38685        8238 :         case TAG_MPEG4_TimeSensor:
   38686        8238 :                 return TimeSensor_get_field(node, field);
   38687       12483 :         case TAG_MPEG4_TouchSensor:
   38688       12483 :                 return TouchSensor_get_field(node, field);
   38689        1897 :         case TAG_MPEG4_Transform:
   38690        1897 :                 return Transform_get_field(node, field);
   38691       69411 :         case TAG_MPEG4_Transform2D:
   38692       69411 :                 return Transform2D_get_field(node, field);
   38693      111132 :         case TAG_MPEG4_Valuator:
   38694      111132 :                 return Valuator_get_field(node, field);
   38695         599 :         case TAG_MPEG4_Viewpoint:
   38696         599 :                 return Viewpoint_get_field(node, field);
   38697         326 :         case TAG_MPEG4_VisibilitySensor:
   38698         326 :                 return VisibilitySensor_get_field(node, field);
   38699           8 :         case TAG_MPEG4_Viseme:
   38700           8 :                 return Viseme_get_field(node, field);
   38701             :         case TAG_MPEG4_WorldInfo:
   38702             :                 return WorldInfo_get_field(node, field);
   38703          20 :         case TAG_MPEG4_AcousticMaterial:
   38704          20 :                 return AcousticMaterial_get_field(node, field);
   38705          12 :         case TAG_MPEG4_AcousticScene:
   38706          12 :                 return AcousticScene_get_field(node, field);
   38707          14 :         case TAG_MPEG4_ApplicationWindow:
   38708          14 :                 return ApplicationWindow_get_field(node, field);
   38709         592 :         case TAG_MPEG4_BAP:
   38710         592 :                 return BAP_get_field(node, field);
   38711             :         case TAG_MPEG4_BDP:
   38712             :                 return BDP_get_field(node, field);
   38713             :         case TAG_MPEG4_Body:
   38714             :                 return Body_get_field(node, field);
   38715          12 :         case TAG_MPEG4_BodyDefTable:
   38716          12 :                 return BodyDefTable_get_field(node, field);
   38717           8 :         case TAG_MPEG4_BodySegmentConnectionHint:
   38718           8 :                 return BodySegmentConnectionHint_get_field(node, field);
   38719          26 :         case TAG_MPEG4_DirectiveSound:
   38720          26 :                 return DirectiveSound_get_field(node, field);
   38721           8 :         case TAG_MPEG4_Hierarchical3DMesh:
   38722           8 :                 return Hierarchical3DMesh_get_field(node, field);
   38723         167 :         case TAG_MPEG4_MaterialKey:
   38724         167 :                 return MaterialKey_get_field(node, field);
   38725          38 :         case TAG_MPEG4_PerceptualParameters:
   38726          38 :                 return PerceptualParameters_get_field(node, field);
   38727          26 :         case TAG_MPEG4_TemporalTransform:
   38728          26 :                 return TemporalTransform_get_field(node, field);
   38729          18 :         case TAG_MPEG4_TemporalGroup:
   38730          18 :                 return TemporalGroup_get_field(node, field);
   38731          85 :         case TAG_MPEG4_ServerCommand:
   38732          85 :                 return ServerCommand_get_field(node, field);
   38733         642 :         case TAG_MPEG4_InputSensor:
   38734         642 :                 return InputSensor_get_field(node, field);
   38735          14 :         case TAG_MPEG4_MatteTexture:
   38736          14 :                 return MatteTexture_get_field(node, field);
   38737          12 :         case TAG_MPEG4_MediaBuffer:
   38738          12 :                 return MediaBuffer_get_field(node, field);
   38739        1236 :         case TAG_MPEG4_MediaControl:
   38740        1236 :                 return MediaControl_get_field(node, field);
   38741          94 :         case TAG_MPEG4_MediaSensor:
   38742          94 :                 return MediaSensor_get_field(node, field);
   38743         320 :         case TAG_MPEG4_BitWrapper:
   38744         320 :                 return BitWrapper_get_field(node, field);
   38745          12 :         case TAG_MPEG4_CoordinateInterpolator4D:
   38746          12 :                 return CoordinateInterpolator4D_get_field(node, field);
   38747          14 :         case TAG_MPEG4_DepthImage:
   38748          14 :                 return DepthImage_get_field(node, field);
   38749          26 :         case TAG_MPEG4_FFD:
   38750          26 :                 return FFD_get_field(node, field);
   38751          10 :         case TAG_MPEG4_Implicit:
   38752          10 :                 return Implicit_get_field(node, field);
   38753           8 :         case TAG_MPEG4_XXLFM_Appearance:
   38754           8 :                 return XXLFM_Appearance_get_field(node, field);
   38755             :         case TAG_MPEG4_XXLFM_BlendList:
   38756             :                 return XXLFM_BlendList_get_field(node, field);
   38757             :         case TAG_MPEG4_XXLFM_FrameList:
   38758             :                 return XXLFM_FrameList_get_field(node, field);
   38759          10 :         case TAG_MPEG4_XXLFM_LightMap:
   38760          10 :                 return XXLFM_LightMap_get_field(node, field);
   38761           8 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   38762           8 :                 return XXLFM_SurfaceMapList_get_field(node, field);
   38763           8 :         case TAG_MPEG4_XXLFM_ViewMapList:
   38764           8 :                 return XXLFM_ViewMapList_get_field(node, field);
   38765          46 :         case TAG_MPEG4_MeshGrid:
   38766          46 :                 return MeshGrid_get_field(node, field);
   38767         568 :         case TAG_MPEG4_NonLinearDeformer:
   38768         568 :                 return NonLinearDeformer_get_field(node, field);
   38769          16 :         case TAG_MPEG4_NurbsCurve:
   38770          16 :                 return NurbsCurve_get_field(node, field);
   38771          16 :         case TAG_MPEG4_NurbsCurve2D:
   38772          16 :                 return NurbsCurve2D_get_field(node, field);
   38773          36 :         case TAG_MPEG4_NurbsSurface:
   38774          36 :                 return NurbsSurface_get_field(node, field);
   38775           8 :         case TAG_MPEG4_OctreeImage:
   38776           8 :                 return OctreeImage_get_field(node, field);
   38777          50 :         case TAG_MPEG4_XXParticles:
   38778          50 :                 return XXParticles_get_field(node, field);
   38779             :         case TAG_MPEG4_XXParticleInitBox:
   38780             :                 return XXParticleInitBox_get_field(node, field);
   38781           8 :         case TAG_MPEG4_XXPlanarObstacle:
   38782           8 :                 return XXPlanarObstacle_get_field(node, field);
   38783           8 :         case TAG_MPEG4_XXPointAttractor:
   38784           8 :                 return XXPointAttractor_get_field(node, field);
   38785          10 :         case TAG_MPEG4_PointTexture:
   38786          10 :                 return PointTexture_get_field(node, field);
   38787          35 :         case TAG_MPEG4_PositionAnimator:
   38788          35 :                 return PositionAnimator_get_field(node, field);
   38789          44 :         case TAG_MPEG4_PositionAnimator2D:
   38790          44 :                 return PositionAnimator2D_get_field(node, field);
   38791          12 :         case TAG_MPEG4_PositionInterpolator4D:
   38792          12 :                 return PositionInterpolator4D_get_field(node, field);
   38793          40 :         case TAG_MPEG4_ProceduralTexture:
   38794          40 :                 return ProceduralTexture_get_field(node, field);
   38795          20 :         case TAG_MPEG4_Quadric:
   38796          20 :                 return Quadric_get_field(node, field);
   38797          48 :         case TAG_MPEG4_SBBone:
   38798          48 :                 return SBBone_get_field(node, field);
   38799          12 :         case TAG_MPEG4_SBMuscle:
   38800          12 :                 return SBMuscle_get_field(node, field);
   38801          14 :         case TAG_MPEG4_SBSegment:
   38802          14 :                 return SBSegment_get_field(node, field);
   38803          18 :         case TAG_MPEG4_SBSite:
   38804          18 :                 return SBSite_get_field(node, field);
   38805          30 :         case TAG_MPEG4_SBSkinnedModel:
   38806          30 :                 return SBSkinnedModel_get_field(node, field);
   38807             :         case TAG_MPEG4_SBVCAnimation:
   38808             :                 return SBVCAnimation_get_field(node, field);
   38809          30 :         case TAG_MPEG4_ScalarAnimator:
   38810          30 :                 return ScalarAnimator_get_field(node, field);
   38811             :         case TAG_MPEG4_SimpleTexture:
   38812             :                 return SimpleTexture_get_field(node, field);
   38813             :         case TAG_MPEG4_SolidRep:
   38814             :                 return SolidRep_get_field(node, field);
   38815          52 :         case TAG_MPEG4_SubdivisionSurface:
   38816          52 :                 return SubdivisionSurface_get_field(node, field);
   38817          14 :         case TAG_MPEG4_SubdivSurfaceSector:
   38818          14 :                 return SubdivSurfaceSector_get_field(node, field);
   38819           8 :         case TAG_MPEG4_WaveletSubdivisionSurface:
   38820           8 :                 return WaveletSubdivisionSurface_get_field(node, field);
   38821         362 :         case TAG_MPEG4_Clipper2D:
   38822         362 :                 return Clipper2D_get_field(node, field);
   38823       25453 :         case TAG_MPEG4_ColorTransform:
   38824       25453 :                 return ColorTransform_get_field(node, field);
   38825             :         case TAG_MPEG4_Ellipse:
   38826             :                 return Ellipse_get_field(node, field);
   38827        5675 :         case TAG_MPEG4_LinearGradient:
   38828        5675 :                 return LinearGradient_get_field(node, field);
   38829         627 :         case TAG_MPEG4_PathLayout:
   38830         627 :                 return PathLayout_get_field(node, field);
   38831        8364 :         case TAG_MPEG4_RadialGradient:
   38832        8364 :                 return RadialGradient_get_field(node, field);
   38833          22 :         case TAG_MPEG4_SynthesizedTexture:
   38834          22 :                 return SynthesizedTexture_get_field(node, field);
   38835       64458 :         case TAG_MPEG4_TransformMatrix2D:
   38836       64458 :                 return TransformMatrix2D_get_field(node, field);
   38837         863 :         case TAG_MPEG4_Viewport:
   38838         863 :                 return Viewport_get_field(node, field);
   38839             :         case TAG_MPEG4_XCurve2D:
   38840             :                 return XCurve2D_get_field(node, field);
   38841          34 :         case TAG_MPEG4_XFontStyle:
   38842          34 :                 return XFontStyle_get_field(node, field);
   38843       44624 :         case TAG_MPEG4_XLineProperties:
   38844       44624 :                 return XLineProperties_get_field(node, field);
   38845          36 :         case TAG_MPEG4_AdvancedAudioBuffer:
   38846          36 :                 return AdvancedAudioBuffer_get_field(node, field);
   38847          44 :         case TAG_MPEG4_AudioChannelConfig:
   38848          44 :                 return AudioChannelConfig_get_field(node, field);
   38849          16 :         case TAG_MPEG4_DepthImageV2:
   38850          16 :                 return DepthImageV2_get_field(node, field);
   38851           8 :         case TAG_MPEG4_MorphShape:
   38852           8 :                 return MorphShape_get_field(node, field);
   38853          16 :         case TAG_MPEG4_MultiTexture:
   38854          16 :                 return MultiTexture_get_field(node, field);
   38855          16 :         case TAG_MPEG4_PointTextureV2:
   38856          16 :                 return PointTextureV2_get_field(node, field);
   38857          20 :         case TAG_MPEG4_SBVCAnimationV2:
   38858          20 :                 return SBVCAnimationV2_get_field(node, field);
   38859          10 :         case TAG_MPEG4_SimpleTextureV2:
   38860          10 :                 return SimpleTextureV2_get_field(node, field);
   38861          14 :         case TAG_MPEG4_SurroundingSound:
   38862          14 :                 return SurroundingSound_get_field(node, field);
   38863          18 :         case TAG_MPEG4_Transform3DAudio:
   38864          18 :                 return Transform3DAudio_get_field(node, field);
   38865         366 :         case TAG_MPEG4_WideSound:
   38866         366 :                 return WideSound_get_field(node, field);
   38867             :         case TAG_MPEG4_ScoreShape:
   38868             :                 return ScoreShape_get_field(node, field);
   38869          62 :         case TAG_MPEG4_MusicScore:
   38870          62 :                 return MusicScore_get_field(node, field);
   38871             :         case TAG_MPEG4_FootPrintSetNode:
   38872             :                 return FootPrintSetNode_get_field(node, field);
   38873             :         case TAG_MPEG4_FootPrintNode:
   38874             :                 return FootPrintNode_get_field(node, field);
   38875          16 :         case TAG_MPEG4_BuildingPartNode:
   38876          16 :                 return BuildingPartNode_get_field(node, field);
   38877          24 :         case TAG_MPEG4_RoofNode:
   38878          24 :                 return RoofNode_get_field(node, field);
   38879          26 :         case TAG_MPEG4_FacadeNode:
   38880          26 :                 return FacadeNode_get_field(node, field);
   38881         132 :         case TAG_MPEG4_Shadow:
   38882         132 :                 return Shadow_get_field(node, field);
   38883         683 :         case TAG_MPEG4_CacheTexture:
   38884         683 :                 return CacheTexture_get_field(node, field);
   38885         597 :         case TAG_MPEG4_EnvironmentTest:
   38886         597 :                 return EnvironmentTest_get_field(node, field);
   38887         101 :         case TAG_MPEG4_KeyNavigator:
   38888         101 :                 return KeyNavigator_get_field(node, field);
   38889           8 :         case TAG_MPEG4_SpacePartition:
   38890           8 :                 return SpacePartition_get_field(node, field);
   38891          15 :         case TAG_MPEG4_Storage:
   38892          15 :                 return Storage_get_field(node, field);
   38893             :         default:
   38894             :                 return GF_BAD_PARAM;
   38895             :         }
   38896             : }
   38897             : 
   38898       96016 : GF_Err gf_sg_mpeg4_node_get_field_index(GF_Node *node, u32 inField, u8 code_mode, u32 *fieldIndex)
   38899             : {
   38900       96016 :         switch (node->sgprivate->tag) {
   38901          48 :         case TAG_MPEG4_Anchor:
   38902             :                 return Anchor_get_field_index(node, inField, code_mode, fieldIndex);
   38903         148 :         case TAG_MPEG4_AnimationStream:
   38904             :                 return AnimationStream_get_field_index(node, inField, code_mode, fieldIndex);
   38905        4830 :         case TAG_MPEG4_Appearance:
   38906             :                 return Appearance_get_field_index(node, inField, code_mode, fieldIndex);
   38907         114 :         case TAG_MPEG4_AudioBuffer:
   38908             :                 return AudioBuffer_get_field_index(node, inField, code_mode, fieldIndex);
   38909         102 :         case TAG_MPEG4_AudioClip:
   38910             :                 return AudioClip_get_field_index(node, inField, code_mode, fieldIndex);
   38911           6 :         case TAG_MPEG4_AudioDelay:
   38912             :                 return AudioDelay_get_field_index(node, inField, code_mode, fieldIndex);
   38913           8 :         case TAG_MPEG4_AudioFX:
   38914             :                 return AudioFX_get_field_index(node, inField, code_mode, fieldIndex);
   38915           7 :         case TAG_MPEG4_AudioMix:
   38916             :                 return AudioMix_get_field_index(node, inField, code_mode, fieldIndex);
   38917         136 :         case TAG_MPEG4_AudioSource:
   38918             :                 return AudioSource_get_field_index(node, inField, code_mode, fieldIndex);
   38919           6 :         case TAG_MPEG4_AudioSwitch:
   38920             :                 return AudioSwitch_get_field_index(node, inField, code_mode, fieldIndex);
   38921         302 :         case TAG_MPEG4_Background:
   38922             :                 return Background_get_field_index(node, inField, code_mode, fieldIndex);
   38923         340 :         case TAG_MPEG4_Background2D:
   38924             :                 return Background2D_get_field_index(node, inField, code_mode, fieldIndex);
   38925           4 :         case TAG_MPEG4_Billboard:
   38926             :                 return Billboard_get_field_index(node, inField, code_mode, fieldIndex);
   38927          24 :         case TAG_MPEG4_Bitmap:
   38928             :                 return Bitmap_get_field_index(node, inField, code_mode, fieldIndex);
   38929          36 :         case TAG_MPEG4_Box:
   38930             :                 return Box_get_field_index(node, inField, code_mode, fieldIndex);
   38931         110 :         case TAG_MPEG4_Circle:
   38932             :                 return Circle_get_field_index(node, inField, code_mode, fieldIndex);
   38933          81 :         case TAG_MPEG4_Collision:
   38934             :                 return Collision_get_field_index(node, inField, code_mode, fieldIndex);
   38935          71 :         case TAG_MPEG4_Color:
   38936             :                 return Color_get_field_index(node, inField, code_mode, fieldIndex);
   38937           4 :         case TAG_MPEG4_ColorInterpolator:
   38938             :                 return ColorInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   38939           8 :         case TAG_MPEG4_CompositeTexture2D:
   38940             :                 return CompositeTexture2D_get_field_index(node, inField, code_mode, fieldIndex);
   38941          11 :         case TAG_MPEG4_CompositeTexture3D:
   38942             :                 return CompositeTexture3D_get_field_index(node, inField, code_mode, fieldIndex);
   38943         372 :         case TAG_MPEG4_Conditional:
   38944             :                 return Conditional_get_field_index(node, inField, code_mode, fieldIndex);
   38945         114 :         case TAG_MPEG4_Cone:
   38946             :                 return Cone_get_field_index(node, inField, code_mode, fieldIndex);
   38947         106 :         case TAG_MPEG4_Coordinate:
   38948             :                 return Coordinate_get_field_index(node, inField, code_mode, fieldIndex);
   38949        2126 :         case TAG_MPEG4_Coordinate2D:
   38950             :                 return Coordinate2D_get_field_index(node, inField, code_mode, fieldIndex);
   38951           4 :         case TAG_MPEG4_CoordinateInterpolator:
   38952             :                 return CoordinateInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   38953           4 :         case TAG_MPEG4_CoordinateInterpolator2D:
   38954             :                 return CoordinateInterpolator2D_get_field_index(node, inField, code_mode, fieldIndex);
   38955        3231 :         case TAG_MPEG4_Curve2D:
   38956             :                 return Curve2D_get_field_index(node, inField, code_mode, fieldIndex);
   38957         135 :         case TAG_MPEG4_Cylinder:
   38958             :                 return Cylinder_get_field_index(node, inField, code_mode, fieldIndex);
   38959         129 :         case TAG_MPEG4_CylinderSensor:
   38960             :                 return CylinderSensor_get_field_index(node, inField, code_mode, fieldIndex);
   38961           5 :         case TAG_MPEG4_DirectionalLight:
   38962             :                 return DirectionalLight_get_field_index(node, inField, code_mode, fieldIndex);
   38963         123 :         case TAG_MPEG4_DiscSensor:
   38964             :                 return DiscSensor_get_field_index(node, inField, code_mode, fieldIndex);
   38965         364 :         case TAG_MPEG4_ElevationGrid:
   38966             :                 return ElevationGrid_get_field_index(node, inField, code_mode, fieldIndex);
   38967           6 :         case TAG_MPEG4_Expression:
   38968             :                 return Expression_get_field_index(node, inField, code_mode, fieldIndex);
   38969         304 :         case TAG_MPEG4_Extrusion:
   38970             :                 return Extrusion_get_field_index(node, inField, code_mode, fieldIndex);
   38971           5 :         case TAG_MPEG4_Face:
   38972             :                 return Face_get_field_index(node, inField, code_mode, fieldIndex);
   38973           4 :         case TAG_MPEG4_FaceDefMesh:
   38974             :                 return FaceDefMesh_get_field_index(node, inField, code_mode, fieldIndex);
   38975           4 :         case TAG_MPEG4_FaceDefTables:
   38976             :                 return FaceDefTables_get_field_index(node, inField, code_mode, fieldIndex);
   38977           5 :         case TAG_MPEG4_FaceDefTransform:
   38978             :                 return FaceDefTransform_get_field_index(node, inField, code_mode, fieldIndex);
   38979          68 :         case TAG_MPEG4_FAP:
   38980             :                 return FAP_get_field_index(node, inField, code_mode, fieldIndex);
   38981           5 :         case TAG_MPEG4_FDP:
   38982             :                 return FDP_get_field_index(node, inField, code_mode, fieldIndex);
   38983           9 :         case TAG_MPEG4_FIT:
   38984             :                 return FIT_get_field_index(node, inField, code_mode, fieldIndex);
   38985           5 :         case TAG_MPEG4_Fog:
   38986             :                 return Fog_get_field_index(node, inField, code_mode, fieldIndex);
   38987         352 :         case TAG_MPEG4_FontStyle:
   38988             :                 return FontStyle_get_field_index(node, inField, code_mode, fieldIndex);
   38989         167 :         case TAG_MPEG4_Form:
   38990             :                 return Form_get_field_index(node, inField, code_mode, fieldIndex);
   38991         207 :         case TAG_MPEG4_Group:
   38992             :                 return Group_get_field_index(node, inField, code_mode, fieldIndex);
   38993         171 :         case TAG_MPEG4_ImageTexture:
   38994             :                 return ImageTexture_get_field_index(node, inField, code_mode, fieldIndex);
   38995         948 :         case TAG_MPEG4_IndexedFaceSet:
   38996             :                 return IndexedFaceSet_get_field_index(node, inField, code_mode, fieldIndex);
   38997         667 :         case TAG_MPEG4_IndexedFaceSet2D:
   38998             :                 return IndexedFaceSet2D_get_field_index(node, inField, code_mode, fieldIndex);
   38999         167 :         case TAG_MPEG4_IndexedLineSet:
   39000             :                 return IndexedLineSet_get_field_index(node, inField, code_mode, fieldIndex);
   39001         122 :         case TAG_MPEG4_IndexedLineSet2D:
   39002             :                 return IndexedLineSet2D_get_field_index(node, inField, code_mode, fieldIndex);
   39003           1 :         case TAG_MPEG4_Inline:
   39004             :                 return Inline_get_field_index(node, inField, code_mode, fieldIndex);
   39005           3 :         case TAG_MPEG4_LOD:
   39006             :                 return LOD_get_field_index(node, inField, code_mode, fieldIndex);
   39007         101 :         case TAG_MPEG4_Layer2D:
   39008             :                 return Layer2D_get_field_index(node, inField, code_mode, fieldIndex);
   39009         158 :         case TAG_MPEG4_Layer3D:
   39010             :                 return Layer3D_get_field_index(node, inField, code_mode, fieldIndex);
   39011         275 :         case TAG_MPEG4_Layout:
   39012             :                 return Layout_get_field_index(node, inField, code_mode, fieldIndex);
   39013         749 :         case TAG_MPEG4_LineProperties:
   39014             :                 return LineProperties_get_field_index(node, inField, code_mode, fieldIndex);
   39015           7 :         case TAG_MPEG4_ListeningPoint:
   39016             :                 return ListeningPoint_get_field_index(node, inField, code_mode, fieldIndex);
   39017         117 :         case TAG_MPEG4_Material:
   39018             :                 return Material_get_field_index(node, inField, code_mode, fieldIndex);
   39019        6011 :         case TAG_MPEG4_Material2D:
   39020             :                 return Material2D_get_field_index(node, inField, code_mode, fieldIndex);
   39021         194 :         case TAG_MPEG4_MovieTexture:
   39022             :                 return MovieTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39023         137 :         case TAG_MPEG4_NavigationInfo:
   39024             :                 return NavigationInfo_get_field_index(node, inField, code_mode, fieldIndex);
   39025          36 :         case TAG_MPEG4_Normal:
   39026             :                 return Normal_get_field_index(node, inField, code_mode, fieldIndex);
   39027           4 :         case TAG_MPEG4_NormalInterpolator:
   39028             :                 return NormalInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39029         948 :         case TAG_MPEG4_OrderedGroup:
   39030             :                 return OrderedGroup_get_field_index(node, inField, code_mode, fieldIndex);
   39031           4 :         case TAG_MPEG4_OrientationInterpolator:
   39032             :                 return OrientationInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39033          78 :         case TAG_MPEG4_PixelTexture:
   39034             :                 return PixelTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39035         108 :         case TAG_MPEG4_PlaneSensor:
   39036             :                 return PlaneSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39037         137 :         case TAG_MPEG4_PlaneSensor2D:
   39038             :                 return PlaneSensor2D_get_field_index(node, inField, code_mode, fieldIndex);
   39039           7 :         case TAG_MPEG4_PointLight:
   39040             :                 return PointLight_get_field_index(node, inField, code_mode, fieldIndex);
   39041          57 :         case TAG_MPEG4_PointSet:
   39042             :                 return PointSet_get_field_index(node, inField, code_mode, fieldIndex);
   39043          57 :         case TAG_MPEG4_PointSet2D:
   39044             :                 return PointSet2D_get_field_index(node, inField, code_mode, fieldIndex);
   39045           4 :         case TAG_MPEG4_PositionInterpolator:
   39046             :                 return PositionInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39047           4 :         case TAG_MPEG4_PositionInterpolator2D:
   39048             :                 return PositionInterpolator2D_get_field_index(node, inField, code_mode, fieldIndex);
   39049          68 :         case TAG_MPEG4_ProximitySensor2D:
   39050             :                 return ProximitySensor2D_get_field_index(node, inField, code_mode, fieldIndex);
   39051           8 :         case TAG_MPEG4_ProximitySensor:
   39052             :                 return ProximitySensor_get_field_index(node, inField, code_mode, fieldIndex);
   39053        2645 :         case TAG_MPEG4_QuantizationParameter:
   39054             :                 return QuantizationParameter_get_field_index(node, inField, code_mode, fieldIndex);
   39055         106 :         case TAG_MPEG4_Rectangle:
   39056             :                 return Rectangle_get_field_index(node, inField, code_mode, fieldIndex);
   39057           4 :         case TAG_MPEG4_ScalarInterpolator:
   39058             :                 return ScalarInterpolator_get_field_index(node, inField, code_mode, fieldIndex);
   39059          78 :         case TAG_MPEG4_Script:
   39060             :                 return Script_get_field_index(node, inField, code_mode, fieldIndex);
   39061        7923 :         case TAG_MPEG4_Shape:
   39062             :                 return Shape_get_field_index(node, inField, code_mode, fieldIndex);
   39063          10 :         case TAG_MPEG4_Sound:
   39064             :                 return Sound_get_field_index(node, inField, code_mode, fieldIndex);
   39065          80 :         case TAG_MPEG4_Sound2D:
   39066             :                 return Sound2D_get_field_index(node, inField, code_mode, fieldIndex);
   39067          36 :         case TAG_MPEG4_Sphere:
   39068             :                 return Sphere_get_field_index(node, inField, code_mode, fieldIndex);
   39069          66 :         case TAG_MPEG4_SphereSensor:
   39070             :                 return SphereSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39071          10 :         case TAG_MPEG4_SpotLight:
   39072             :                 return SpotLight_get_field_index(node, inField, code_mode, fieldIndex);
   39073         666 :         case TAG_MPEG4_Switch:
   39074             :                 return Switch_get_field_index(node, inField, code_mode, fieldIndex);
   39075           3 :         case TAG_MPEG4_TermCap:
   39076             :                 return TermCap_get_field_index(node, inField, code_mode, fieldIndex);
   39077         185 :         case TAG_MPEG4_Text:
   39078             :                 return Text_get_field_index(node, inField, code_mode, fieldIndex);
   39079           1 :         case TAG_MPEG4_TextureCoordinate:
   39080             :                 return TextureCoordinate_get_field_index(node, inField, code_mode, fieldIndex);
   39081          99 :         case TAG_MPEG4_TextureTransform:
   39082             :                 return TextureTransform_get_field_index(node, inField, code_mode, fieldIndex);
   39083          82 :         case TAG_MPEG4_TimeSensor:
   39084             :                 return TimeSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39085         771 :         case TAG_MPEG4_TouchSensor:
   39086             :                 return TouchSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39087         443 :         case TAG_MPEG4_Transform:
   39088             :                 return Transform_get_field_index(node, inField, code_mode, fieldIndex);
   39089       19738 :         case TAG_MPEG4_Transform2D:
   39090             :                 return Transform2D_get_field_index(node, inField, code_mode, fieldIndex);
   39091        2155 :         case TAG_MPEG4_Valuator:
   39092             :                 return Valuator_get_field_index(node, inField, code_mode, fieldIndex);
   39093         138 :         case TAG_MPEG4_Viewpoint:
   39094             :                 return Viewpoint_get_field_index(node, inField, code_mode, fieldIndex);
   39095          66 :         case TAG_MPEG4_VisibilitySensor:
   39096             :                 return VisibilitySensor_get_field_index(node, inField, code_mode, fieldIndex);
   39097           4 :         case TAG_MPEG4_Viseme:
   39098             :                 return Viseme_get_field_index(node, inField, code_mode, fieldIndex);
   39099         174 :         case TAG_MPEG4_WorldInfo:
   39100             :                 return WorldInfo_get_field_index(node, inField, code_mode, fieldIndex);
   39101          10 :         case TAG_MPEG4_AcousticMaterial:
   39102             :                 return AcousticMaterial_get_field_index(node, inField, code_mode, fieldIndex);
   39103           6 :         case TAG_MPEG4_AcousticScene:
   39104             :                 return AcousticScene_get_field_index(node, inField, code_mode, fieldIndex);
   39105           7 :         case TAG_MPEG4_ApplicationWindow:
   39106             :                 return ApplicationWindow_get_field_index(node, inField, code_mode, fieldIndex);
   39107         296 :         case TAG_MPEG4_BAP:
   39108             :                 return BAP_get_field_index(node, inField, code_mode, fieldIndex);
   39109           2 :         case TAG_MPEG4_BDP:
   39110             :                 return BDP_get_field_index(node, inField, code_mode, fieldIndex);
   39111           3 :         case TAG_MPEG4_Body:
   39112             :                 return Body_get_field_index(node, inField, code_mode, fieldIndex);
   39113           6 :         case TAG_MPEG4_BodyDefTable:
   39114             :                 return BodyDefTable_get_field_index(node, inField, code_mode, fieldIndex);
   39115           4 :         case TAG_MPEG4_BodySegmentConnectionHint:
   39116             :                 return BodySegmentConnectionHint_get_field_index(node, inField, code_mode, fieldIndex);
   39117          13 :         case TAG_MPEG4_DirectiveSound:
   39118             :                 return DirectiveSound_get_field_index(node, inField, code_mode, fieldIndex);
   39119           4 :         case TAG_MPEG4_Hierarchical3DMesh:
   39120             :                 return Hierarchical3DMesh_get_field_index(node, inField, code_mode, fieldIndex);
   39121          48 :         case TAG_MPEG4_MaterialKey:
   39122             :                 return MaterialKey_get_field_index(node, inField, code_mode, fieldIndex);
   39123          19 :         case TAG_MPEG4_PerceptualParameters:
   39124             :                 return PerceptualParameters_get_field_index(node, inField, code_mode, fieldIndex);
   39125          13 :         case TAG_MPEG4_TemporalTransform:
   39126             :                 return TemporalTransform_get_field_index(node, inField, code_mode, fieldIndex);
   39127           9 :         case TAG_MPEG4_TemporalGroup:
   39128             :                 return TemporalGroup_get_field_index(node, inField, code_mode, fieldIndex);
   39129          25 :         case TAG_MPEG4_ServerCommand:
   39130             :                 return ServerCommand_get_field_index(node, inField, code_mode, fieldIndex);
   39131         184 :         case TAG_MPEG4_InputSensor:
   39132             :                 return InputSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39133           7 :         case TAG_MPEG4_MatteTexture:
   39134             :                 return MatteTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39135           6 :         case TAG_MPEG4_MediaBuffer:
   39136             :                 return MediaBuffer_get_field_index(node, inField, code_mode, fieldIndex);
   39137         371 :         case TAG_MPEG4_MediaControl:
   39138             :                 return MediaControl_get_field_index(node, inField, code_mode, fieldIndex);
   39139           6 :         case TAG_MPEG4_MediaSensor:
   39140             :                 return MediaSensor_get_field_index(node, inField, code_mode, fieldIndex);
   39141         103 :         case TAG_MPEG4_BitWrapper:
   39142             :                 return BitWrapper_get_field_index(node, inField, code_mode, fieldIndex);
   39143           4 :         case TAG_MPEG4_CoordinateInterpolator4D:
   39144             :                 return CoordinateInterpolator4D_get_field_index(node, inField, code_mode, fieldIndex);
   39145           7 :         case TAG_MPEG4_DepthImage:
   39146             :                 return DepthImage_get_field_index(node, inField, code_mode, fieldIndex);
   39147          13 :         case TAG_MPEG4_FFD:
   39148             :                 return FFD_get_field_index(node, inField, code_mode, fieldIndex);
   39149           5 :         case TAG_MPEG4_Implicit:
   39150             :                 return Implicit_get_field_index(node, inField, code_mode, fieldIndex);
   39151           4 :         case TAG_MPEG4_XXLFM_Appearance:
   39152             :                 return XXLFM_Appearance_get_field_index(node, inField, code_mode, fieldIndex);
   39153           2 :         case TAG_MPEG4_XXLFM_BlendList:
   39154             :                 return XXLFM_BlendList_get_field_index(node, inField, code_mode, fieldIndex);
   39155           2 :         case TAG_MPEG4_XXLFM_FrameList:
   39156             :                 return XXLFM_FrameList_get_field_index(node, inField, code_mode, fieldIndex);
   39157           5 :         case TAG_MPEG4_XXLFM_LightMap:
   39158             :                 return XXLFM_LightMap_get_field_index(node, inField, code_mode, fieldIndex);
   39159           4 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   39160             :                 return XXLFM_SurfaceMapList_get_field_index(node, inField, code_mode, fieldIndex);
   39161           4 :         case TAG_MPEG4_XXLFM_ViewMapList:
   39162             :                 return XXLFM_ViewMapList_get_field_index(node, inField, code_mode, fieldIndex);
   39163          23 :         case TAG_MPEG4_MeshGrid:
   39164             :                 return MeshGrid_get_field_index(node, inField, code_mode, fieldIndex);
   39165         165 :         case TAG_MPEG4_NonLinearDeformer:
   39166             :                 return NonLinearDeformer_get_field_index(node, inField, code_mode, fieldIndex);
   39167           8 :         case TAG_MPEG4_NurbsCurve:
   39168             :                 return NurbsCurve_get_field_index(node, inField, code_mode, fieldIndex);
   39169           8 :         case TAG_MPEG4_NurbsCurve2D:
   39170             :                 return NurbsCurve2D_get_field_index(node, inField, code_mode, fieldIndex);
   39171          18 :         case TAG_MPEG4_NurbsSurface:
   39172             :                 return NurbsSurface_get_field_index(node, inField, code_mode, fieldIndex);
   39173           4 :         case TAG_MPEG4_OctreeImage:
   39174             :                 return OctreeImage_get_field_index(node, inField, code_mode, fieldIndex);
   39175          25 :         case TAG_MPEG4_XXParticles:
   39176             :                 return XXParticles_get_field_index(node, inField, code_mode, fieldIndex);
   39177           2 :         case TAG_MPEG4_XXParticleInitBox:
   39178             :                 return XXParticleInitBox_get_field_index(node, inField, code_mode, fieldIndex);
   39179           4 :         case TAG_MPEG4_XXPlanarObstacle:
   39180             :                 return XXPlanarObstacle_get_field_index(node, inField, code_mode, fieldIndex);
   39181           4 :         case TAG_MPEG4_XXPointAttractor:
   39182             :                 return XXPointAttractor_get_field_index(node, inField, code_mode, fieldIndex);
   39183           5 :         case TAG_MPEG4_PointTexture:
   39184             :                 return PointTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39185          13 :         case TAG_MPEG4_PositionAnimator:
   39186             :                 return PositionAnimator_get_field_index(node, inField, code_mode, fieldIndex);
   39187          13 :         case TAG_MPEG4_PositionAnimator2D:
   39188             :                 return PositionAnimator2D_get_field_index(node, inField, code_mode, fieldIndex);
   39189           4 :         case TAG_MPEG4_PositionInterpolator4D:
   39190             :                 return PositionInterpolator4D_get_field_index(node, inField, code_mode, fieldIndex);
   39191          20 :         case TAG_MPEG4_ProceduralTexture:
   39192             :                 return ProceduralTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39193          10 :         case TAG_MPEG4_Quadric:
   39194             :                 return Quadric_get_field_index(node, inField, code_mode, fieldIndex);
   39195          24 :         case TAG_MPEG4_SBBone:
   39196             :                 return SBBone_get_field_index(node, inField, code_mode, fieldIndex);
   39197           6 :         case TAG_MPEG4_SBMuscle:
   39198             :                 return SBMuscle_get_field_index(node, inField, code_mode, fieldIndex);
   39199           7 :         case TAG_MPEG4_SBSegment:
   39200             :                 return SBSegment_get_field_index(node, inField, code_mode, fieldIndex);
   39201           9 :         case TAG_MPEG4_SBSite:
   39202             :                 return SBSite_get_field_index(node, inField, code_mode, fieldIndex);
   39203          15 :         case TAG_MPEG4_SBSkinnedModel:
   39204             :                 return SBSkinnedModel_get_field_index(node, inField, code_mode, fieldIndex);
   39205           2 :         case TAG_MPEG4_SBVCAnimation:
   39206             :                 return SBVCAnimation_get_field_index(node, inField, code_mode, fieldIndex);
   39207          11 :         case TAG_MPEG4_ScalarAnimator:
   39208             :                 return ScalarAnimator_get_field_index(node, inField, code_mode, fieldIndex);
   39209           2 :         case TAG_MPEG4_SimpleTexture:
   39210             :                 return SimpleTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39211           3 :         case TAG_MPEG4_SolidRep:
   39212             :                 return SolidRep_get_field_index(node, inField, code_mode, fieldIndex);
   39213          26 :         case TAG_MPEG4_SubdivisionSurface:
   39214             :                 return SubdivisionSurface_get_field_index(node, inField, code_mode, fieldIndex);
   39215           7 :         case TAG_MPEG4_SubdivSurfaceSector:
   39216             :                 return SubdivSurfaceSector_get_field_index(node, inField, code_mode, fieldIndex);
   39217           4 :         case TAG_MPEG4_WaveletSubdivisionSurface:
   39218             :                 return WaveletSubdivisionSurface_get_field_index(node, inField, code_mode, fieldIndex);
   39219         122 :         case TAG_MPEG4_Clipper2D:
   39220             :                 return Clipper2D_get_field_index(node, inField, code_mode, fieldIndex);
   39221        2024 :         case TAG_MPEG4_ColorTransform:
   39222             :                 return ColorTransform_get_field_index(node, inField, code_mode, fieldIndex);
   39223           1 :         case TAG_MPEG4_Ellipse:
   39224             :                 return Ellipse_get_field_index(node, inField, code_mode, fieldIndex);
   39225         906 :         case TAG_MPEG4_LinearGradient:
   39226             :                 return LinearGradient_get_field_index(node, inField, code_mode, fieldIndex);
   39227         185 :         case TAG_MPEG4_PathLayout:
   39228             :                 return PathLayout_get_field_index(node, inField, code_mode, fieldIndex);
   39229         221 :         case TAG_MPEG4_RadialGradient:
   39230             :                 return RadialGradient_get_field_index(node, inField, code_mode, fieldIndex);
   39231          11 :         case TAG_MPEG4_SynthesizedTexture:
   39232             :                 return SynthesizedTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39233       27524 :         case TAG_MPEG4_TransformMatrix2D:
   39234             :                 return TransformMatrix2D_get_field_index(node, inField, code_mode, fieldIndex);
   39235         174 :         case TAG_MPEG4_Viewport:
   39236             :                 return Viewport_get_field_index(node, inField, code_mode, fieldIndex);
   39237        1164 :         case TAG_MPEG4_XCurve2D:
   39238             :                 return XCurve2D_get_field_index(node, inField, code_mode, fieldIndex);
   39239          17 :         case TAG_MPEG4_XFontStyle:
   39240             :                 return XFontStyle_get_field_index(node, inField, code_mode, fieldIndex);
   39241         303 :         case TAG_MPEG4_XLineProperties:
   39242             :                 return XLineProperties_get_field_index(node, inField, code_mode, fieldIndex);
   39243          18 :         case TAG_MPEG4_AdvancedAudioBuffer:
   39244             :                 return AdvancedAudioBuffer_get_field_index(node, inField, code_mode, fieldIndex);
   39245          22 :         case TAG_MPEG4_AudioChannelConfig:
   39246             :                 return AudioChannelConfig_get_field_index(node, inField, code_mode, fieldIndex);
   39247           8 :         case TAG_MPEG4_DepthImageV2:
   39248             :                 return DepthImageV2_get_field_index(node, inField, code_mode, fieldIndex);
   39249           4 :         case TAG_MPEG4_MorphShape:
   39250             :                 return MorphShape_get_field_index(node, inField, code_mode, fieldIndex);
   39251           8 :         case TAG_MPEG4_MultiTexture:
   39252             :                 return MultiTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39253           8 :         case TAG_MPEG4_PointTextureV2:
   39254             :                 return PointTextureV2_get_field_index(node, inField, code_mode, fieldIndex);
   39255          10 :         case TAG_MPEG4_SBVCAnimationV2:
   39256             :                 return SBVCAnimationV2_get_field_index(node, inField, code_mode, fieldIndex);
   39257           5 :         case TAG_MPEG4_SimpleTextureV2:
   39258             :                 return SimpleTextureV2_get_field_index(node, inField, code_mode, fieldIndex);
   39259           7 :         case TAG_MPEG4_SurroundingSound:
   39260             :                 return SurroundingSound_get_field_index(node, inField, code_mode, fieldIndex);
   39261           9 :         case TAG_MPEG4_Transform3DAudio:
   39262             :                 return Transform3DAudio_get_field_index(node, inField, code_mode, fieldIndex);
   39263         120 :         case TAG_MPEG4_WideSound:
   39264             :                 return WideSound_get_field_index(node, inField, code_mode, fieldIndex);
   39265          16 :         case TAG_MPEG4_ScoreShape:
   39266             :                 return ScoreShape_get_field_index(node, inField, code_mode, fieldIndex);
   39267          31 :         case TAG_MPEG4_MusicScore:
   39268             :                 return MusicScore_get_field_index(node, inField, code_mode, fieldIndex);
   39269           1 :         case TAG_MPEG4_FootPrintSetNode:
   39270             :                 return FootPrintSetNode_get_field_index(node, inField, code_mode, fieldIndex);
   39271           2 :         case TAG_MPEG4_FootPrintNode:
   39272             :                 return FootPrintNode_get_field_index(node, inField, code_mode, fieldIndex);
   39273           8 :         case TAG_MPEG4_BuildingPartNode:
   39274             :                 return BuildingPartNode_get_field_index(node, inField, code_mode, fieldIndex);
   39275          12 :         case TAG_MPEG4_RoofNode:
   39276             :                 return RoofNode_get_field_index(node, inField, code_mode, fieldIndex);
   39277          13 :         case TAG_MPEG4_FacadeNode:
   39278             :                 return FacadeNode_get_field_index(node, inField, code_mode, fieldIndex);
   39279          42 :         case TAG_MPEG4_Shadow:
   39280             :                 return Shadow_get_field_index(node, inField, code_mode, fieldIndex);
   39281         181 :         case TAG_MPEG4_CacheTexture:
   39282             :                 return CacheTexture_get_field_index(node, inField, code_mode, fieldIndex);
   39283         104 :         case TAG_MPEG4_EnvironmentTest:
   39284             :                 return EnvironmentTest_get_field_index(node, inField, code_mode, fieldIndex);
   39285          10 :         case TAG_MPEG4_KeyNavigator:
   39286             :                 return KeyNavigator_get_field_index(node, inField, code_mode, fieldIndex);
   39287           4 :         case TAG_MPEG4_SpacePartition:
   39288             :                 return SpacePartition_get_field_index(node, inField, code_mode, fieldIndex);
   39289           6 :         case TAG_MPEG4_Storage:
   39290             :                 return Storage_get_field_index(node, inField, code_mode, fieldIndex);
   39291             :         default:
   39292             :                 return GF_BAD_PARAM;
   39293             :         }
   39294             : }
   39295             : 
   39296        7531 : Bool gf_sg_mpeg4_node_get_aq_info(GF_Node *node, u32 FieldIndex, u8 *QType, u8 *AType, Fixed *b_min, Fixed *b_max, u32 *QT13_bits)
   39297             : {
   39298        7531 :         switch (node->sgprivate->tag) {
   39299             :         case TAG_MPEG4_Anchor:
   39300             :                 return Anchor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39301             :         case TAG_MPEG4_AnimationStream:
   39302             :                 return AnimationStream_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39303             :         case TAG_MPEG4_Appearance:
   39304             :                 return Appearance_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39305          10 :         case TAG_MPEG4_AudioBuffer:
   39306          10 :                 return AudioBuffer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39307             :         case TAG_MPEG4_AudioClip:
   39308             :                 return AudioClip_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39309             :         case TAG_MPEG4_AudioDelay:
   39310             :                 return AudioDelay_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39311             :         case TAG_MPEG4_AudioFX:
   39312             :                 return AudioFX_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39313             :         case TAG_MPEG4_AudioMix:
   39314             :                 return AudioMix_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39315             :         case TAG_MPEG4_AudioSource:
   39316             :                 return AudioSource_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39317             :         case TAG_MPEG4_AudioSwitch:
   39318             :                 return AudioSwitch_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39319             :         case TAG_MPEG4_Background:
   39320             :                 return Background_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39321             :         case TAG_MPEG4_Background2D:
   39322             :                 return Background2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39323             :         case TAG_MPEG4_Billboard:
   39324             :                 return Billboard_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39325             :         case TAG_MPEG4_Bitmap:
   39326             :                 return Bitmap_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39327             :         case TAG_MPEG4_Box:
   39328             :                 return Box_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39329             :         case TAG_MPEG4_Circle:
   39330             :                 return Circle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39331             :         case TAG_MPEG4_Collision:
   39332             :                 return Collision_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39333             :         case TAG_MPEG4_Color:
   39334             :                 return Color_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39335             :         case TAG_MPEG4_ColorInterpolator:
   39336             :                 return ColorInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39337             :         case TAG_MPEG4_CompositeTexture2D:
   39338             :                 return CompositeTexture2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39339             :         case TAG_MPEG4_CompositeTexture3D:
   39340             :                 return CompositeTexture3D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39341             :         case TAG_MPEG4_Conditional:
   39342             :                 return Conditional_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39343             :         case TAG_MPEG4_Cone:
   39344             :                 return Cone_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39345             :         case TAG_MPEG4_Coordinate:
   39346             :                 return Coordinate_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39347             :         case TAG_MPEG4_Coordinate2D:
   39348             :                 return Coordinate2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39349             :         case TAG_MPEG4_CoordinateInterpolator:
   39350             :                 return CoordinateInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39351             :         case TAG_MPEG4_CoordinateInterpolator2D:
   39352             :                 return CoordinateInterpolator2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39353             :         case TAG_MPEG4_Curve2D:
   39354             :                 return Curve2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39355             :         case TAG_MPEG4_Cylinder:
   39356             :                 return Cylinder_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39357             :         case TAG_MPEG4_CylinderSensor:
   39358             :                 return CylinderSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39359             :         case TAG_MPEG4_DirectionalLight:
   39360             :                 return DirectionalLight_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39361             :         case TAG_MPEG4_DiscSensor:
   39362             :                 return DiscSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39363        1110 :         case TAG_MPEG4_ElevationGrid:
   39364        1110 :                 return ElevationGrid_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39365             :         case TAG_MPEG4_Expression:
   39366             :                 return Expression_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39367         334 :         case TAG_MPEG4_Extrusion:
   39368         334 :                 return Extrusion_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39369             :         case TAG_MPEG4_Face:
   39370             :                 return Face_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39371             :         case TAG_MPEG4_FaceDefMesh:
   39372             :                 return FaceDefMesh_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39373             :         case TAG_MPEG4_FaceDefTables:
   39374             :                 return FaceDefTables_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39375             :         case TAG_MPEG4_FaceDefTransform:
   39376             :                 return FaceDefTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39377          68 :         case TAG_MPEG4_FAP:
   39378          68 :                 return FAP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39379             :         case TAG_MPEG4_FDP:
   39380             :                 return FDP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39381           9 :         case TAG_MPEG4_FIT:
   39382           9 :                 return FIT_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39383             :         case TAG_MPEG4_Fog:
   39384             :                 return Fog_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39385             :         case TAG_MPEG4_FontStyle:
   39386             :                 return FontStyle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39387             :         case TAG_MPEG4_Form:
   39388             :                 return Form_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39389             :         case TAG_MPEG4_Group:
   39390             :                 return Group_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39391             :         case TAG_MPEG4_ImageTexture:
   39392             :                 return ImageTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39393         266 :         case TAG_MPEG4_IndexedFaceSet:
   39394         266 :                 return IndexedFaceSet_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39395             :         case TAG_MPEG4_IndexedFaceSet2D:
   39396             :                 return IndexedFaceSet2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39397             :         case TAG_MPEG4_IndexedLineSet:
   39398             :                 return IndexedLineSet_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39399             :         case TAG_MPEG4_IndexedLineSet2D:
   39400             :                 return IndexedLineSet2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39401             :         case TAG_MPEG4_Inline:
   39402             :                 return Inline_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39403             :         case TAG_MPEG4_LOD:
   39404             :                 return LOD_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39405             :         case TAG_MPEG4_Layer2D:
   39406             :                 return Layer2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39407             :         case TAG_MPEG4_Layer3D:
   39408             :                 return Layer3D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39409             :         case TAG_MPEG4_Layout:
   39410             :                 return Layout_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39411             :         case TAG_MPEG4_LineProperties:
   39412             :                 return LineProperties_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39413             :         case TAG_MPEG4_ListeningPoint:
   39414             :                 return ListeningPoint_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39415          10 :         case TAG_MPEG4_Material:
   39416          10 :                 return Material_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39417             :         case TAG_MPEG4_Material2D:
   39418             :                 return Material2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39419             :         case TAG_MPEG4_MovieTexture:
   39420             :                 return MovieTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39421             :         case TAG_MPEG4_NavigationInfo:
   39422             :                 return NavigationInfo_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39423             :         case TAG_MPEG4_Normal:
   39424             :                 return Normal_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39425             :         case TAG_MPEG4_NormalInterpolator:
   39426             :                 return NormalInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39427             :         case TAG_MPEG4_OrderedGroup:
   39428             :                 return OrderedGroup_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39429             :         case TAG_MPEG4_OrientationInterpolator:
   39430             :                 return OrientationInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39431             :         case TAG_MPEG4_PixelTexture:
   39432             :                 return PixelTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39433             :         case TAG_MPEG4_PlaneSensor:
   39434             :                 return PlaneSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39435             :         case TAG_MPEG4_PlaneSensor2D:
   39436             :                 return PlaneSensor2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39437           7 :         case TAG_MPEG4_PointLight:
   39438           7 :                 return PointLight_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39439             :         case TAG_MPEG4_PointSet:
   39440             :                 return PointSet_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39441             :         case TAG_MPEG4_PointSet2D:
   39442             :                 return PointSet2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39443             :         case TAG_MPEG4_PositionInterpolator:
   39444             :                 return PositionInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39445             :         case TAG_MPEG4_PositionInterpolator2D:
   39446             :                 return PositionInterpolator2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39447             :         case TAG_MPEG4_ProximitySensor2D:
   39448             :                 return ProximitySensor2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39449             :         case TAG_MPEG4_ProximitySensor:
   39450             :                 return ProximitySensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39451         169 :         case TAG_MPEG4_QuantizationParameter:
   39452         169 :                 return QuantizationParameter_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39453             :         case TAG_MPEG4_Rectangle:
   39454             :                 return Rectangle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39455             :         case TAG_MPEG4_ScalarInterpolator:
   39456             :                 return ScalarInterpolator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39457             :         case TAG_MPEG4_Script:
   39458             :                 return Script_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39459             :         case TAG_MPEG4_Shape:
   39460             :                 return Shape_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39461          10 :         case TAG_MPEG4_Sound:
   39462          10 :                 return Sound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39463             :         case TAG_MPEG4_Sound2D:
   39464             :                 return Sound2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39465             :         case TAG_MPEG4_Sphere:
   39466             :                 return Sphere_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39467             :         case TAG_MPEG4_SphereSensor:
   39468             :                 return SphereSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39469          10 :         case TAG_MPEG4_SpotLight:
   39470          10 :                 return SpotLight_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39471             :         case TAG_MPEG4_Switch:
   39472             :                 return Switch_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39473             :         case TAG_MPEG4_TermCap:
   39474             :                 return TermCap_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39475             :         case TAG_MPEG4_Text:
   39476             :                 return Text_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39477             :         case TAG_MPEG4_TextureCoordinate:
   39478             :                 return TextureCoordinate_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39479             :         case TAG_MPEG4_TextureTransform:
   39480             :                 return TextureTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39481             :         case TAG_MPEG4_TimeSensor:
   39482             :                 return TimeSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39483             :         case TAG_MPEG4_TouchSensor:
   39484             :                 return TouchSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39485             :         case TAG_MPEG4_Transform:
   39486             :                 return Transform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39487         133 :         case TAG_MPEG4_Transform2D:
   39488         133 :                 return Transform2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39489          81 :         case TAG_MPEG4_Valuator:
   39490          81 :                 return Valuator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39491             :         case TAG_MPEG4_Viewpoint:
   39492             :                 return Viewpoint_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39493             :         case TAG_MPEG4_VisibilitySensor:
   39494             :                 return VisibilitySensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39495             :         case TAG_MPEG4_Viseme:
   39496             :                 return Viseme_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39497             :         case TAG_MPEG4_WorldInfo:
   39498             :                 return WorldInfo_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39499          10 :         case TAG_MPEG4_AcousticMaterial:
   39500          10 :                 return AcousticMaterial_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39501           6 :         case TAG_MPEG4_AcousticScene:
   39502           6 :                 return AcousticScene_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39503             :         case TAG_MPEG4_ApplicationWindow:
   39504             :                 return ApplicationWindow_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39505         296 :         case TAG_MPEG4_BAP:
   39506         296 :                 return BAP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39507             :         case TAG_MPEG4_BDP:
   39508             :                 return BDP_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39509             :         case TAG_MPEG4_Body:
   39510             :                 return Body_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39511             :         case TAG_MPEG4_BodyDefTable:
   39512             :                 return BodyDefTable_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39513             :         case TAG_MPEG4_BodySegmentConnectionHint:
   39514             :                 return BodySegmentConnectionHint_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39515          13 :         case TAG_MPEG4_DirectiveSound:
   39516          13 :                 return DirectiveSound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39517             :         case TAG_MPEG4_Hierarchical3DMesh:
   39518             :                 return Hierarchical3DMesh_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39519             :         case TAG_MPEG4_MaterialKey:
   39520             :                 return MaterialKey_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39521          19 :         case TAG_MPEG4_PerceptualParameters:
   39522          19 :                 return PerceptualParameters_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39523             :         case TAG_MPEG4_TemporalTransform:
   39524             :                 return TemporalTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39525             :         case TAG_MPEG4_TemporalGroup:
   39526             :                 return TemporalGroup_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39527             :         case TAG_MPEG4_ServerCommand:
   39528             :                 return ServerCommand_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39529             :         case TAG_MPEG4_InputSensor:
   39530             :                 return InputSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39531             :         case TAG_MPEG4_MatteTexture:
   39532             :                 return MatteTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39533             :         case TAG_MPEG4_MediaBuffer:
   39534             :                 return MediaBuffer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39535             :         case TAG_MPEG4_MediaControl:
   39536             :                 return MediaControl_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39537             :         case TAG_MPEG4_MediaSensor:
   39538             :                 return MediaSensor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39539             :         case TAG_MPEG4_BitWrapper:
   39540             :                 return BitWrapper_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39541             :         case TAG_MPEG4_CoordinateInterpolator4D:
   39542             :                 return CoordinateInterpolator4D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39543             :         case TAG_MPEG4_DepthImage:
   39544             :                 return DepthImage_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39545          13 :         case TAG_MPEG4_FFD:
   39546          13 :                 return FFD_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39547             :         case TAG_MPEG4_Implicit:
   39548             :                 return Implicit_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39549             :         case TAG_MPEG4_XXLFM_Appearance:
   39550             :                 return XXLFM_Appearance_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39551             :         case TAG_MPEG4_XXLFM_BlendList:
   39552             :                 return XXLFM_BlendList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39553             :         case TAG_MPEG4_XXLFM_FrameList:
   39554             :                 return XXLFM_FrameList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39555             :         case TAG_MPEG4_XXLFM_LightMap:
   39556             :                 return XXLFM_LightMap_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39557             :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   39558             :                 return XXLFM_SurfaceMapList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39559             :         case TAG_MPEG4_XXLFM_ViewMapList:
   39560             :                 return XXLFM_ViewMapList_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39561          23 :         case TAG_MPEG4_MeshGrid:
   39562          23 :                 return MeshGrid_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39563             :         case TAG_MPEG4_NonLinearDeformer:
   39564             :                 return NonLinearDeformer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39565             :         case TAG_MPEG4_NurbsCurve:
   39566             :                 return NurbsCurve_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39567             :         case TAG_MPEG4_NurbsCurve2D:
   39568             :                 return NurbsCurve2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39569          18 :         case TAG_MPEG4_NurbsSurface:
   39570          18 :                 return NurbsSurface_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39571             :         case TAG_MPEG4_OctreeImage:
   39572             :                 return OctreeImage_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39573             :         case TAG_MPEG4_XXParticles:
   39574             :                 return XXParticles_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39575             :         case TAG_MPEG4_XXParticleInitBox:
   39576             :                 return XXParticleInitBox_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39577             :         case TAG_MPEG4_XXPlanarObstacle:
   39578             :                 return XXPlanarObstacle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39579             :         case TAG_MPEG4_XXPointAttractor:
   39580             :                 return XXPointAttractor_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39581             :         case TAG_MPEG4_PointTexture:
   39582             :                 return PointTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39583             :         case TAG_MPEG4_PositionAnimator:
   39584             :                 return PositionAnimator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39585             :         case TAG_MPEG4_PositionAnimator2D:
   39586             :                 return PositionAnimator2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39587             :         case TAG_MPEG4_PositionInterpolator4D:
   39588             :                 return PositionInterpolator4D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39589          20 :         case TAG_MPEG4_ProceduralTexture:
   39590          20 :                 return ProceduralTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39591          10 :         case TAG_MPEG4_Quadric:
   39592          10 :                 return Quadric_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39593          24 :         case TAG_MPEG4_SBBone:
   39594          24 :                 return SBBone_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39595             :         case TAG_MPEG4_SBMuscle:
   39596             :                 return SBMuscle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39597             :         case TAG_MPEG4_SBSegment:
   39598             :                 return SBSegment_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39599             :         case TAG_MPEG4_SBSite:
   39600             :                 return SBSite_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39601             :         case TAG_MPEG4_SBSkinnedModel:
   39602             :                 return SBSkinnedModel_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39603             :         case TAG_MPEG4_SBVCAnimation:
   39604             :                 return SBVCAnimation_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39605             :         case TAG_MPEG4_ScalarAnimator:
   39606             :                 return ScalarAnimator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39607             :         case TAG_MPEG4_SimpleTexture:
   39608             :                 return SimpleTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39609             :         case TAG_MPEG4_SolidRep:
   39610             :                 return SolidRep_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39611             :         case TAG_MPEG4_SubdivisionSurface:
   39612             :                 return SubdivisionSurface_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39613           7 :         case TAG_MPEG4_SubdivSurfaceSector:
   39614           7 :                 return SubdivSurfaceSector_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39615             :         case TAG_MPEG4_WaveletSubdivisionSurface:
   39616             :                 return WaveletSubdivisionSurface_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39617             :         case TAG_MPEG4_Clipper2D:
   39618             :                 return Clipper2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39619          63 :         case TAG_MPEG4_ColorTransform:
   39620          63 :                 return ColorTransform_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39621             :         case TAG_MPEG4_Ellipse:
   39622             :                 return Ellipse_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39623          95 :         case TAG_MPEG4_LinearGradient:
   39624          95 :                 return LinearGradient_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39625             :         case TAG_MPEG4_PathLayout:
   39626             :                 return PathLayout_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39627          64 :         case TAG_MPEG4_RadialGradient:
   39628          64 :                 return RadialGradient_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39629          11 :         case TAG_MPEG4_SynthesizedTexture:
   39630          11 :                 return SynthesizedTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39631           9 :         case TAG_MPEG4_TransformMatrix2D:
   39632           9 :                 return TransformMatrix2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39633          24 :         case TAG_MPEG4_Viewport:
   39634          24 :                 return Viewport_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39635             :         case TAG_MPEG4_XCurve2D:
   39636             :                 return XCurve2D_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39637             :         case TAG_MPEG4_XFontStyle:
   39638             :                 return XFontStyle_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39639          21 :         case TAG_MPEG4_XLineProperties:
   39640          21 :                 return XLineProperties_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39641          18 :         case TAG_MPEG4_AdvancedAudioBuffer:
   39642          18 :                 return AdvancedAudioBuffer_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39643          22 :         case TAG_MPEG4_AudioChannelConfig:
   39644          22 :                 return AudioChannelConfig_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39645             :         case TAG_MPEG4_DepthImageV2:
   39646             :                 return DepthImageV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39647             :         case TAG_MPEG4_MorphShape:
   39648             :                 return MorphShape_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39649             :         case TAG_MPEG4_MultiTexture:
   39650             :                 return MultiTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39651             :         case TAG_MPEG4_PointTextureV2:
   39652             :                 return PointTextureV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39653             :         case TAG_MPEG4_SBVCAnimationV2:
   39654             :                 return SBVCAnimationV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39655             :         case TAG_MPEG4_SimpleTextureV2:
   39656             :                 return SimpleTextureV2_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39657             :         case TAG_MPEG4_SurroundingSound:
   39658             :                 return SurroundingSound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39659           9 :         case TAG_MPEG4_Transform3DAudio:
   39660           9 :                 return Transform3DAudio_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39661          15 :         case TAG_MPEG4_WideSound:
   39662          15 :                 return WideSound_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39663             :         case TAG_MPEG4_ScoreShape:
   39664             :                 return ScoreShape_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39665             :         case TAG_MPEG4_MusicScore:
   39666             :                 return MusicScore_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39667             :         case TAG_MPEG4_FootPrintSetNode:
   39668             :                 return FootPrintSetNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39669             :         case TAG_MPEG4_FootPrintNode:
   39670             :                 return FootPrintNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39671             :         case TAG_MPEG4_BuildingPartNode:
   39672             :                 return BuildingPartNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39673             :         case TAG_MPEG4_RoofNode:
   39674             :                 return RoofNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39675             :         case TAG_MPEG4_FacadeNode:
   39676             :                 return FacadeNode_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39677             :         case TAG_MPEG4_Shadow:
   39678             :                 return Shadow_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39679             :         case TAG_MPEG4_CacheTexture:
   39680             :                 return CacheTexture_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39681             :         case TAG_MPEG4_EnvironmentTest:
   39682             :                 return EnvironmentTest_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39683             :         case TAG_MPEG4_KeyNavigator:
   39684             :                 return KeyNavigator_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39685             :         case TAG_MPEG4_SpacePartition:
   39686             :                 return SpacePartition_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39687             :         case TAG_MPEG4_Storage:
   39688             :                 return Storage_get_aq_info(node, FieldIndex, QType, AType, b_min, b_max, QT13_bits);
   39689             :         default:
   39690             :                 return 0;
   39691             :         }
   39692             : }
   39693             : 
   39694         316 : u32 gf_sg_mpeg4_node_get_child_ndt(GF_Node *node)
   39695             : {
   39696         316 :         switch (node->sgprivate->tag) {
   39697             :         case TAG_MPEG4_Anchor:
   39698             :                 return NDT_SF3DNode;
   39699             :         case TAG_MPEG4_AudioBuffer:
   39700             :                 return NDT_SFAudioNode;
   39701             :         case TAG_MPEG4_AudioDelay:
   39702             :                 return NDT_SFAudioNode;
   39703             :         case TAG_MPEG4_AudioFX:
   39704             :                 return NDT_SFAudioNode;
   39705             :         case TAG_MPEG4_AudioMix:
   39706             :                 return NDT_SFAudioNode;
   39707             :         case TAG_MPEG4_AudioSource:
   39708             :                 return NDT_SFAudioNode;
   39709             :         case TAG_MPEG4_AudioSwitch:
   39710             :                 return NDT_SFAudioNode;
   39711             :         case TAG_MPEG4_Billboard:
   39712             :                 return NDT_SF3DNode;
   39713             :         case TAG_MPEG4_Collision:
   39714             :                 return NDT_SF3DNode;
   39715             :         case TAG_MPEG4_CompositeTexture2D:
   39716             :                 return NDT_SF2DNode;
   39717             :         case TAG_MPEG4_CompositeTexture3D:
   39718             :                 return NDT_SF3DNode;
   39719             :         case TAG_MPEG4_Face:
   39720             :                 return NDT_SF3DNode;
   39721             :         case TAG_MPEG4_FaceDefTables:
   39722             :                 return NDT_SFFaceDefMeshNode;
   39723             :         case TAG_MPEG4_FDP:
   39724             :                 return NDT_SFFaceDefTablesNode;
   39725             :         case TAG_MPEG4_Form:
   39726             :                 return NDT_SF2DNode;
   39727             :         case TAG_MPEG4_Group:
   39728             :                 return NDT_SF3DNode;
   39729             :         case TAG_MPEG4_LOD:
   39730             :                 return NDT_SF3DNode;
   39731             :         case TAG_MPEG4_Layer2D:
   39732             :                 return NDT_SF2DNode;
   39733             :         case TAG_MPEG4_Layer3D:
   39734             :                 return NDT_SF3DNode;
   39735             :         case TAG_MPEG4_Layout:
   39736             :                 return NDT_SF2DNode;
   39737             :         case TAG_MPEG4_OrderedGroup:
   39738             :                 return NDT_SF3DNode;
   39739             :         case TAG_MPEG4_Switch:
   39740             :                 return NDT_SF3DNode;
   39741             :         case TAG_MPEG4_Transform:
   39742             :                 return NDT_SF3DNode;
   39743             :         case TAG_MPEG4_Transform2D:
   39744             :                 return NDT_SF2DNode;
   39745             :         case TAG_MPEG4_BDP:
   39746             :                 return NDT_SFBodyDefTableNode;
   39747             :         case TAG_MPEG4_Body:
   39748             :                 return NDT_SF3DNode;
   39749             :         case TAG_MPEG4_TemporalTransform:
   39750             :                 return NDT_SF3DNode;
   39751             :         case TAG_MPEG4_TemporalGroup:
   39752             :                 return NDT_SFTemporalNode;
   39753             :         case TAG_MPEG4_FFD:
   39754             :                 return NDT_SF3DNode;
   39755             :         case TAG_MPEG4_XXLFM_Appearance:
   39756             :                 return NDT_SFLightMapNode;
   39757             :         case TAG_MPEG4_OctreeImage:
   39758             :                 return NDT_SFDepthImageNode;
   39759             :         case TAG_MPEG4_XXParticles:
   39760             :                 return NDT_SFInfluenceNode;
   39761             :         case TAG_MPEG4_SBBone:
   39762             :                 return NDT_SF3DNode;
   39763             :         case TAG_MPEG4_SBSegment:
   39764             :                 return NDT_SF3DNode;
   39765             :         case TAG_MPEG4_SBSite:
   39766             :                 return NDT_SF3DNode;
   39767             :         case TAG_MPEG4_SBSkinnedModel:
   39768             :                 return NDT_SFSBBoneNode;
   39769             :         case TAG_MPEG4_SBVCAnimation:
   39770             :                 return NDT_SF3DNode;
   39771             :         case TAG_MPEG4_SubdivisionSurface:
   39772             :                 return NDT_SFSubdivSurfaceSectorNode;
   39773             :         case TAG_MPEG4_Clipper2D:
   39774             :                 return NDT_SF2DNode;
   39775             :         case TAG_MPEG4_ColorTransform:
   39776             :                 return NDT_SF3DNode;
   39777             :         case TAG_MPEG4_PathLayout:
   39778             :                 return NDT_SF2DNode;
   39779             :         case TAG_MPEG4_TransformMatrix2D:
   39780             :                 return NDT_SF2DNode;
   39781             :         case TAG_MPEG4_AdvancedAudioBuffer:
   39782             :                 return NDT_SFAudioNode;
   39783             :         case TAG_MPEG4_AudioChannelConfig:
   39784             :                 return NDT_SFAudioNode;
   39785             :         case TAG_MPEG4_MorphShape:
   39786             :                 return NDT_SF3DNode;
   39787             :         case TAG_MPEG4_MultiTexture:
   39788             :                 return NDT_SFTextureNode;
   39789             :         case TAG_MPEG4_SBVCAnimationV2:
   39790             :                 return NDT_SF3DNode;
   39791             :         case TAG_MPEG4_Transform3DAudio:
   39792             :                 return NDT_SF3DNode;
   39793             :         case TAG_MPEG4_FootPrintSetNode:
   39794             :                 return NDT_SFGeometryNode;
   39795             :         case TAG_MPEG4_BuildingPartNode:
   39796             :                 return NDT_SFGeometryNode;
   39797             :         case TAG_MPEG4_FacadeNode:
   39798             :                 return NDT_SFGeometryNode;
   39799             :         case TAG_MPEG4_Shadow:
   39800             :                 return NDT_SF3DNode;
   39801             :         case TAG_MPEG4_SpacePartition:
   39802             :                 return NDT_SF3DNode;
   39803             :         default:
   39804             :                 return 0;
   39805             :         }
   39806             : }
   39807             : 
   39808             : 
   39809             : GF_EXPORT
   39810       19770 : u32 gf_node_mpeg4_type_by_class_name(const char *node_name)
   39811             : {
   39812       19770 :         if(!node_name) return 0;
   39813       19770 :         if (!strcmp(node_name, "Anchor")) return TAG_MPEG4_Anchor;
   39814       19764 :         if (!strcmp(node_name, "AnimationStream")) return TAG_MPEG4_AnimationStream;
   39815       19739 :         if (!strcmp(node_name, "Appearance")) return TAG_MPEG4_Appearance;
   39816       18191 :         if (!strcmp(node_name, "AudioBuffer")) return TAG_MPEG4_AudioBuffer;
   39817       18174 :         if (!strcmp(node_name, "AudioClip")) return TAG_MPEG4_AudioClip;
   39818       18153 :         if (!strcmp(node_name, "AudioDelay")) return TAG_MPEG4_AudioDelay;
   39819       18152 :         if (!strcmp(node_name, "AudioFX")) return TAG_MPEG4_AudioFX;
   39820       18151 :         if (!strcmp(node_name, "AudioMix")) return TAG_MPEG4_AudioMix;
   39821       18150 :         if (!strcmp(node_name, "AudioSource")) return TAG_MPEG4_AudioSource;
   39822       18126 :         if (!strcmp(node_name, "AudioSwitch")) return TAG_MPEG4_AudioSwitch;
   39823       18125 :         if (!strcmp(node_name, "Background")) return TAG_MPEG4_Background;
   39824       18099 :         if (!strcmp(node_name, "Background2D")) return TAG_MPEG4_Background2D;
   39825       17619 :         if (!strcmp(node_name, "Billboard")) return TAG_MPEG4_Billboard;
   39826       17615 :         if (!strcmp(node_name, "Bitmap")) return TAG_MPEG4_Bitmap;
   39827       17535 :         if (!strcmp(node_name, "Box")) return TAG_MPEG4_Box;
   39828       17466 :         if (!strcmp(node_name, "Circle")) return TAG_MPEG4_Circle;
   39829       17252 :         if (!strcmp(node_name, "Collision")) return TAG_MPEG4_Collision;
   39830       17229 :         if (!strcmp(node_name, "Color")) return TAG_MPEG4_Color;
   39831       17180 :         if (!strcmp(node_name, "ColorInterpolator")) return TAG_MPEG4_ColorInterpolator;
   39832       17173 :         if (!strcmp(node_name, "CompositeTexture2D")) return TAG_MPEG4_CompositeTexture2D;
   39833       17142 :         if (!strcmp(node_name, "CompositeTexture3D")) return TAG_MPEG4_CompositeTexture3D;
   39834       17139 :         if (!strcmp(node_name, "Conditional")) return TAG_MPEG4_Conditional;
   39835       16511 :         if (!strcmp(node_name, "Cone")) return TAG_MPEG4_Cone;
   39836       16484 :         if (!strcmp(node_name, "Coordinate")) return TAG_MPEG4_Coordinate;
   39837       16419 :         if (!strcmp(node_name, "Coordinate2D")) return TAG_MPEG4_Coordinate2D;
   39838       15909 :         if (!strcmp(node_name, "CoordinateInterpolator")) return TAG_MPEG4_CoordinateInterpolator;
   39839       15907 :         if (!strcmp(node_name, "CoordinateInterpolator2D")) return TAG_MPEG4_CoordinateInterpolator2D;
   39840       15904 :         if (!strcmp(node_name, "Curve2D")) return TAG_MPEG4_Curve2D;
   39841       15656 :         if (!strcmp(node_name, "Cylinder")) return TAG_MPEG4_Cylinder;
   39842       15620 :         if (!strcmp(node_name, "CylinderSensor")) return TAG_MPEG4_CylinderSensor;
   39843       15598 :         if (!strcmp(node_name, "DirectionalLight")) return TAG_MPEG4_DirectionalLight;
   39844       15589 :         if (!strcmp(node_name, "DiscSensor")) return TAG_MPEG4_DiscSensor;
   39845       15565 :         if (!strcmp(node_name, "ElevationGrid")) return TAG_MPEG4_ElevationGrid;
   39846       15543 :         if (!strcmp(node_name, "Expression")) return TAG_MPEG4_Expression;
   39847       15542 :         if (!strcmp(node_name, "Extrusion")) return TAG_MPEG4_Extrusion;
   39848       15520 :         if (!strcmp(node_name, "Face")) return TAG_MPEG4_Face;
   39849       15519 :         if (!strcmp(node_name, "FaceDefMesh")) return TAG_MPEG4_FaceDefMesh;
   39850       15518 :         if (!strcmp(node_name, "FaceDefTables")) return TAG_MPEG4_FaceDefTables;
   39851       15517 :         if (!strcmp(node_name, "FaceDefTransform")) return TAG_MPEG4_FaceDefTransform;
   39852       15516 :         if (!strcmp(node_name, "FAP")) return TAG_MPEG4_FAP;
   39853       15515 :         if (!strcmp(node_name, "FDP")) return TAG_MPEG4_FDP;
   39854       15514 :         if (!strcmp(node_name, "FIT")) return TAG_MPEG4_FIT;
   39855       15513 :         if (!strcmp(node_name, "Fog")) return TAG_MPEG4_Fog;
   39856       15508 :         if (!strcmp(node_name, "FontStyle")) return TAG_MPEG4_FontStyle;
   39857       15071 :         if (!strcmp(node_name, "Form")) return TAG_MPEG4_Form;
   39858       15031 :         if (!strcmp(node_name, "Group")) return TAG_MPEG4_Group;
   39859       14945 :         if (!strcmp(node_name, "ImageTexture")) return TAG_MPEG4_ImageTexture;
   39860       14817 :         if (!strcmp(node_name, "IndexedFaceSet")) return TAG_MPEG4_IndexedFaceSet;
   39861       14753 :         if (!strcmp(node_name, "IndexedFaceSet2D")) return TAG_MPEG4_IndexedFaceSet2D;
   39862       14592 :         if (!strcmp(node_name, "IndexedLineSet")) return TAG_MPEG4_IndexedLineSet;
   39863       14569 :         if (!strcmp(node_name, "IndexedLineSet2D")) return TAG_MPEG4_IndexedLineSet2D;
   39864       14505 :         if (!strcmp(node_name, "Inline")) return TAG_MPEG4_Inline;
   39865       14397 :         if (!strcmp(node_name, "LOD")) return TAG_MPEG4_LOD;
   39866       14395 :         if (!strcmp(node_name, "Layer2D")) return TAG_MPEG4_Layer2D;
   39867       14211 :         if (!strcmp(node_name, "Layer3D")) return TAG_MPEG4_Layer3D;
   39868       14181 :         if (!strcmp(node_name, "Layout")) return TAG_MPEG4_Layout;
   39869       13996 :         if (!strcmp(node_name, "LineProperties")) return TAG_MPEG4_LineProperties;
   39870       13790 :         if (!strcmp(node_name, "ListeningPoint")) return TAG_MPEG4_ListeningPoint;
   39871       13789 :         if (!strcmp(node_name, "Material")) return TAG_MPEG4_Material;
   39872       13696 :         if (!strcmp(node_name, "Material2D")) return TAG_MPEG4_Material2D;
   39873       12456 :         if (!strcmp(node_name, "MovieTexture")) return TAG_MPEG4_MovieTexture;
   39874       12399 :         if (!strcmp(node_name, "NavigationInfo")) return TAG_MPEG4_NavigationInfo;
   39875       12359 :         if (!strcmp(node_name, "Normal")) return TAG_MPEG4_Normal;
   39876       12338 :         if (!strcmp(node_name, "NormalInterpolator")) return TAG_MPEG4_NormalInterpolator;
   39877       12336 :         if (!strcmp(node_name, "OrderedGroup")) return TAG_MPEG4_OrderedGroup;
   39878       11950 :         if (!strcmp(node_name, "OrientationInterpolator")) return TAG_MPEG4_OrientationInterpolator;
   39879       11931 :         if (!strcmp(node_name, "PixelTexture")) return TAG_MPEG4_PixelTexture;
   39880       11906 :         if (!strcmp(node_name, "PlaneSensor")) return TAG_MPEG4_PlaneSensor;
   39881       11884 :         if (!strcmp(node_name, "PlaneSensor2D")) return TAG_MPEG4_PlaneSensor2D;
   39882       11829 :         if (!strcmp(node_name, "PointLight")) return TAG_MPEG4_PointLight;
   39883       11827 :         if (!strcmp(node_name, "PointSet")) return TAG_MPEG4_PointSet;
   39884       11805 :         if (!strcmp(node_name, "PointSet2D")) return TAG_MPEG4_PointSet2D;
   39885       11772 :         if (!strcmp(node_name, "PositionInterpolator")) return TAG_MPEG4_PositionInterpolator;
   39886       11760 :         if (!strcmp(node_name, "PositionInterpolator2D")) return TAG_MPEG4_PositionInterpolator2D;
   39887       11711 :         if (!strcmp(node_name, "ProximitySensor2D")) return TAG_MPEG4_ProximitySensor2D;
   39888       11688 :         if (!strcmp(node_name, "ProximitySensor")) return TAG_MPEG4_ProximitySensor;
   39889       11686 :         if (!strcmp(node_name, "QuantizationParameter")) return TAG_MPEG4_QuantizationParameter;
   39890       11605 :         if (!strcmp(node_name, "Rectangle")) return TAG_MPEG4_Rectangle;
   39891       11164 :         if (!strcmp(node_name, "ScalarInterpolator")) return TAG_MPEG4_ScalarInterpolator;
   39892       11113 :         if (!strcmp(node_name, "Script")) return TAG_MPEG4_Script;
   39893       11058 :         if (!strcmp(node_name, "Shape")) return TAG_MPEG4_Shape;
   39894        8285 :         if (!strcmp(node_name, "Sound")) return TAG_MPEG4_Sound;
   39895        8282 :         if (!strcmp(node_name, "Sound2D")) return TAG_MPEG4_Sound2D;
   39896        8255 :         if (!strcmp(node_name, "Sphere")) return TAG_MPEG4_Sphere;
   39897        8223 :         if (!strcmp(node_name, "SphereSensor")) return TAG_MPEG4_SphereSensor;
   39898        8201 :         if (!strcmp(node_name, "SpotLight")) return TAG_MPEG4_SpotLight;
   39899        8199 :         if (!strcmp(node_name, "Switch")) return TAG_MPEG4_Switch;
   39900        8149 :         if (!strcmp(node_name, "TermCap")) return TAG_MPEG4_TermCap;
   39901        8147 :         if (!strcmp(node_name, "Text")) return TAG_MPEG4_Text;
   39902        7188 :         if (!strcmp(node_name, "TextureCoordinate")) return TAG_MPEG4_TextureCoordinate;
   39903        7187 :         if (!strcmp(node_name, "TextureTransform")) return TAG_MPEG4_TextureTransform;
   39904        7147 :         if (!strcmp(node_name, "TimeSensor")) return TAG_MPEG4_TimeSensor;
   39905        6984 :         if (!strcmp(node_name, "TouchSensor")) return TAG_MPEG4_TouchSensor;
   39906        6537 :         if (!strcmp(node_name, "Transform")) return TAG_MPEG4_Transform;
   39907        6340 :         if (!strcmp(node_name, "Transform2D")) return TAG_MPEG4_Transform2D;
   39908        3466 :         if (!strcmp(node_name, "Valuator")) return TAG_MPEG4_Valuator;
   39909        2978 :         if (!strcmp(node_name, "Viewpoint")) return TAG_MPEG4_Viewpoint;
   39910        2922 :         if (!strcmp(node_name, "VisibilitySensor")) return TAG_MPEG4_VisibilitySensor;
   39911        2890 :         if (!strcmp(node_name, "Viseme")) return TAG_MPEG4_Viseme;
   39912        2889 :         if (!strcmp(node_name, "WorldInfo")) return TAG_MPEG4_WorldInfo;
   39913        2494 :         if (!strcmp(node_name, "AcousticMaterial")) return TAG_MPEG4_AcousticMaterial;
   39914        2493 :         if (!strcmp(node_name, "AcousticScene")) return TAG_MPEG4_AcousticScene;
   39915        2492 :         if (!strcmp(node_name, "ApplicationWindow")) return TAG_MPEG4_ApplicationWindow;
   39916        2491 :         if (!strcmp(node_name, "BAP")) return TAG_MPEG4_BAP;
   39917        2490 :         if (!strcmp(node_name, "BDP")) return TAG_MPEG4_BDP;
   39918        2489 :         if (!strcmp(node_name, "Body")) return TAG_MPEG4_Body;
   39919        2488 :         if (!strcmp(node_name, "BodyDefTable")) return TAG_MPEG4_BodyDefTable;
   39920        2487 :         if (!strcmp(node_name, "BodySegmentConnectionHint")) return TAG_MPEG4_BodySegmentConnectionHint;
   39921        2486 :         if (!strcmp(node_name, "DirectiveSound")) return TAG_MPEG4_DirectiveSound;
   39922        2485 :         if (!strcmp(node_name, "Hierarchical3DMesh")) return TAG_MPEG4_Hierarchical3DMesh;
   39923        2484 :         if (!strcmp(node_name, "MaterialKey")) return TAG_MPEG4_MaterialKey;
   39924        2477 :         if (!strcmp(node_name, "PerceptualParameters")) return TAG_MPEG4_PerceptualParameters;
   39925        2476 :         if (!strcmp(node_name, "TemporalTransform")) return TAG_MPEG4_TemporalTransform;
   39926        2475 :         if (!strcmp(node_name, "TemporalGroup")) return TAG_MPEG4_TemporalGroup;
   39927        2474 :         if (!strcmp(node_name, "ServerCommand")) return TAG_MPEG4_ServerCommand;
   39928        2468 :         if (!strcmp(node_name, "InputSensor")) return TAG_MPEG4_InputSensor;
   39929        2424 :         if (!strcmp(node_name, "MatteTexture")) return TAG_MPEG4_MatteTexture;
   39930        2423 :         if (!strcmp(node_name, "MediaBuffer")) return TAG_MPEG4_MediaBuffer;
   39931        2422 :         if (!strcmp(node_name, "MediaControl")) return TAG_MPEG4_MediaControl;
   39932        2403 :         if (!strcmp(node_name, "MediaSensor")) return TAG_MPEG4_MediaSensor;
   39933        2386 :         if (!strcmp(node_name, "BitWrapper")) return TAG_MPEG4_BitWrapper;
   39934        2370 :         if (!strcmp(node_name, "CoordinateInterpolator4D")) return TAG_MPEG4_CoordinateInterpolator4D;
   39935        2368 :         if (!strcmp(node_name, "DepthImage")) return TAG_MPEG4_DepthImage;
   39936        2367 :         if (!strcmp(node_name, "FFD")) return TAG_MPEG4_FFD;
   39937        2366 :         if (!strcmp(node_name, "Implicit")) return TAG_MPEG4_Implicit;
   39938        2365 :         if (!strcmp(node_name, "XXLFM_Appearance")) return TAG_MPEG4_XXLFM_Appearance;
   39939        2364 :         if (!strcmp(node_name, "XXLFM_BlendList")) return TAG_MPEG4_XXLFM_BlendList;
   39940        2363 :         if (!strcmp(node_name, "XXLFM_FrameList")) return TAG_MPEG4_XXLFM_FrameList;
   39941        2362 :         if (!strcmp(node_name, "XXLFM_LightMap")) return TAG_MPEG4_XXLFM_LightMap;
   39942        2361 :         if (!strcmp(node_name, "XXLFM_SurfaceMapList")) return TAG_MPEG4_XXLFM_SurfaceMapList;
   39943        2360 :         if (!strcmp(node_name, "XXLFM_ViewMapList")) return TAG_MPEG4_XXLFM_ViewMapList;
   39944        2359 :         if (!strcmp(node_name, "MeshGrid")) return TAG_MPEG4_MeshGrid;
   39945        2358 :         if (!strcmp(node_name, "NonLinearDeformer")) return TAG_MPEG4_NonLinearDeformer;
   39946        2336 :         if (!strcmp(node_name, "NurbsCurve")) return TAG_MPEG4_NurbsCurve;
   39947        2335 :         if (!strcmp(node_name, "NurbsCurve2D")) return TAG_MPEG4_NurbsCurve2D;
   39948        2334 :         if (!strcmp(node_name, "NurbsSurface")) return TAG_MPEG4_NurbsSurface;
   39949        2333 :         if (!strcmp(node_name, "OctreeImage")) return TAG_MPEG4_OctreeImage;
   39950        2332 :         if (!strcmp(node_name, "XXParticles")) return TAG_MPEG4_XXParticles;
   39951        2331 :         if (!strcmp(node_name, "XXParticleInitBox")) return TAG_MPEG4_XXParticleInitBox;
   39952        2330 :         if (!strcmp(node_name, "XXPlanarObstacle")) return TAG_MPEG4_XXPlanarObstacle;
   39953        2329 :         if (!strcmp(node_name, "XXPointAttractor")) return TAG_MPEG4_XXPointAttractor;
   39954        2328 :         if (!strcmp(node_name, "PointTexture")) return TAG_MPEG4_PointTexture;
   39955        2327 :         if (!strcmp(node_name, "PositionAnimator")) return TAG_MPEG4_PositionAnimator;
   39956        2325 :         if (!strcmp(node_name, "PositionAnimator2D")) return TAG_MPEG4_PositionAnimator2D;
   39957        2322 :         if (!strcmp(node_name, "PositionInterpolator4D")) return TAG_MPEG4_PositionInterpolator4D;
   39958        2320 :         if (!strcmp(node_name, "ProceduralTexture")) return TAG_MPEG4_ProceduralTexture;
   39959        2319 :         if (!strcmp(node_name, "Quadric")) return TAG_MPEG4_Quadric;
   39960        2318 :         if (!strcmp(node_name, "SBBone")) return TAG_MPEG4_SBBone;
   39961        2317 :         if (!strcmp(node_name, "SBMuscle")) return TAG_MPEG4_SBMuscle;
   39962        2316 :         if (!strcmp(node_name, "SBSegment")) return TAG_MPEG4_SBSegment;
   39963        2315 :         if (!strcmp(node_name, "SBSite")) return TAG_MPEG4_SBSite;
   39964        2314 :         if (!strcmp(node_name, "SBSkinnedModel")) return TAG_MPEG4_SBSkinnedModel;
   39965        2313 :         if (!strcmp(node_name, "SBVCAnimation")) return TAG_MPEG4_SBVCAnimation;
   39966        2312 :         if (!strcmp(node_name, "ScalarAnimator")) return TAG_MPEG4_ScalarAnimator;
   39967        2310 :         if (!strcmp(node_name, "SimpleTexture")) return TAG_MPEG4_SimpleTexture;
   39968        2309 :         if (!strcmp(node_name, "SolidRep")) return TAG_MPEG4_SolidRep;
   39969        2308 :         if (!strcmp(node_name, "SubdivisionSurface")) return TAG_MPEG4_SubdivisionSurface;
   39970        2307 :         if (!strcmp(node_name, "SubdivSurfaceSector")) return TAG_MPEG4_SubdivSurfaceSector;
   39971        2306 :         if (!strcmp(node_name, "WaveletSubdivisionSurface")) return TAG_MPEG4_WaveletSubdivisionSurface;
   39972        2305 :         if (!strcmp(node_name, "Clipper2D")) return TAG_MPEG4_Clipper2D;
   39973        2282 :         if (!strcmp(node_name, "ColorTransform")) return TAG_MPEG4_ColorTransform;
   39974        2226 :         if (!strcmp(node_name, "Ellipse")) return TAG_MPEG4_Ellipse;
   39975        2221 :         if (!strcmp(node_name, "LinearGradient")) return TAG_MPEG4_LinearGradient;
   39976        2132 :         if (!strcmp(node_name, "PathLayout")) return TAG_MPEG4_PathLayout;
   39977        2109 :         if (!strcmp(node_name, "RadialGradient")) return TAG_MPEG4_RadialGradient;
   39978        2049 :         if (!strcmp(node_name, "SynthesizedTexture")) return TAG_MPEG4_SynthesizedTexture;
   39979        2048 :         if (!strcmp(node_name, "TransformMatrix2D")) return TAG_MPEG4_TransformMatrix2D;
   39980        1989 :         if (!strcmp(node_name, "Viewport")) return TAG_MPEG4_Viewport;
   39981        1923 :         if (!strcmp(node_name, "XCurve2D")) return TAG_MPEG4_XCurve2D;
   39982        1896 :         if (!strcmp(node_name, "XFontStyle")) return TAG_MPEG4_XFontStyle;
   39983        1895 :         if (!strcmp(node_name, "XLineProperties")) return TAG_MPEG4_XLineProperties;
   39984        1826 :         if (!strcmp(node_name, "AdvancedAudioBuffer")) return TAG_MPEG4_AdvancedAudioBuffer;
   39985        1825 :         if (!strcmp(node_name, "AudioChannelConfig")) return TAG_MPEG4_AudioChannelConfig;
   39986        1824 :         if (!strcmp(node_name, "DepthImageV2")) return TAG_MPEG4_DepthImageV2;
   39987        1823 :         if (!strcmp(node_name, "MorphShape")) return TAG_MPEG4_MorphShape;
   39988        1822 :         if (!strcmp(node_name, "MultiTexture")) return TAG_MPEG4_MultiTexture;
   39989        1821 :         if (!strcmp(node_name, "PointTextureV2")) return TAG_MPEG4_PointTextureV2;
   39990        1820 :         if (!strcmp(node_name, "SBVCAnimationV2")) return TAG_MPEG4_SBVCAnimationV2;
   39991        1819 :         if (!strcmp(node_name, "SimpleTextureV2")) return TAG_MPEG4_SimpleTextureV2;
   39992        1818 :         if (!strcmp(node_name, "SurroundingSound")) return TAG_MPEG4_SurroundingSound;
   39993        1817 :         if (!strcmp(node_name, "Transform3DAudio")) return TAG_MPEG4_Transform3DAudio;
   39994        1816 :         if (!strcmp(node_name, "WideSound")) return TAG_MPEG4_WideSound;
   39995        1810 :         if (!strcmp(node_name, "ScoreShape")) return TAG_MPEG4_ScoreShape;
   39996        1804 :         if (!strcmp(node_name, "MusicScore")) return TAG_MPEG4_MusicScore;
   39997        1803 :         if (!strcmp(node_name, "FootPrintSetNode")) return TAG_MPEG4_FootPrintSetNode;
   39998        1802 :         if (!strcmp(node_name, "FootPrintNode")) return TAG_MPEG4_FootPrintNode;
   39999        1801 :         if (!strcmp(node_name, "BuildingPartNode")) return TAG_MPEG4_BuildingPartNode;
   40000        1800 :         if (!strcmp(node_name, "RoofNode")) return TAG_MPEG4_RoofNode;
   40001        1799 :         if (!strcmp(node_name, "FacadeNode")) return TAG_MPEG4_FacadeNode;
   40002        1798 :         if (!strcmp(node_name, "Shadow")) return TAG_MPEG4_Shadow;
   40003        1792 :         if (!strcmp(node_name, "CacheTexture")) return TAG_MPEG4_CacheTexture;
   40004        1769 :         if (!strcmp(node_name, "EnvironmentTest")) return TAG_MPEG4_EnvironmentTest;
   40005        1725 :         if (!strcmp(node_name, "KeyNavigator")) return TAG_MPEG4_KeyNavigator;
   40006        1720 :         if (!strcmp(node_name, "SpacePartition")) return TAG_MPEG4_SpacePartition;
   40007        1719 :         if (!strcmp(node_name, "Storage")) return TAG_MPEG4_Storage;
   40008        1717 :         return 0;
   40009             : }
   40010             : 
   40011       85536 : s32 gf_sg_mpeg4_node_get_field_index_by_name(GF_Node *node, char *name)
   40012             : {
   40013       85536 :         switch (node->sgprivate->tag) {
   40014          19 :         case TAG_MPEG4_Anchor:
   40015          19 :                 return Anchor_get_field_index_by_name(name);
   40016          43 :         case TAG_MPEG4_AnimationStream:
   40017          43 :                 return AnimationStream_get_field_index_by_name(name);
   40018        2533 :         case TAG_MPEG4_Appearance:
   40019        2533 :                 return Appearance_get_field_index_by_name(name);
   40020          19 :         case TAG_MPEG4_AudioBuffer:
   40021          19 :                 return AudioBuffer_get_field_index_by_name(name);
   40022          25 :         case TAG_MPEG4_AudioClip:
   40023          25 :                 return AudioClip_get_field_index_by_name(name);
   40024           6 :         case TAG_MPEG4_AudioDelay:
   40025           6 :                 return AudioDelay_get_field_index_by_name(name);
   40026           8 :         case TAG_MPEG4_AudioFX:
   40027           8 :                 return AudioFX_get_field_index_by_name(name);
   40028           7 :         case TAG_MPEG4_AudioMix:
   40029           7 :                 return AudioMix_get_field_index_by_name(name);
   40030          43 :         case TAG_MPEG4_AudioSource:
   40031          43 :                 return AudioSource_get_field_index_by_name(name);
   40032           6 :         case TAG_MPEG4_AudioSwitch:
   40033           6 :                 return AudioSwitch_get_field_index_by_name(name);
   40034          94 :         case TAG_MPEG4_Background:
   40035          94 :                 return Background_get_field_index_by_name(name);
   40036         586 :         case TAG_MPEG4_Background2D:
   40037         586 :                 return Background2D_get_field_index_by_name(name);
   40038          10 :         case TAG_MPEG4_Billboard:
   40039          10 :                 return Billboard_get_field_index_by_name(name);
   40040             :         case TAG_MPEG4_Bitmap:
   40041             :                 return Bitmap_get_field_index_by_name(name);
   40042             :         case TAG_MPEG4_Box:
   40043             :                 return Box_get_field_index_by_name(name);
   40044             :         case TAG_MPEG4_Circle:
   40045             :                 return Circle_get_field_index_by_name(name);
   40046          26 :         case TAG_MPEG4_Collision:
   40047          26 :                 return Collision_get_field_index_by_name(name);
   40048             :         case TAG_MPEG4_Color:
   40049             :                 return Color_get_field_index_by_name(name);
   40050          28 :         case TAG_MPEG4_ColorInterpolator:
   40051          28 :                 return ColorInterpolator_get_field_index_by_name(name);
   40052         405 :         case TAG_MPEG4_CompositeTexture2D:
   40053         405 :                 return CompositeTexture2D_get_field_index_by_name(name);
   40054          17 :         case TAG_MPEG4_CompositeTexture3D:
   40055          17 :                 return CompositeTexture3D_get_field_index_by_name(name);
   40056        1162 :         case TAG_MPEG4_Conditional:
   40057        1162 :                 return Conditional_get_field_index_by_name(name);
   40058          49 :         case TAG_MPEG4_Cone:
   40059          49 :                 return Cone_get_field_index_by_name(name);
   40060             :         case TAG_MPEG4_Coordinate:
   40061             :                 return Coordinate_get_field_index_by_name(name);
   40062             :         case TAG_MPEG4_Coordinate2D:
   40063             :                 return Coordinate2D_get_field_index_by_name(name);
   40064           7 :         case TAG_MPEG4_CoordinateInterpolator:
   40065           7 :                 return CoordinateInterpolator_get_field_index_by_name(name);
   40066          12 :         case TAG_MPEG4_CoordinateInterpolator2D:
   40067          12 :                 return CoordinateInterpolator2D_get_field_index_by_name(name);
   40068        5717 :         case TAG_MPEG4_Curve2D:
   40069        5717 :                 return Curve2D_get_field_index_by_name(name);
   40070          80 :         case TAG_MPEG4_Cylinder:
   40071          80 :                 return Cylinder_get_field_index_by_name(name);
   40072          13 :         case TAG_MPEG4_CylinderSensor:
   40073          13 :                 return CylinderSensor_get_field_index_by_name(name);
   40074          20 :         case TAG_MPEG4_DirectionalLight:
   40075          20 :                 return DirectionalLight_get_field_index_by_name(name);
   40076          27 :         case TAG_MPEG4_DiscSensor:
   40077          27 :                 return DiscSensor_get_field_index_by_name(name);
   40078         110 :         case TAG_MPEG4_ElevationGrid:
   40079         110 :                 return ElevationGrid_get_field_index_by_name(name);
   40080           6 :         case TAG_MPEG4_Expression:
   40081           6 :                 return Expression_get_field_index_by_name(name);
   40082         111 :         case TAG_MPEG4_Extrusion:
   40083         111 :                 return Extrusion_get_field_index_by_name(name);
   40084           5 :         case TAG_MPEG4_Face:
   40085           5 :                 return Face_get_field_index_by_name(name);
   40086           4 :         case TAG_MPEG4_FaceDefMesh:
   40087           4 :                 return FaceDefMesh_get_field_index_by_name(name);
   40088           4 :         case TAG_MPEG4_FaceDefTables:
   40089           4 :                 return FaceDefTables_get_field_index_by_name(name);
   40090           5 :         case TAG_MPEG4_FaceDefTransform:
   40091           5 :                 return FaceDefTransform_get_field_index_by_name(name);
   40092          68 :         case TAG_MPEG4_FAP:
   40093          68 :                 return FAP_get_field_index_by_name(name);
   40094           5 :         case TAG_MPEG4_FDP:
   40095           5 :                 return FDP_get_field_index_by_name(name);
   40096           9 :         case TAG_MPEG4_FIT:
   40097           9 :                 return FIT_get_field_index_by_name(name);
   40098          21 :         case TAG_MPEG4_Fog:
   40099          21 :                 return Fog_get_field_index_by_name(name);
   40100        1454 :         case TAG_MPEG4_FontStyle:
   40101        1454 :                 return FontStyle_get_field_index_by_name(name);
   40102         495 :         case TAG_MPEG4_Form:
   40103         495 :                 return Form_get_field_index_by_name(name);
   40104          88 :         case TAG_MPEG4_Group:
   40105          88 :                 return Group_get_field_index_by_name(name);
   40106         169 :         case TAG_MPEG4_ImageTexture:
   40107         169 :                 return ImageTexture_get_field_index_by_name(name);
   40108         122 :         case TAG_MPEG4_IndexedFaceSet:
   40109         122 :                 return IndexedFaceSet_get_field_index_by_name(name);
   40110         262 :         case TAG_MPEG4_IndexedFaceSet2D:
   40111         262 :                 return IndexedFaceSet2D_get_field_index_by_name(name);
   40112          77 :         case TAG_MPEG4_IndexedLineSet:
   40113          77 :                 return IndexedLineSet_get_field_index_by_name(name);
   40114          84 :         case TAG_MPEG4_IndexedLineSet2D:
   40115          84 :                 return IndexedLineSet2D_get_field_index_by_name(name);
   40116             :         case TAG_MPEG4_Inline:
   40117             :                 return Inline_get_field_index_by_name(name);
   40118           6 :         case TAG_MPEG4_LOD:
   40119           6 :                 return LOD_get_field_index_by_name(name);
   40120        2090 :         case TAG_MPEG4_Layer2D:
   40121        2090 :                 return Layer2D_get_field_index_by_name(name);
   40122          71 :         case TAG_MPEG4_Layer3D:
   40123          71 :                 return Layer3D_get_field_index_by_name(name);
   40124         903 :         case TAG_MPEG4_Layout:
   40125         903 :                 return Layout_get_field_index_by_name(name);
   40126         389 :         case TAG_MPEG4_LineProperties:
   40127         389 :                 return LineProperties_get_field_index_by_name(name);
   40128           7 :         case TAG_MPEG4_ListeningPoint:
   40129           7 :                 return ListeningPoint_get_field_index_by_name(name);
   40130         119 :         case TAG_MPEG4_Material:
   40131         119 :                 return Material_get_field_index_by_name(name);
   40132        2727 :         case TAG_MPEG4_Material2D:
   40133        2727 :                 return Material2D_get_field_index_by_name(name);
   40134         119 :         case TAG_MPEG4_MovieTexture:
   40135         119 :                 return MovieTexture_get_field_index_by_name(name);
   40136          45 :         case TAG_MPEG4_NavigationInfo:
   40137          45 :                 return NavigationInfo_get_field_index_by_name(name);
   40138             :         case TAG_MPEG4_Normal:
   40139             :                 return Normal_get_field_index_by_name(name);
   40140           7 :         case TAG_MPEG4_NormalInterpolator:
   40141           7 :                 return NormalInterpolator_get_field_index_by_name(name);
   40142         449 :         case TAG_MPEG4_OrderedGroup:
   40143         449 :                 return OrderedGroup_get_field_index_by_name(name);
   40144          77 :         case TAG_MPEG4_OrientationInterpolator:
   40145          77 :                 return OrientationInterpolator_get_field_index_by_name(name);
   40146          22 :         case TAG_MPEG4_PixelTexture:
   40147          22 :                 return PixelTexture_get_field_index_by_name(name);
   40148          15 :         case TAG_MPEG4_PlaneSensor:
   40149          15 :                 return PlaneSensor_get_field_index_by_name(name);
   40150         126 :         case TAG_MPEG4_PlaneSensor2D:
   40151         126 :                 return PlaneSensor2D_get_field_index_by_name(name);
   40152          11 :         case TAG_MPEG4_PointLight:
   40153          11 :                 return PointLight_get_field_index_by_name(name);
   40154          18 :         case TAG_MPEG4_PointSet:
   40155          18 :                 return PointSet_get_field_index_by_name(name);
   40156          29 :         case TAG_MPEG4_PointSet2D:
   40157          29 :                 return PointSet2D_get_field_index_by_name(name);
   40158          48 :         case TAG_MPEG4_PositionInterpolator:
   40159          48 :                 return PositionInterpolator_get_field_index_by_name(name);
   40160         193 :         case TAG_MPEG4_PositionInterpolator2D:
   40161         193 :                 return PositionInterpolator2D_get_field_index_by_name(name);
   40162          14 :         case TAG_MPEG4_ProximitySensor2D:
   40163          14 :                 return ProximitySensor2D_get_field_index_by_name(name);
   40164          12 :         case TAG_MPEG4_ProximitySensor:
   40165          12 :                 return ProximitySensor_get_field_index_by_name(name);
   40166         355 :         case TAG_MPEG4_QuantizationParameter:
   40167         355 :                 return QuantizationParameter_get_field_index_by_name(name);
   40168             :         case TAG_MPEG4_Rectangle:
   40169             :                 return Rectangle_get_field_index_by_name(name);
   40170         215 :         case TAG_MPEG4_ScalarInterpolator:
   40171         215 :                 return ScalarInterpolator_get_field_index_by_name(name);
   40172           0 :         case TAG_MPEG4_Script:
   40173           0 :                 return Script_get_field_index_by_name(name);
   40174       12594 :         case TAG_MPEG4_Shape:
   40175       12594 :                 return Shape_get_field_index_by_name(name);
   40176          16 :         case TAG_MPEG4_Sound:
   40177          16 :                 return Sound_get_field_index_by_name(name);
   40178          69 :         case TAG_MPEG4_Sound2D:
   40179          69 :                 return Sound2D_get_field_index_by_name(name);
   40180             :         case TAG_MPEG4_Sphere:
   40181             :                 return Sphere_get_field_index_by_name(name);
   40182          10 :         case TAG_MPEG4_SphereSensor:
   40183          10 :                 return SphereSensor_get_field_index_by_name(name);
   40184          14 :         case TAG_MPEG4_SpotLight:
   40185          14 :                 return SpotLight_get_field_index_by_name(name);
   40186         260 :         case TAG_MPEG4_Switch:
   40187         260 :                 return Switch_get_field_index_by_name(name);
   40188           3 :         case TAG_MPEG4_TermCap:
   40189           3 :                 return TermCap_get_field_index_by_name(name);
   40190        3601 :         case TAG_MPEG4_Text:
   40191        3601 :                 return Text_get_field_index_by_name(name);
   40192             :         case TAG_MPEG4_TextureCoordinate:
   40193             :                 return TextureCoordinate_get_field_index_by_name(name);
   40194          45 :         case TAG_MPEG4_TextureTransform:
   40195          45 :                 return TextureTransform_get_field_index_by_name(name);
   40196        1080 :         case TAG_MPEG4_TimeSensor:
   40197        1080 :                 return TimeSensor_get_field_index_by_name(name);
   40198         828 :         case TAG_MPEG4_TouchSensor:
   40199         828 :                 return TouchSensor_get_field_index_by_name(name);
   40200         383 :         case TAG_MPEG4_Transform:
   40201         383 :                 return Transform_get_field_index_by_name(name);
   40202       31783 :         case TAG_MPEG4_Transform2D:
   40203       31783 :                 return Transform2D_get_field_index_by_name(name);
   40204        1650 :         case TAG_MPEG4_Valuator:
   40205        1650 :                 return Valuator_get_field_index_by_name(name);
   40206          99 :         case TAG_MPEG4_Viewpoint:
   40207          99 :                 return Viewpoint_get_field_index_by_name(name);
   40208          10 :         case TAG_MPEG4_VisibilitySensor:
   40209          10 :                 return VisibilitySensor_get_field_index_by_name(name);
   40210           4 :         case TAG_MPEG4_Viseme:
   40211           4 :                 return Viseme_get_field_index_by_name(name);
   40212         770 :         case TAG_MPEG4_WorldInfo:
   40213         770 :                 return WorldInfo_get_field_index_by_name(name);
   40214          10 :         case TAG_MPEG4_AcousticMaterial:
   40215          10 :                 return AcousticMaterial_get_field_index_by_name(name);
   40216           6 :         case TAG_MPEG4_AcousticScene:
   40217           6 :                 return AcousticScene_get_field_index_by_name(name);
   40218           7 :         case TAG_MPEG4_ApplicationWindow:
   40219           7 :                 return ApplicationWindow_get_field_index_by_name(name);
   40220         296 :         case TAG_MPEG4_BAP:
   40221         296 :                 return BAP_get_field_index_by_name(name);
   40222           2 :         case TAG_MPEG4_BDP:
   40223           2 :                 return BDP_get_field_index_by_name(name);
   40224           3 :         case TAG_MPEG4_Body:
   40225           3 :                 return Body_get_field_index_by_name(name);
   40226           6 :         case TAG_MPEG4_BodyDefTable:
   40227           6 :                 return BodyDefTable_get_field_index_by_name(name);
   40228           4 :         case TAG_MPEG4_BodySegmentConnectionHint:
   40229           4 :                 return BodySegmentConnectionHint_get_field_index_by_name(name);
   40230          13 :         case TAG_MPEG4_DirectiveSound:
   40231          13 :                 return DirectiveSound_get_field_index_by_name(name);
   40232           4 :         case TAG_MPEG4_Hierarchical3DMesh:
   40233           4 :                 return Hierarchical3DMesh_get_field_index_by_name(name);
   40234          11 :         case TAG_MPEG4_MaterialKey:
   40235          11 :                 return MaterialKey_get_field_index_by_name(name);
   40236          19 :         case TAG_MPEG4_PerceptualParameters:
   40237          19 :                 return PerceptualParameters_get_field_index_by_name(name);
   40238          13 :         case TAG_MPEG4_TemporalTransform:
   40239          13 :                 return TemporalTransform_get_field_index_by_name(name);
   40240           9 :         case TAG_MPEG4_TemporalGroup:
   40241           9 :                 return TemporalGroup_get_field_index_by_name(name);
   40242           4 :         case TAG_MPEG4_ServerCommand:
   40243           4 :                 return ServerCommand_get_field_index_by_name(name);
   40244          70 :         case TAG_MPEG4_InputSensor:
   40245          70 :                 return InputSensor_get_field_index_by_name(name);
   40246           7 :         case TAG_MPEG4_MatteTexture:
   40247           7 :                 return MatteTexture_get_field_index_by_name(name);
   40248           6 :         case TAG_MPEG4_MediaBuffer:
   40249           6 :                 return MediaBuffer_get_field_index_by_name(name);
   40250         769 :         case TAG_MPEG4_MediaControl:
   40251         769 :                 return MediaControl_get_field_index_by_name(name);
   40252          56 :         case TAG_MPEG4_MediaSensor:
   40253          56 :                 return MediaSensor_get_field_index_by_name(name);
   40254          19 :         case TAG_MPEG4_BitWrapper:
   40255          19 :                 return BitWrapper_get_field_index_by_name(name);
   40256           7 :         case TAG_MPEG4_CoordinateInterpolator4D:
   40257           7 :                 return CoordinateInterpolator4D_get_field_index_by_name(name);
   40258           7 :         case TAG_MPEG4_DepthImage:
   40259           7 :                 return DepthImage_get_field_index_by_name(name);
   40260          13 :         case TAG_MPEG4_FFD:
   40261          13 :                 return FFD_get_field_index_by_name(name);
   40262           5 :         case TAG_MPEG4_Implicit:
   40263           5 :                 return Implicit_get_field_index_by_name(name);
   40264           4 :         case TAG_MPEG4_XXLFM_Appearance:
   40265           4 :                 return XXLFM_Appearance_get_field_index_by_name(name);
   40266           2 :         case TAG_MPEG4_XXLFM_BlendList:
   40267           2 :                 return XXLFM_BlendList_get_field_index_by_name(name);
   40268           2 :         case TAG_MPEG4_XXLFM_FrameList:
   40269           2 :                 return XXLFM_FrameList_get_field_index_by_name(name);
   40270           5 :         case TAG_MPEG4_XXLFM_LightMap:
   40271           5 :                 return XXLFM_LightMap_get_field_index_by_name(name);
   40272           4 :         case TAG_MPEG4_XXLFM_SurfaceMapList:
   40273           4 :                 return XXLFM_SurfaceMapList_get_field_index_by_name(name);
   40274           4 :         case TAG_MPEG4_XXLFM_ViewMapList:
   40275           4 :                 return XXLFM_ViewMapList_get_field_index_by_name(name);
   40276          23 :         case TAG_MPEG4_MeshGrid:
   40277          23 :                 return MeshGrid_get_field_index_by_name(name);
   40278          71 :         case TAG_MPEG4_NonLinearDeformer:
   40279          71 :                 return NonLinearDeformer_get_field_index_by_name(name);
   40280           8 :         case TAG_MPEG4_NurbsCurve:
   40281           8 :                 return NurbsCurve_get_field_index_by_name(name);
   40282           8 :         case TAG_MPEG4_NurbsCurve2D:
   40283           8 :                 return NurbsCurve2D_get_field_index_by_name(name);
   40284          18 :         case TAG_MPEG4_NurbsSurface:
   40285          18 :                 return NurbsSurface_get_field_index_by_name(name);
   40286           4 :         case TAG_MPEG4_OctreeImage:
   40287           4 :                 return OctreeImage_get_field_index_by_name(name);
   40288          25 :         case TAG_MPEG4_XXParticles:
   40289          25 :                 return XXParticles_get_field_index_by_name(name);
   40290           2 :         case TAG_MPEG4_XXParticleInitBox:
   40291           2 :                 return XXParticleInitBox_get_field_index_by_name(name);
   40292           4 :         case TAG_MPEG4_XXPlanarObstacle:
   40293           4 :                 return XXPlanarObstacle_get_field_index_by_name(name);
   40294           4 :         case TAG_MPEG4_XXPointAttractor:
   40295           4 :                 return XXPointAttractor_get_field_index_by_name(name);
   40296           5 :         case TAG_MPEG4_PointTexture:
   40297           5 :                 return PointTexture_get_field_index_by_name(name);
   40298          20 :         case TAG_MPEG4_PositionAnimator:
   40299          20 :                 return PositionAnimator_get_field_index_by_name(name);
   40300          27 :         case TAG_MPEG4_PositionAnimator2D:
   40301          27 :                 return PositionAnimator2D_get_field_index_by_name(name);
   40302           7 :         case TAG_MPEG4_PositionInterpolator4D:
   40303           7 :                 return PositionInterpolator4D_get_field_index_by_name(name);
   40304          20 :         case TAG_MPEG4_ProceduralTexture:
   40305          20 :                 return ProceduralTexture_get_field_index_by_name(name);
   40306          10 :         case TAG_MPEG4_Quadric:
   40307          10 :                 return Quadric_get_field_index_by_name(name);
   40308          24 :         case TAG_MPEG4_SBBone:
   40309          24 :                 return SBBone_get_field_index_by_name(name);
   40310           6 :         case TAG_MPEG4_SBMuscle:
   40311           6 :                 return SBMuscle_get_field_index_by_name(name);
   40312           7 :         case TAG_MPEG4_SBSegment:
   40313           7 :                 return SBSegment_get_field_index_by_name(name);
   40314           9 :         case TAG_MPEG4_SBSite:
   40315           9 :                 return SBSite_get_field_index_by_name(name);
   40316          15 :         case TAG_MPEG4_SBSkinnedModel:
   40317          15 :                 return SBSkinnedModel_get_field_index_by_name(name);
   40318           2 :         case TAG_MPEG4_SBVCAnimation:
   40319           2 :                 return SBVCAnimation_get_field_index_by_name(name);
   40320          17 :         case TAG_MPEG4_ScalarAnimator:
   40321          17 :                 return ScalarAnimator_get_field_index_by_name(name);
   40322           2 :         case TAG_MPEG4_SimpleTexture:
   40323           2 :                 return SimpleTexture_get_field_index_by_name(name);
   40324           3 :         case TAG_MPEG4_SolidRep:
   40325           3 :                 return SolidRep_get_field_index_by_name(name);
   40326          26 :         case TAG_MPEG4_SubdivisionSurface:
   40327          26 :                 return SubdivisionSurface_get_field_index_by_name(name);
   40328           7 :         case TAG_MPEG4_SubdivSurfaceSector:
   40329           7 :                 return SubdivSurfaceSector_get_field_index_by_name(name);
   40330           4 :         case TAG_MPEG4_WaveletSubdivisionSurface:
   40331           4 :                 return WaveletSubdivisionSurface_get_field_index_by_name(name);
   40332          36 :         case TAG_MPEG4_Clipper2D:
   40333          36 :                 return Clipper2D_get_field_index_by_name(name);
   40334         355 :         case TAG_MPEG4_ColorTransform:
   40335         355 :                 return ColorTransform_get_field_index_by_name(name);
   40336             :         case TAG_MPEG4_Ellipse:
   40337             :                 return Ellipse_get_field_index_by_name(name);
   40338        1035 :         case TAG_MPEG4_LinearGradient:
   40339        1035 :                 return LinearGradient_get_field_index_by_name(name);
   40340          43 :         case TAG_MPEG4_PathLayout:
   40341          43 :                 return PathLayout_get_field_index_by_name(name);
   40342         226 :         case TAG_MPEG4_RadialGradient:
   40343         226 :                 return RadialGradient_get_field_index_by_name(name);
   40344          11 :         case TAG_MPEG4_SynthesizedTexture:
   40345          11 :                 return SynthesizedTexture_get_field_index_by_name(name);
   40346          81 :         case TAG_MPEG4_TransformMatrix2D:
   40347          81 :                 return TransformMatrix2D_get_field_index_by_name(name);
   40348         252 :         case TAG_MPEG4_Viewport:
   40349         252 :                 return Viewport_get_field_index_by_name(name);
   40350          45 :         case TAG_MPEG4_XCurve2D:
   40351          45 :                 return XCurve2D_get_field_index_by_name(name);
   40352          17 :         case TAG_MPEG4_XFontStyle:
   40353          17 :                 return XFontStyle_get_field_index_by_name(name);
   40354         202 :         case TAG_MPEG4_XLineProperties:
   40355         202 :                 return XLineProperties_get_field_index_by_name(name);
   40356          18 :         case TAG_MPEG4_AdvancedAudioBuffer:
   40357          18 :                 return AdvancedAudioBuffer_get_field_index_by_name(name);
   40358          22 :         case TAG_MPEG4_AudioChannelConfig:
   40359          22 :                 return AudioChannelConfig_get_field_index_by_name(name);
   40360           8 :         case TAG_MPEG4_DepthImageV2:
   40361           8 :                 return DepthImageV2_get_field_index_by_name(name);
   40362           4 :         case TAG_MPEG4_MorphShape:
   40363           4 :                 return MorphShape_get_field_index_by_name(name);
   40364           8 :         case TAG_MPEG4_MultiTexture:
   40365           8 :                 return MultiTexture_get_field_index_by_name(name);
   40366           8 :         case TAG_MPEG4_PointTextureV2:
   40367           8 :                 return PointTextureV2_get_field_index_by_name(name);
   40368          10 :         case TAG_MPEG4_SBVCAnimationV2:
   40369          10 :                 return SBVCAnimationV2_get_field_index_by_name(name);
   40370           5 :         case TAG_MPEG4_SimpleTextureV2:
   40371           5 :                 return SimpleTextureV2_get_field_index_by_name(name);
   40372           7 :         case TAG_MPEG4_SurroundingSound:
   40373           7 :                 return SurroundingSound_get_field_index_by_name(name);
   40374           9 :         case TAG_MPEG4_Transform3DAudio:
   40375           9 :                 return Transform3DAudio_get_field_index_by_name(name);
   40376          15 :         case TAG_MPEG4_WideSound:
   40377          15 :                 return WideSound_get_field_index_by_name(name);
   40378           2 :         case TAG_MPEG4_ScoreShape:
   40379           2 :                 return ScoreShape_get_field_index_by_name(name);
   40380          31 :         case TAG_MPEG4_MusicScore:
   40381          31 :                 return MusicScore_get_field_index_by_name(name);
   40382             :         case TAG_MPEG4_FootPrintSetNode:
   40383             :                 return FootPrintSetNode_get_field_index_by_name(name);
   40384           2 :         case TAG_MPEG4_FootPrintNode:
   40385           2 :                 return FootPrintNode_get_field_index_by_name(name);
   40386           8 :         case TAG_MPEG4_BuildingPartNode:
   40387           8 :                 return BuildingPartNode_get_field_index_by_name(name);
   40388          12 :         case TAG_MPEG4_RoofNode:
   40389          12 :                 return RoofNode_get_field_index_by_name(name);
   40390          13 :         case TAG_MPEG4_FacadeNode:
   40391          13 :                 return FacadeNode_get_field_index_by_name(name);
   40392           7 :         case TAG_MPEG4_Shadow:
   40393           7 :                 return Shadow_get_field_index_by_name(name);
   40394          59 :         case TAG_MPEG4_CacheTexture:
   40395          59 :                 return CacheTexture_get_field_index_by_name(name);
   40396          30 :         case TAG_MPEG4_EnvironmentTest:
   40397          30 :                 return EnvironmentTest_get_field_index_by_name(name);
   40398          32 :         case TAG_MPEG4_KeyNavigator:
   40399          32 :                 return KeyNavigator_get_field_index_by_name(name);
   40400           4 :         case TAG_MPEG4_SpacePartition:
   40401           4 :                 return SpacePartition_get_field_index_by_name(name);
   40402           9 :         case TAG_MPEG4_Storage:
   40403           9 :                 return Storage_get_field_index_by_name(name);
   40404             :         default:
   40405             :                 return -1;
   40406             :         }
   40407             : }
   40408             : 
   40409             : 
   40410             : #endif /*GPAC_DISABLE_VRML*/

Generated by: LCOV version 1.13