GPAC coding style

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.
  
  AStyle is a code beautifier tool. Code should be compliant with the following pattern provided by AStyle :
  AStyle -r --indent=tab '*.c' '*.h' '*.cpp' '*.hpp'
    
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.
    
    