[vlc-devel] Several "mini include-guards" within `include/vlc_codecs.h`; rationale?

Filip Roséen filip at atch.se
Sat Feb 20 03:50:15 CET 2016

I am in the middle of a massive clean up of the codebase, currently
boiling down to removing usage of reserved identifiers (in order to make
the code compliant with the C (WG15) and C++ (WG21) Standard).

Partially disabling of header-content, why?

During my quest I stumbled upon the below in `modules/codec/mft.c`:

    46: #define _VIDEOINFOHEADER_
    47: #include <vlc_codecs.h>

Inside `include/vlc_codecs.h` we find the following:

    155: #ifndef _VIDEOINFOHEADER_
    156: #define _VIDEOINFOHEADER_
    157: typedef struct
    158: ATTR_PACKED
    159: {
    160:     RECT32                  rcSource;
    161:     RECT32                  rcTarget;
    162:     uint32_t                dwBitRate;
    163:     uint32_t                dwBitErrorRate;
    164:     REFERENCE_TIME          AvgTimePerFrame;
    165:     VLC_BITMAPINFOHEADER    bmiHeader;
    167: #endif

It seems like the author (Felix Abecassis <felix.abecassis at gmail.com>
according to `git blame -e modules/codec/mft.c`) wanted to ignore the
`typedef` of `VIDEOINFOHEADER`. I have tried digging around but I have
yet to find a single reason for disabling that part of the header.


  - Can the following patch be applied without causing issues?

        --- a/modules/codec/mft.c
        +++ b/modules/codec/mft.c
        @@ -43,7 +43,6 @@
         #include <vlc_plugin.h>
         #include <vlc_codec.h>
         #include "../packetizer/h264_nal.h"
        -#define _VIDEOINFOHEADER_
         #include <vlc_codecs.h>
         #include <mfapi.h>


"Protected" regions within `include/vlc_codecs.h`

I also noticed that `include/vlc_codecs.h` have a lot of other parts
that follow the same style as previously mentioned, such as:

    169: #ifndef _RGBQUAD_
    170: #define _RGBQUAD_
    171: typedef struct
    172: ATTR_PACKED
    173: {
    174:     uint8_t rgbBlue;
    175:     uint8_t rgbGreen;
    176:     uint8_t rgbRed;
    177:     uint8_t rgbReserved;
    178: } RGBQUAD1;
    179: #endif

At first I thought cases such as the above was a leftover from when
someone merged several headers into one, but when looking at the commit
log this does not seem to be the case.

According to the commit log, the code was introduced to `include/codecs.h` (Jan 2005),
and later that file was renamed to `include/vlc_codecs.h` (Nov 2006).

The above is based on the below:

    % git log -S "_RGBQUAD_"
    % git diff d3fe7f28797d4dba65ffcdd60bf932e758a48a9e\^ d3fe7f28797d4dba65ffcdd60bf932e758a48a9e
    % git diff c330b1e1ef13296994fd0e004d4af5286367319e\^ c330b1e1ef13296994fd0e004d4af5286367319e


  - Are the weird "include-guards" in `include/vlc_codecs.h` documented
    behavior, or can they safely be removed (or atleast renamed to make
    the identifiers legal)?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20160220/f344f78f/attachment.html>

More information about the vlc-devel mailing list