src/video/x11/edid.h
author Ryan C. Gordon <icculus@icculus.org>
Mon, 06 Apr 2015 00:10:54 -0400
changeset 9458 543298b36b28
parent 6967 adc80d085ddf
child 10701 62f7dd0acd13
permissions -rw-r--r--
This function can be static.
     1 typedef unsigned char uchar;
     2 typedef struct MonitorInfo MonitorInfo;
     3 typedef struct Timing Timing;
     4 typedef struct DetailedTiming DetailedTiming;
     5 
     6 typedef enum
     7 {
     8     UNDEFINED,
     9     DVI,
    10     HDMI_A,
    11     HDMI_B,
    12     MDDI,
    13     DISPLAY_PORT
    14 } Interface;
    15 
    16 typedef enum
    17 {
    18     UNDEFINED_COLOR,
    19     MONOCHROME,
    20     RGB,
    21     OTHER_COLOR
    22 } ColorType;
    23 
    24 typedef 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 
    35 struct Timing
    36 {
    37     int width;
    38     int height;
    39     int frequency;
    40 };
    41 
    42 struct 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 
    80 struct 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 
   164 MonitorInfo *decode_edid (const uchar *data);
   165 void         dump_monitor_info (MonitorInfo *info);
   166 char *       make_display_name (const char        *output_name,
   167 				const MonitorInfo *info);