Doxygen LaTeX documentation troubles fixed

MS
Michael Scheiffler
Tue, Jul 4, 2017 7:20 AM

Hey there,

when trying to generate a PDF documentation of PJMedia using Doxygen
with LaTeX output, I ran into several issues:

  1. Doxygen/LaTeX seems to have severe troubles with unnamed nested compounds.
  2. Percent sign characters in comments must be escaped (otherwise
    those get interpreted in an incorrect way).

I managed to solve those issues. See the patches below...

pjmedia/include/pjmedia/wave.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pjmedia/include/pjmedia/wave.h b/pjmedia/include/pjmedia/wave.h
index a1fec7c..8128ca4 100644
--- a/pjmedia/include/pjmedia/wave.h
+++ b/pjmedia/include/pjmedia/wave.h
@@ -91,14 +91,14 @@ typedef enum {
struct pjmedia_wave_hdr
{
/** This structure describes RIFF WAVE file header */

  • struct {
  • struct pjmedia_wave_hdr_riff {
    pj_uint32_t riff; /< "RIFF" ASCII tag. */
    pj_uint32_t file_len; /
    < File length minus 8 bytes */
    pj_uint32_t wave; /**< "WAVE" ASCII tag. */
    } riff_hdr;

    /** This structure describes format chunks/header  */

  • struct {
  • struct pjmedia_wave_hdr_fmt {
    pj_uint32_t fmt; /< "fmt " ASCII tag. */
    pj_uint32_t len; /
    < 16 for PCM. */
    pj_uint16_t fmt_tag; /**< 1 for PCM */
    @@ -110,7 +110,7 @@ struct pjmedia_wave_hdr
    } fmt_hdr;

    /** The data header preceeds the actual data in the file. */

  • struct {
  • struct pjmedia_wave_hdr_data {
    pj_uint32_t data; /< "data" ASCII tag. */
    pj_uint32_t len; /
    < Data length. */
    } data_hdr;

pjmedia/include/pjmedia/rtcp_xr.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pjmedia/include/pjmedia/rtcp_xr.h
b/pjmedia/include/pjmedia/rtcp_xr.h
index 9050f25..8491c1a 100644
--- a/pjmedia/include/pjmedia/rtcp_xr.h
+++ b/pjmedia/include/pjmedia/rtcp_xr.h
@@ -216,7 +216,7 @@ typedef struct pjmedia_rtcp_xr_rb_voip_mtc
*/
typedef struct pjmedia_rtcp_xr_pkt
{

  • struct {
  • struct pjmedia_rtcp_xr_pkt_common {
    #if defined(PJ_IS_BIG_ENDIAN) && PJ_IS_BIG_ENDIAN!=0
    unsigned version:2; /< packet type            */
    unsigned p:1; /
    < padding flag          */
    @@ -244,7 +244,7 @@ typedef struct pjmedia_rtcp_xr_pkt
    */
    typedef struct pjmedia_rtcp_xr_stream_stat
    {
  • struct {
  • struct pjmedia_rtcp_xr_stream_stat_sum {
    pj_time_val    update; /**< Time of last update.    */

pj_uint32_t    begin_seq; /< Begin # seq of this interval.  */
@@ -266,7 +266,7 @@ typedef struct pjmedia_rtcp_xr_stream_stat
pj_math_stat    toh; /
< TTL of hop limit statistics.  */
} stat_sum;

  • struct {
  • struct pjmedia_rtcp_xr_stream_stat_voip_mtc {
    pj_time_val    update;    /**< Time of last update.    */

pj_uint8_t    loss_rate;    /**< Packet loss rate    /
@@ -341,7 +341,7 @@ struct pjmedia_rtcp_xr_session
/
This structure contains variables needed for calculating
* burst metrics.
*/

  • struct {
  • struct pjmedia_rtcp_xr_session_voip_mtc_stat {
    pj_uint32_t    pkt;
    pj_uint32_t    lost;
    pj_uint32_t    loss_count;

pjmedia/include/pjmedia/format.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pjmedia/include/pjmedia/format.h b/pjmedia/include/pjmedia/format.h
index 1bbd96c..5c2c56f 100644
--- a/pjmedia/include/pjmedia/format.h
+++ b/pjmedia/include/pjmedia/format.h
@@ -122,7 +122,7 @@ typedef enum pjmedia_format_id
* This is a packed 4:4:4/32bpp format, where each pixel is encoded as
* four consecutive bytes, arranged in the following sequence: V0, U0,
* Y0, A0. Source:

  • * http://msdn.microsoft.com/en-us/library/dd206750%28v=VS.85%29.aspx#ayuv
    
  • * http://msdn.microsoft.com/en-us/library/dd206750\%28v=VS.85\%29.aspx#ayuv
    */
    
    PJMEDIA_FORMAT_AYUV    = PJMEDIA_FORMAT_PACK('A', 'Y', 'U', 'V'),

@@ -132,7 +132,7 @@ typedef enum pjmedia_format_id
* the first Y sample, the second byte contains the first U (Cb) sample,
* the third byte contains the second Y sample, and the fourth byte
* contains the first V (Cr) sample, and so forth. Source:

  • * http://msdn.microsoft.com/en-us/library/dd206750%28v=VS.85%29.aspx#yuy2
    
  • * http://msdn.microsoft.com/en-us/library/dd206750\%28v=VS.85\%29.aspx#yuy2
    */
    
    PJMEDIA_FORMAT_YUY2    = PJMEDIA_FORMAT_PACK('Y', 'U', 'Y', '2'),

@@ -142,7 +142,7 @@ typedef enum pjmedia_format_id
* image is addressed as an array of two little-endian WORD values, the
* first WORD contains U in the LSBs and Y0 in the MSBs, and the second
* WORD contains V in the LSBs and Y1 in the MSBs. Source:

  • * http://msdn.microsoft.com/en-us/library/dd206750%28v=VS.85%29.aspx#uyvy
    
  • * http://msdn.microsoft.com/en-us/library/dd206750\%28v=VS.85\%29.aspx#uyvy
    */
    
    PJMEDIA_FORMAT_UYVY    = PJMEDIA_FORMAT_PACK('U', 'Y', 'V', 'Y'),

@@ -303,7 +303,7 @@ typedef struct pjmedia_format
/**
* Detail section to describe the media.
*/

  • union
  • union pjmedia_format_detail
    {
    /**
  • Detail section for audio format.

Regards,
Michael

Hey there, when trying to generate a PDF documentation of PJMedia using Doxygen with LaTeX output, I ran into several issues: 1. Doxygen/LaTeX seems to have severe troubles with unnamed nested compounds. 2. Percent sign characters in comments must be escaped (otherwise those get interpreted in an incorrect way). I managed to solve those issues. See the patches below... pjmedia/include/pjmedia/wave.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pjmedia/include/pjmedia/wave.h b/pjmedia/include/pjmedia/wave.h index a1fec7c..8128ca4 100644 --- a/pjmedia/include/pjmedia/wave.h +++ b/pjmedia/include/pjmedia/wave.h @@ -91,14 +91,14 @@ typedef enum { struct pjmedia_wave_hdr { /** This structure describes RIFF WAVE file header */ - struct { + struct pjmedia_wave_hdr_riff { pj_uint32_t riff; /**< "RIFF" ASCII tag. */ pj_uint32_t file_len; /**< File length minus 8 bytes */ pj_uint32_t wave; /**< "WAVE" ASCII tag. */ } riff_hdr; /** This structure describes format chunks/header */ - struct { + struct pjmedia_wave_hdr_fmt { pj_uint32_t fmt; /**< "fmt " ASCII tag. */ pj_uint32_t len; /**< 16 for PCM. */ pj_uint16_t fmt_tag; /**< 1 for PCM */ @@ -110,7 +110,7 @@ struct pjmedia_wave_hdr } fmt_hdr; /** The data header preceeds the actual data in the file. */ - struct { + struct pjmedia_wave_hdr_data { pj_uint32_t data; /**< "data" ASCII tag. */ pj_uint32_t len; /**< Data length. */ } data_hdr; pjmedia/include/pjmedia/rtcp_xr.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pjmedia/include/pjmedia/rtcp_xr.h b/pjmedia/include/pjmedia/rtcp_xr.h index 9050f25..8491c1a 100644 --- a/pjmedia/include/pjmedia/rtcp_xr.h +++ b/pjmedia/include/pjmedia/rtcp_xr.h @@ -216,7 +216,7 @@ typedef struct pjmedia_rtcp_xr_rb_voip_mtc */ typedef struct pjmedia_rtcp_xr_pkt { - struct { + struct pjmedia_rtcp_xr_pkt_common { #if defined(PJ_IS_BIG_ENDIAN) && PJ_IS_BIG_ENDIAN!=0 unsigned version:2; /**< packet type */ unsigned p:1; /**< padding flag */ @@ -244,7 +244,7 @@ typedef struct pjmedia_rtcp_xr_pkt */ typedef struct pjmedia_rtcp_xr_stream_stat { - struct { + struct pjmedia_rtcp_xr_stream_stat_sum { pj_time_val update; /**< Time of last update. */ pj_uint32_t begin_seq; /**< Begin # seq of this interval. */ @@ -266,7 +266,7 @@ typedef struct pjmedia_rtcp_xr_stream_stat pj_math_stat toh; /**< TTL of hop limit statistics. */ } stat_sum; - struct { + struct pjmedia_rtcp_xr_stream_stat_voip_mtc { pj_time_val update; /**< Time of last update. */ pj_uint8_t loss_rate; /**< Packet loss rate */ @@ -341,7 +341,7 @@ struct pjmedia_rtcp_xr_session /* This structure contains variables needed for calculating * burst metrics. */ - struct { + struct pjmedia_rtcp_xr_session_voip_mtc_stat { pj_uint32_t pkt; pj_uint32_t lost; pj_uint32_t loss_count; pjmedia/include/pjmedia/format.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pjmedia/include/pjmedia/format.h b/pjmedia/include/pjmedia/format.h index 1bbd96c..5c2c56f 100644 --- a/pjmedia/include/pjmedia/format.h +++ b/pjmedia/include/pjmedia/format.h @@ -122,7 +122,7 @@ typedef enum pjmedia_format_id * This is a packed 4:4:4/32bpp format, where each pixel is encoded as * four consecutive bytes, arranged in the following sequence: V0, U0, * Y0, A0. Source: - * http://msdn.microsoft.com/en-us/library/dd206750%28v=VS.85%29.aspx#ayuv + * http://msdn.microsoft.com/en-us/library/dd206750\%28v=VS.85\%29.aspx#ayuv */ PJMEDIA_FORMAT_AYUV = PJMEDIA_FORMAT_PACK('A', 'Y', 'U', 'V'), @@ -132,7 +132,7 @@ typedef enum pjmedia_format_id * the first Y sample, the second byte contains the first U (Cb) sample, * the third byte contains the second Y sample, and the fourth byte * contains the first V (Cr) sample, and so forth. Source: - * http://msdn.microsoft.com/en-us/library/dd206750%28v=VS.85%29.aspx#yuy2 + * http://msdn.microsoft.com/en-us/library/dd206750\%28v=VS.85\%29.aspx#yuy2 */ PJMEDIA_FORMAT_YUY2 = PJMEDIA_FORMAT_PACK('Y', 'U', 'Y', '2'), @@ -142,7 +142,7 @@ typedef enum pjmedia_format_id * image is addressed as an array of two little-endian WORD values, the * first WORD contains U in the LSBs and Y0 in the MSBs, and the second * WORD contains V in the LSBs and Y1 in the MSBs. Source: - * http://msdn.microsoft.com/en-us/library/dd206750%28v=VS.85%29.aspx#uyvy + * http://msdn.microsoft.com/en-us/library/dd206750\%28v=VS.85\%29.aspx#uyvy */ PJMEDIA_FORMAT_UYVY = PJMEDIA_FORMAT_PACK('U', 'Y', 'V', 'Y'), @@ -303,7 +303,7 @@ typedef struct pjmedia_format /** * Detail section to describe the media. */ - union + union pjmedia_format_detail { /** * Detail section for audio format. Regards, Michael