cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

edid.h (3209B)


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