Mac and Linux SDL2 binary snapshots
Edward Rudd
2014-01-25 3f26dd9232630a5d9e9a201aa0df48ce02815f69
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
typedef unsigned char uchar;
typedef struct MonitorInfo MonitorInfo;
typedef struct Timing Timing;
typedef struct DetailedTiming DetailedTiming;
 
typedef enum
{
    UNDEFINED,
    DVI,
    HDMI_A,
    HDMI_B,
    MDDI,
    DISPLAY_PORT
} Interface;
 
typedef enum
{
    UNDEFINED_COLOR,
    MONOCHROME,
    RGB,
    OTHER_COLOR
} ColorType;
 
typedef enum
{
    NO_STEREO,
    FIELD_RIGHT,
    FIELD_LEFT,
    TWO_WAY_RIGHT_ON_EVEN,
    TWO_WAY_LEFT_ON_EVEN,
    FOUR_WAY_INTERLEAVED,
    SIDE_BY_SIDE
} StereoType;
 
struct Timing
{
    int width;
    int height;
    int frequency;
};
 
struct DetailedTiming
{
    int        pixel_clock;
    int        h_addr;
    int        h_blank;
    int        h_sync;
    int        h_front_porch;
    int        v_addr;
    int        v_blank;
    int        v_sync;
    int        v_front_porch;
    int        width_mm;
    int        height_mm;
    int        right_border;
    int        top_border;
    int        interlaced;
    StereoType    stereo;
 
    int        digital_sync;
    union
    {
    struct
    {
        int bipolar;
        int serrations;
        int sync_on_green;
    } analog;
 
    struct
    {
        int composite;
        int serrations;
        int negative_vsync;
        int negative_hsync;
    } digital;
    };
};
 
struct MonitorInfo
{
    int            checksum;
    char        manufacturer_code[4];
    int            product_code;
    unsigned int    serial_number;
    
    int            production_week;    /* -1 if not specified */
    int            production_year;    /* -1 if not specified */
    int            model_year;        /* -1 if not specified */
 
    int            major_version;
    int            minor_version;
 
    int            is_digital;
    
    union
    {
    struct
    {
        int        bits_per_primary;
        Interface    interface;
        int        rgb444;
        int        ycrcb444;
        int        ycrcb422;
    } digital;
 
    struct
    {
        double    video_signal_level;
        double    sync_signal_level;
        double    total_signal_level;
 
        int        blank_to_black;
 
        int        separate_hv_sync;
        int        composite_sync_on_h;
        int        composite_sync_on_green;
        int        serration_on_vsync;
        ColorType    color_type;
    } analog;
    };
 
    int            width_mm;        /* -1 if not specified */
    int            height_mm;        /* -1 if not specified */
    double        aspect_ratio;        /* -1.0 if not specififed */
 
    double        gamma;            /* -1.0 if not specified */
 
    int            standby;
    int            suspend;
    int            active_off;
 
    int            srgb_is_standard;
    int            preferred_timing_includes_native;
    int            continuous_frequency;
 
    double        red_x;
    double        red_y;
    double        green_x;
    double        green_y;
    double        blue_x;
    double        blue_y;
    double        white_x;
    double        white_y;
 
    Timing        established[24];    /* Terminated by 0x0x0 */
    Timing        standard[8];
    
    int            n_detailed_timings;
    DetailedTiming    detailed_timings[4];    /* If monitor has a preferred
                         * mode, it is the first one
                         * (whether it has, is
                         * determined by the 
                         * preferred_timing_includes
                         * bit.
                         */
 
    /* Optional product description */
    char        dsc_serial_number[14];
    char        dsc_product_name[14];
    char        dsc_string[14];        /* Unspecified ASCII data */
};
 
MonitorInfo *decode_edid (const uchar *data);
void         dump_monitor_info (MonitorInfo *info);
char *       make_display_name (const char        *output_name,
                const MonitorInfo *info);