📄 main.c
字号:
//this is a POINTER to a node if (strstr(bf->familly, "SF")) { fprintf(f, "\tgf_node_unregister((GF_Node *) p->%s, (GF_Node *) p);\t\n", bf->name); } else { //this is a POINTER to a chain fprintf(f, "\tgf_node_unregister_children((GF_Node *) p, p->%s);\t\n", bf->name); } } } fprintf(f, "\tgf_node_free((GF_Node *) p);\n}\n\n"); //node fields WriteNodeFields(f, n); WriteNodeQuant(f, n); // // Constructor // fprintf(f, "\n\nGF_Node *%s_Create()\n{\n\tM_%s *p;\n\tGF_SAFEALLOC(p, M_%s);\n", n->name, n->name, n->name); fprintf(f, "\tif(!p) return NULL;\n"); fprintf(f, "\tgf_node_setup((GF_Node *)p, TAG_MPEG4_%s);\n", n->name); for (i=0; i<gf_list_count(n->Fields); i++) { bf = gf_list_get(n->Fields, i); //setup all children node if (!strcmp(bf->name, "children") && stricmp(n->name, "audioBuffer")) { fprintf(f, "\tgf_sg_vrml_parent_setup((GF_Node *) p);\n"); break; } else if ( strstr(bf->familly, "Node") && strncmp(bf->type, "event", 5) ) { #if 0 //this is a POINTER to a node if (strstr(bf->familly, "MF")) { //this is a POINTER to a chain fprintf(f, "\tp->%s = gf_list_new();\t\n", bf->name); }#endif } /*special case for SFCommandBuffer: we also create a command list*/ if (!stricmp(bf->familly, "SFCommandBuffer")) { fprintf(f, "\tp->%s.commandList = gf_list_new();\t\n", bf->name); } } //setup pointers fprintf(f, "\n#ifdef GF_NODE_USE_POINTERS\n"); fprintf(f, "\t((GF_Node *)p)->sgprivate->name = \"%s\";\n", n->name); fprintf(f, "\t((GF_Node *)p)->sgprivate->node_del = %s_Del;\n", n->name); fprintf(f, "\t((GF_Node *)p)->sgprivate->get_field_count = %s_get_field_count;\n", n->name); fprintf(f, "\t((GF_Node *)p)->sgprivate->get_field = %s_get_field;\n", n->name); fprintf(f, "#endif\n\n"); //check if we have a child node for (i=0; i<gf_list_count(n->Fields); i++) { bf = gf_list_get(n->Fields, i); if ( !strcmp(bf->name, "children") || ( !strstr(bf->type, "event") && strstr(bf->familly, "MF") && strstr(bf->familly, "Node")) ) { sprintf(n->Child_NDT_Name, "NDT_SF%s", bf->familly+2); break; } } fprintf(f, "\n\t/*default field values*/\n"); for (i=0; i<gf_list_count(n->Fields); i++) { bf = gf_list_get(n->Fields, i); //nothing on eventIn or Out if (!strcmp(bf->type, "eventIn")) continue; if (!strcmp(bf->type, "eventOut")) continue; if (!strcmp(bf->def, "")) continue; //no default on nodes if (strstr(bf->familly, "Node")) continue; //extract default falue // // SF Fields // //SFBool if (!strcmp(bf->familly, "SFBool")) { if (!strcmp(bf->def, "1") || !strcmp(bf->def, "TRUE")) fprintf(f, "\tp->%s = 1;\n", bf->name); } //SFFloat else if (!strcmp(bf->familly, "SFFloat")) { fprintf(f, "\tp->%s = %s;\n", bf->name, GetFixedPrintout(bf->def)); } //SFTime else if (!strcmp(bf->familly, "SFTime")) { fprintf(f, "\tp->%s = %s;\n", bf->name, bf->def); } //SFInt32 else if (!strcmp(bf->familly, "SFInt32")) { fprintf(f, "\tp->%s = %s;\n", bf->name, bf->def); } //SFColor else if (!strcmp(bf->familly, "SFColor")) { CurrentLine = bf->def; GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.red = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); fprintf(f, "\tp->%s.green = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); fprintf(f, "\tp->%s.blue = %s;\n", bf->name, GetFixedPrintout(token)); } //SFVec2f else if (!strcmp(bf->familly, "SFVec2f")) { CurrentLine = bf->def; GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.x = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.y = %s;\n", bf->name, GetFixedPrintout(token)); } //SFVec3f else if (!strcmp(bf->familly, "SFVec3f")) { CurrentLine = bf->def; GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.x = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.y = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.z = %s;\n", bf->name, GetFixedPrintout(token)); } //SFVec4f & SFRotation else if (!strcmp(bf->familly, "SFVec4f") || !strcmp(bf->familly, "SFRotation")) { CurrentLine = bf->def; GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.x = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.y = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.z = %s;\n", bf->name, GetFixedPrintout(token)); GetNextToken(token, " "); TranslateToken(token); fprintf(f, "\tp->%s.q = %s;\n", bf->name, GetFixedPrintout(token)); } //SFString else if (!strcmp(bf->familly, "SFString")) { fprintf(f, "\tp->%s.buffer = (char*)malloc(sizeof(char) * %d);\n", bf->name, strlen(bf->def)+1); fprintf(f, "\tstrcpy(p->%s.buffer, \"%s\");\n", bf->name, bf->def); } // // MF Fields // //MFFloat else if (!strcmp(bf->familly, "MFFloat")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, " ,")) j++; j+=1; fprintf(f, "\tp->%s.vals = (SFFloat*)malloc(sizeof(SFFloat)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, " ,")) go = 0; TranslateToken(token); fprintf(f, "\tp->%s.vals[%d] = %s;\n", bf->name, j, GetFixedPrintout(token)); j+=1; } } //MFVec2f else if (!strcmp(bf->familly, "MFVec2f")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (SFVec2f*)malloc(sizeof(SFVec2f)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].x = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].y = %s;\n", bf->name, j, GetFixedPrintout(tok)); j+=1; CurrentLine = store; } } //MFVec3f else if (!strcmp(bf->familly, "MFVec3f")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (SFVec3f *)malloc(sizeof(SFVec3f)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].x = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].y = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].z = %s;\n", bf->name, j, GetFixedPrintout(tok)); j+=1; CurrentLine = store; } } //MFVec4f else if (!strcmp(bf->familly, "MFVec4f") || !strcmp(bf->familly, "MFRotation")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (GF_Vec4*)malloc(sizeof(GF_Vec4)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].x = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].y = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].z = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d].q = %s;\n", bf->name, j, GetFixedPrintout(tok)); j+=1; CurrentLine = store; } } //MFInt32 else if (!strcmp(bf->familly, "MFInt32")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (SFInt32*)malloc(sizeof(SFInt32)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " "); fprintf(f, "\tp->%s.vals[%d] = %s;\n", bf->name, j, tok); j+=1; CurrentLine = store; } } //MFColor else if (!strcmp(bf->familly, "MFColor")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (SFColor*)malloc(sizeof(SFColor)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " "); fprintf(f, "\tp->%s.vals[%d].red = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); fprintf(f, "\tp->%s.vals[%d].green = %s;\n", bf->name, j, GetFixedPrintout(tok)); GetNextToken(tok, " "); fprintf(f, "\tp->%s.vals[%d].blue = %s;\n", bf->name, j, GetFixedPrintout(tok)); j+=1; CurrentLine = store; } } //MFString else if (!strcmp(bf->familly, "MFString")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (char**)malloc(sizeof(SFString)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " \""); fprintf(f, "\tp->%s.vals[%d] = (char*)malloc(sizeof(char) * %d);\n", bf->name, j, strlen(tok)+1); fprintf(f, "\tstrcpy(p->%s.vals[%d], \"%s\");\n", bf->name, j, tok); j+=1; CurrentLine = store; } } //MFTime else if (!strcmp(bf->familly, "MFTime")) { j = 0; CurrentLine = bf->def; while (GetNextToken(token, ",")) j++; j+=1; fprintf(f, "\tp->%s.vals = (SFTime*)malloc(sizeof(SFTime)*%d);\n", bf->name, j); fprintf(f, "\tp->%s.count = %d;\n", bf->name, j); j = 0; go = 1; CurrentLine = bf->def; while (go) { if (!GetNextToken(token, ",")) go = 0; store = CurrentLine; CurrentLine = token; GetNextToken(tok, " \""); TranslateToken(tok); fprintf(f, "\tp->%s.vals[%d] = %s;\n", bf->name, j, tok); j+=1; CurrentLine = store; } } //other nodes else if (!strcmp(bf->familly, "SFImage")) { //we currently only have SFImage, with NO texture so do nothing } //unknown init (for debug) else { fprintf(f, "UNKNOWN FIELD (%s);\n", bf->familly); } } fprintf(f, "\treturn (GF_Node *)p;\n}\n\n"); } fprintf(f, "\n\n\n"); //creator function fprintf(f, "GF_Node *gf_sg_mpeg4_node_new(u32 NodeTag)\n{\n\tswitch (NodeTag) {\n"); for (i=0; i<gf_list_count(BNodes); i++) { n = gf_list_get(BNodes, i); if (!n->skip_impl) { fprintf(f, "\tcase TAG_MPEG4_%s:\n\t\treturn %s_Create();\n", n->name, n->name); } } fprintf(f, "\tdefault:\n\t\treturn NULL;\n\t}\n}\n\n"); fprintf(f, "#ifndef GF_NODE_USE_POINTERS\n"); fprintf(f, "const char *gf_sg_mpeg4_node_get_class_name(u32 NodeTag)\n{\n\tswitch (NodeTag) {\n"); for (i=0; i<gf_list_count(BNodes); i++) { n = gf_list_get(BNodes, i); if (!n->skip_impl) fprintf(f, "\tcase TAG_MPEG4_%s:\n\t\treturn \"%s\";\n", n->name, n->name); } fprintf(f, "\tdefault:\n\t\treturn \"Unknown Node\";\n\t}\n}\n\n"); fprintf(f, "void gf_sg_mpeg4_node_del(GF_Node *node)\n{\n\tswitch (node->sgprivate->tag) {\n"); for (i=0; i<gf_list_count(BNodes); i++) { n = gf_list_get(BNodes, i); if (!n->skip_impl) { fprintf(f, "\tcase TAG_MPEG4_%s:\n\t\t%s_Del(node); return;\n", n->name, n->name); } } fprintf(f, "\tdefault:\n\t\treturn;\n\t}\n}\n\n"); fprintf(f, "u32 gf_sg_mpeg4_node_get_field_count(GF_Node *node, u8 code_mode)\n{\n\tswitch (node->sgprivate->tag) {\n"); for (i=0; i<gf_list_count(BNodes); i++) { n = gf_list_get(BNodes, i); if (!n->skip_impl) { fprintf(f, "\tcase TAG_MPEG4_%s:return %s_get_field_count(node, code_mode);\n", n->name, n->name); } } fprintf(f, "\tdefault:\n\t\treturn 0;\n\t}\n}\n\n"); fprintf(f, "GF_Err gf_sg_mpeg4_node_get_field(GF_Node *node, GF_FieldInfo *field)\n{\n\tswitch (node->sgprivate->tag) {\n"); for (i=0; i<gf_list_count(BNodes); i++) { n = gf_list_get(BNodes, i); if (!n->skip_impl) { fprintf(f, "\tcase TAG_MPEG4_%s: return %s_get_field(node, field);\n", n->name, n->name); } } fprintf(f, "\tdefault:\n\t\treturn GF_BAD_PARAM;\n\t}\n}\n\n"); fprintf(f, "\n\n#endif\n\n"); fprintf(f, "GF_Err gf_sg_mpeg4_node_get_field_index(GF_Node *node, u32 inField, u8 code_mode, u32 *fieldIndex)\n{\n\tswitch (node->sgprivate->tag) {\n"); for (i=0; i<gf_list_count(BNodes); i++) { n = gf_list_get(BNodes, i); if (!n->skip_impl) { fprintf(f, "\tcase TAG_MPEG4_%s: return %s_get_field_index(node, inField, code_mode, fieldIndex);\n", n->name, n->name); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -