README.developers
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:13k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. Dirac software development practices
  2. ====================================
  3. Contents
  4. --------
  5. 1. Licenses and submitting work
  6. 2. Sourceforge Developers forum
  7. 3. Mailing lists
  8. 4. Using the CVS repository
  9. 5. CVS log messages
  10. 6. Software practices
  11. 7. Profiling & optimisation
  12. 8. Line-endings
  13. 9. Binary files in CVS
  14. 1. Licenses and submitting work
  15. -------------------------------
  16. Developers submitting work to the Dirac project should print out, 
  17. complete, and sign the Developer's Certificate of Origin contained 
  18. in the DCO.developers file. It should be posted to: 
  19. Dr Tim Borer
  20. BBC Research and Development
  21. Kingswood Warren
  22. Tadworth
  23. Surrey KT20 6NP
  24. United Kingdom
  25. For simplicity developers must submit code using the same
  26. license that we distribute under, which is the Mozilla Triple
  27. license (http://www.mozilla.org/MPL/). Using any other license
  28. causes complexity and FUD.
  29. Contributions should be in the form of a patch, which may be for a
  30. whole directory. For changes to an existing file all that is needed
  31. is to add the author's name to the list of contributors, since the
  32. license will remain the MPL. For new files, the header in each file
  33. should be completed from Exhibit A, the Mozilla Triple License (from the
  34. COPYING file). It should NOT be copied from files already obtained
  35. in the Dirac project, since some details may differ.
  36. To create a context diff patch run the command
  37. diff -ruN compress-orig compress-mods > patch.txt
  38.    where compress-orig is the directory with the original code and
  39.    compress-mods is the directory with the modified files.
  40. The patch.txt file should then be submitted to the Sourceforge Patch
  41. tracker.
  42. 2. Sourceforge Developers forum
  43. -------------------------------
  44. The Developers forum is where Dirac core developers plan and coordinate
  45. changes to Dirac.  All API changes, new features and implementation
  46. difficulties are announced and discussed here.
  47. Examples of changes which should be announced in the Developers forum:
  48.   - Pic API change: return bool instead of void for ReadNextFrame
  49.   - Pic API change: most methods can now throw ErrorState objects
  50. Changes which are small in scope and unlikely to affect developers
  51. should not be announced on the forum.  Changes which touch
  52. many files can fall into this category - for example
  53.   - Fixed inconsistent CRLF line-endings to be LF.
  54.   - Fixed "use of uninitialised variable" cases found by gcc.
  55.   - Fixed memory leak in all instantiations of Pic (found by valgrind).
  56.   - Add feature test for stdint.h to be portable to Solaris.
  57. Developers should 'monitor' the forums by going to the forum page and
  58. clicking 'Monitor this forum'.  Any new message will then be emailed
  59. to their username@users.sourceforge.net email address.
  60.   http://sourceforge.net/forum/forum.php?forum_id=353620
  61. 3. Mailing lists
  62. ----------------
  63. Developers should subscribe to the dirac-announce and dirac-commits
  64. mailing lists.  dirac-announce is used to announce new releases and
  65. dirac-commits is sent mail automatically for every commit.
  66. 4. Using the CVS repository
  67. ---------------------------
  68. The latest (but non-stable) version of the code can be downloaded direct
  69. from the Sourceforge repository using anonymous CVS. Instructions for 
  70. doing so can be found at the Dirac CVS page: 
  71. http://sourceforge.net/cvs/?group_id=102564 
  72. The Dirac codec module is called 'compress'.
  73. To compile the codec from the CVS sources, the configure script must be
  74. built using autotools. The required autotool operations have been
  75. collated in a bootstrap script - simply type 
  76. ./bootstrap
  77. at the command prompt in the installation directory. Then follow the
  78. usual install instructions in the INSTALL document.
  79. 5. CVS log messages
  80. -------------------
  81. Always indicate why the change is necessary in addition to a succinct summary
  82. of what as changed.  As the number of developers increases it becomes
  83. increasingly difficult for developers to understand the changes going on in
  84. areas they are not familiar with.  If the changes relate to an API change
  85. developers may not realise this if it is not mentioned in the log message
  86. as the reason for the change.
  87. E.g.
  88.   Bad
  89.   ---
  90.   - Added gamma parameter
  91.   - Replace stricmp with strcasecmp
  92.   Good
  93.   ----
  94.   - Added gamma parameter to record more accurate data on source material
  95.   - Enhanced portability: stricmp replaced by strcasecmp (the POSIX standard) 
  96. 6. Software practices
  97. ---------------------
  98. I. Portability
  99.   This project aims to be as portable as possible and to that end follows the
  100.   following standards:
  101.     POSIX 1003.1 - System Interfaces volume (XSH) & Threads
  102.     ISO C99 (1999)
  103.     ISO C++ (1998)
  104.   The only exception to this practice is for the Microsoft Visual C++ compiler
  105.   which continues to fall short of all the above standards.  Where MS VC++
  106.   is incompatible with the standards, experiment is often necessary to find
  107.   an alternative usage which works under MS VC++.  Use of the _MSC_VER macro
  108.   in conditional compilation is the accepted way to accommodate such
  109.   differences.
  110. II. Coding Style
  111.    The following guidelines must be adhered to while developing code.
  112. -- CVS related tags
  113.    
  114.  - Include the following RCS tags in all new files (.cpp and .h). Include them
  115.    on the first line of the licence block
  116.    Id
  117.    Name
  118.    E.g.
  119.    /* ***** BEGIN LICENSE BLOCK *****
  120.    *
  121.    * $Id: README.developers,v 1.1 2005/01/30 05:11:39 gabest Exp $ $Name:  $
  122.    *
  123.    *  rest of licence text
  124.    * ***** END LICENSE BLOCK ***** */
  125.  - Remove the following tags from all files. Do not include them in new files
  126.    Author
  127.    Revision
  128.    Log
  129. --  General Source code formatting
  130.  - Use spaces in assigment statements and compound statements to make code
  131.    more readable.
  132.    E.g.
  133.    a = b;
  134.    if (a < b)
  135.    for (i=0; i<10; i++)
  136.    c = (a < b) ? a : b;
  137.  - Curly braces go on a separate line
  138.    
  139.    E.g.
  140.    if (a < b)
  141.    {
  142.        statment1;
  143.        statement2;
  144.        .
  145.        .
  146.        .
  147.    }
  148.    Curly braces can be ommitted if there is only one statment in the block.
  149.  - Use space between the comment marker and start of text
  150.    E.g.
  151.    // this is a comment
  152.    
  153.    /*
  154.    * This is a multiple line 
  155.    * comment
  156.    */
  157.  - Use spaces instead of tabs for indentation
  158.  - Indent Constructor initialiser lists from the constructor name
  159.    
  160.    E.g.
  161.    MyClass::Myclass (int val) :
  162.        m_val(val)
  163.    {
  164.    }
  165. --  Use of Namespaces
  166.  - All core Dirac functionality must be in the namespace dirac.
  167.  - All other functionality must be defined in a namespace of its own. E.g.
  168.    conversion utilities are in the namespace dirac_vu, instrumentation utilities
  169.    are in the namespace dirac_instr.
  170. --  General naming standards
  171.  - Local variables are lowercase and use underscores to separate words.
  172.    
  173.    E.g.
  174.    int outer_loop_idx;
  175.  - Use constants instead of macros
  176.  - Type definitions and Enumerations start with an uppercase letter and
  177.    use lowercase multi-word names using an uppercase letter for each new word.
  178.    E.g
  179.    typedef int CompressionType;
  180.    enum CompSort {...};
  181. --  Class Definition
  182.  - Class names start with an uppercase letter and the use lowercase with
  183.    multi-word names using an uppercase letter for each new word.
  184.    E.g. ArithCodec
  185.  - Class member variables are lowercase with a leading "m_". Use underscores to
  186.    separate words.
  187.    E.g.
  188.    int m_num_contexts;
  189.  - Group declaration of member functions and member variables in the class
  190.    defintion based on access type.
  191.    E.g
  192.    class MyClass
  193.    {
  194.    public:
  195.        //constructor
  196.        MyClass (int val);
  197.        
  198.        //access functions
  199.        int Value(void);
  200.        void SetValue(int val);
  201.    private:
  202.        void Init(int val);
  203.    private:
  204.        int m_val;
  205.    };
  206.  - Avoid declaring public member variables. Make them private and define access
  207.    functions to set/get their values.
  208.  - Avoid defining functions in class definitions except for trivial functions
  209.  - The declaration syntax for accessor/mutator functions is as follows
  210.    void SetVariable (const VariableType& var);
  211.    
  212.    VariableType Variable() const;
  213.    const VariableType& Variable() const;
  214.  - Use builtin copy constructors and assigment operators whenever appropriate
  215.    e.g. when the class does not use dynamic memory allocation, but their use
  216.    should be commented. This is to ensure that changes to the class are properly
  217.    reflected in these operators.
  218.  - Encapsulate enumerated types in the class definition if the enumerated type
  219.    is relevant only to that class.
  220.  - Nest classes within a class if they have no meaning outside the context of
  221.    the class.
  222. --  Function Definitions
  223.  - Function names start with an upperccase letter and the use lowercase with
  224.    multi-word names using an uppercase letter for each new word.
  225.    E.g. ArithCodec
  226.  - Function parameters are lowercase. Use underscores to separate words.
  227.     void BandCodec::Resize(const int& context_num)
  228.  - Use the following notation for reference parameters in a function
  229.    void BandCodec::Resize(const int& context_num)
  230.                   OR
  231.    void BandCodec::Resize(const int &context_num)
  232.  - Dummy argument names, if used, should be the same in the function
  233.    declarations and definitions to avoid confusion.
  234.        
  235. III. Code Review
  236.    All code will be peer-reviewed before being checked in to SourceForge
  237.    CVS. Developers should use the guidelines specified in the Coding Style
  238.    sub-section while reviewing code.
  239. IV. Testing with "make check"
  240.   Developers should aim to have all the regression tests succeed.  If a
  241.   developer anticipates breaking the tests (while a significant body of work
  242.   is being undertaken) this must be announced on the Developer Forum, and
  243.   the fixing of the tests would be coordinated there.
  244.   Developers should also aim to have good test coverage especially when
  245.   adding functionality.  When adding a new feature, expect to be asked
  246.   "Where's the test?"
  247.   A new target 'valgrind-check' has been included which uses valgrind, if 
  248.   available, to check for memory leaks, uninitialised memory reads, invalid
  249.   writes etc.
  250. 7. Profiling & optimisation
  251. ---------------------------
  252. Dirac is alpha software so developers cannot expect optimisation improvements
  253. to survive algorithm improvements or code refactoring and restructuring.  That
  254. being said, the Dirac maintainers would like to encourage profiling analysis
  255. and portable and modular optimisation.  Developers are encouraged to share
  256. their profiling analysis techniques and results.  The following guidelines
  257. should be followed:
  258.   - Any optimisation patch must be accompanied by at least a summary of
  259.     profile analysis and timing results for a range of video material.  There
  260. must be sufficient information for other developers to reproduce the
  261. results.
  262.   - A good example of modular and portable optimisations for MMX/SSE (x86),
  263.     ALTIVEC (PowerPC), VIS (SPARC) and Alpha can be found in libmpeg2's
  264. motion compensation code:
  265.   mpeg2dec/libmpeg2/motion_comp.c
  266.   mpeg2dec/libmpeg2/motion_comp_alpha.c
  267.   mpeg2dec/libmpeg2/motion_comp_altivec.c
  268.   mpeg2dec/libmpeg2/motion_comp_mmx.c
  269.   mpeg2dec/libmpeg2/motion_comp_vis.c
  270.   - For MMX/SSE/SSE2 optimisations developers must use a compiler-portable
  271.     macro approach such as that adopted by libmpeg2.  The Dirac maintainers
  272. plan to use identical macro names to those found in
  273.   http://cvs.sourceforge.net/viewcvs.py/libmpeg2/mpeg2dec/include/mmx.h
  274.   http://cvs.sourceforge.net/viewcvs.py/libmpeg2/mpeg2dec/include/sse.h
  275.   - x86-specific optimisations need not be limited to MMX since SSE is
  276.     readily available on PentiumIII and AMD Athlons.  SSE2 optimisation is
  277. encouraged since it becoming more commonly available (on Pentium4,
  278. Athlon64 and Opteron), but take care to use a portable 16byte memory
  279. alignment technique.
  280. Profiling can be supported by adding the following parameter to ./configure
  281. before building:
  282. --enable-profile
  283. The code can then be profiled by, for example, gprof.
  284. 8. Line-endings
  285. ---------------
  286. All source code and documentation will have LF line-endings, include makefiles
  287. and scripts.  The only exception will be for .vcproj and .sln (and any other
  288. WIN32 specific) files which will not function under MS VC++ unless they use
  289. CR-LF line-endings.
  290. 9. Binary files in CVS
  291. ----------------------
  292. CVS will modify files during checkin and checkout unless they are tagged as
  293. binary.  The modifications include translation of CR-LF <-> LF (depending on
  294. the OS of the CVS client) and expansion of CVS keywords such as $Id and $Log.
  295. Files which must not be modified in this way must be tagged as binary either
  296. using the add command or admin command:
  297.   cvs add -kb fig1.jpg
  298.   cvs admin -kb fig1.jpg  (for files already in CVS)
  299. MS VC++ project files, such as .vcproj and .sln, fall into this category since
  300. they do not function if their line-endings are not CR-LF.