Home | History | Annotate | Download | only in display
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROMEOS_DISPLAY_OUTPUT_UTIL_H_
      6 #define CHROMEOS_DISPLAY_OUTPUT_UTIL_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "chromeos/chromeos_export.h"
     12 
     13 // Forward declarations for Xlib and Xrandr.
     14 // This is so unused X definitions don't pollute the namespace.
     15 typedef unsigned long XID;
     16 typedef XID RRMode;
     17 struct _XRRModeInfo;
     18 typedef _XRRModeInfo XRRModeInfo;
     19 struct _XRRScreenResources;
     20 typedef _XRRScreenResources XRRScreenResources;
     21 struct _XRROutputInfo;
     22 typedef _XRROutputInfo XRROutputInfo;
     23 
     24 namespace chromeos {
     25 
     26 // Gets the EDID data from |output| and generates the display id through
     27 // |GetDisplayIdFromEDID|.
     28 CHROMEOS_EXPORT bool GetDisplayId(XID output, size_t index,
     29                                   int64* display_id_out);
     30 
     31 // Generates the display id for the pair of |prop| with |nitems| length and
     32 // |index|, and store in |display_id_out|. Returns true if the display id is
     33 // successfully generated, or false otherwise.
     34 CHROMEOS_EXPORT bool GetDisplayIdFromEDID(const unsigned char* prop,
     35                                           unsigned long nitems,
     36                                           size_t index,
     37                                           int64* display_id_out);
     38 
     39 // Generates the human readable string from EDID obtained for |output|.
     40 CHROMEOS_EXPORT std::string GetDisplayName(XID output);
     41 
     42 // Gets the overscan flag from |output| and stores to |flag|. Returns true if
     43 // the flag is found. Otherwise returns false and doesn't touch |flag|. The
     44 // output will produce overscan if |flag| is set to true, but the output may
     45 // still produce overscan even though it returns true and |flag| is set to
     46 // false.
     47 CHROMEOS_EXPORT bool GetOutputOverscanFlag(XID output, bool* flag);
     48 
     49 // Parses |prop| as EDID data and stores extracted data into |manufacturer_id|
     50 // and |human_readable_name| and returns true. NULL can be passed for unwanted
     51 // output parameters. Some devices (especially internal displays) may not have
     52 // the field for |human_readable_name|, and it will return true in that case.
     53 CHROMEOS_EXPORT bool ParseOutputDeviceData(const unsigned char* prop,
     54                                            unsigned long nitems,
     55                                            uint16* manufacturer_id,
     56                                            std::string* human_readable_name);
     57 
     58 // Parses |prop| as EDID data and stores the overscan flag to |flag|. Returns
     59 // true if the flag is found. This is exported for x11_util_unittest.cc.
     60 CHROMEOS_EXPORT bool ParseOutputOverscanFlag(const unsigned char* prop,
     61                                              unsigned long nitems,
     62                                              bool* flag);
     63 
     64 // Returns true if an output named |name| is an internal display.
     65 CHROMEOS_EXPORT bool IsInternalOutputName(const std::string& name);
     66 
     67 // Find a XRRModeInfo that matches |mode|.
     68 CHROMEOS_EXPORT const XRRModeInfo* FindModeInfo(
     69     const XRRScreenResources* screen_resources,
     70     XID mode);
     71 
     72 // Find a mode that matches the given size with highest refresh
     73 // rate. Non-interlaced mode takes precedence, so non-interlaced mode
     74 // with a lower refresh rate will be used even if there is an interlaced
     75 // mode with a higher refresh rate.
     76 CHROMEOS_EXPORT RRMode FindOutputModeMatchingSize(
     77     const XRRScreenResources* screen_resources,
     78     const XRROutputInfo* output_info,
     79     size_t width,
     80     size_t height);
     81 
     82 namespace test {
     83 
     84 // Creates XRRModeInfo for unit tests.
     85 CHROMEOS_EXPORT XRRModeInfo CreateModeInfo(int id,
     86                                            int width,
     87                                            int height,
     88                                            bool interlaced,
     89                                            float refresh_rate);
     90 
     91 }  // namespace test
     92 
     93 }  // namespace chromeos
     94 
     95 #endif  // CHROMEOS_DISPLAY_OUTPUT_UTIL_H_
     96