GPAC coding styles as of 0.4.0 Foreword: As of 0.4.0, GPAC is being licensed under the LGPL. This brought the concern of refining coding conventions inside the framework so as to extract the core functionlaities of GPAC to third-party developers. The number of modules present in GPAC having been developed for many years without any specific coding styles, the entire GPAC framework has been rewrote in a NON-BACKWARD COMPATIBLE WAY. Introduction coding styles only concern the GPAC library (M4Systems in GPAC<=0.3.0, libgpac now), and, although recommended, are not mandatory for plugins or applications development. 1 Exported symbols 1.0 Informative note The GF_ or gf_ stands for "gpac framework" 1.1 typedef of structures - typedef of base types - typedef of functions All symbols defined within libgpac library and exported for application development purposes shall begin be named GF_* with the first character of "*" being in capital, regardless of their functionality. For example, GF_Thread (structure), GF_Err (redefined type), GF_LineCap (enum typedef) All structure typedefs, whether defined (declaration exported through ehaders) or not (declaration intern to the GPAC core lib), must follow this principle. Furthermore, typedef of non exported structure shall only apply to the structure itself, not a pointer to it. typedef struct _my_gpac_thingy *GF_LPMYGPACSTUFF; /*this is FORBIDDEN*/ typedef struct _my_gpac_thingy GF_MyGPACStuff; /*this is OK*/ This will allow easy exporting of structure declaration if needed at some point in the development. 1.2 constants All constants (whether #defines or enums) shall be in capital letters and begin with "GF_" and use "_" for word separation For example, error code GF_BAD_PARAM. Enums names shall refer to the main module they are used in through a keyword right after the GF_ . For example, * enums refering to file format (isomedia) will be prefixed by GF_ISOM_ * enums refering to MPEG-4 OD tools (odf) will be prefixed by GF_ODF_ 1.3 functions All exported functions and pointer to functions shall begin with "gf_". The name shall refer to the main module they are sued in through a keyword right after the gf_ when reasonable (gf_isom_, gf_odf_, gf_term_), or to the tool they refer to (gf_bs_, gf_url, ...) 2 Miscalleanous All exported functions' names shall be in lower case exclusively. All exported functions' parameters should be in lower case exclusively. Exported structures may use case in any fashion as long as they respect the rules expressed in section 1 above. Exported structures member should preferably all be lower case - this may not be feasible for scene graph nodes & like... All exported header files shall be in lower case All source files within the gpac core shall be in lower case All comments should be C-like ones (/**/) not C++ ones (//) All exported headers documentation should be written with dowygen syntax All constructor-like functions should be of style gf_zzz_new All destructor like functions should be of style gf_zzz_del 3 Rearchitecture of the GPAC repository This recaps the changes between gpac 0.3.0 and gpac 0.4.0 as far as the core architecture is concerned. The former M4Systems library is now simply libGPAC (eg libgpac.lib, libgpac.dll, libgpac.so, libgpac.a) Currently no decision has been taken regarding splitting of this library in smaller packages, this still needs discussion. directory architecture: /gpac /gpac/applications/ former Applications/, misc renames /gpac/applications/generators: former SceneGenerators /gpac/applications/testapps: added for apps testing some features of gpac (currently only BIFSEngine tester) /gpac/bin rename of directories: arm_debug -> arm_ppc02_deb arm_release -> arm_ppc02_rel Debug -> w32_deb Release -> w32_rel /gpac/build: former IDEs directory, with project files for MS eVC*/VC* /gpac/doc /gpac/doc/libgpac: future place for doc of all exported functions from libgpac /gpac/extra_lib /gpac/extra_lib/include unchanged /gpac/extra_lib/lib rename of directories: arm_debug -> arm_ppc02_deb arm_release -> arm_ppc02_rel w32_debug -> w32_deb w32_release -> w32_rel /gpac/src: former M4Systems directory, source for the gpac core lib /gpac/src/utils: former Tools - function names: gf_* /gpac/src/isomedia: former MP4 - code for isomedia - function names: gf_isom_* /gpac/src/odf: former OD - code for MPEG-4 OD Framework - function names: gf_odf_* /gpac/src/ietf: former IETF - code for IETF SDP/RTP/RTCP/RTSP protocols - function names: (or gf_sdp_*, gf_rtp_*, gf_rtsp_*) moved packetizers in this place since payloads are quite related to IETF... /gpac/src/bifs: former BIFS - code for BIFS encoding and decoding - exported function names: gf_bifs_* /gpac/src/terminal: former ESM - code for terminal module - exported function names: gf_term_* /gpac/src/mcrypt: unchaged - function names: gf_crypt_* /gpac/src/renderer: former renderer - function names: gf_sr_* /gpac/src/scenegraph: former SceneGraph - function names: gf_sg_* for all common code (base nodes and graph handling), gf_sg_vrml_*: MPEG4, VRML, X3D related gf_sg_svg_*: SVG related (maybe laser-related) /gpac/src/media_tools: former authoring on media import/export and IsoMedia file stuff. function names: gf_media_*, gf_hinter_ /gpac/src/scene_manager: former authoring on scene manager. function names: gf_sm_* /gpac/include /gpac/include/gpac: splitting of former m4_tools.h into dedicated headers, and for some other modules too (media parsers, ...) /gpac/include/gpac/internal: former intern , no big changes /gpac/modules: former Plugins directory.