Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ | 5 #ifndef CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ |
| 6 #define CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ | 6 #define CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
| 13 #include "base/event_types.h" | 13 #include "base/event_types.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
| 16 #include "base/observer_list.h" | 16 #include "base/observer_list.h" |
| 17 #include "base/timer/timer.h" | 17 #include "base/timer/timer.h" |
| 18 #include "chromeos/chromeos_export.h" | 18 #include "chromeos/chromeos_export.h" |
| 19 #include "third_party/cros_system_api/dbus/service_constants.h" | 19 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 20 | 20 |
| 21 // Forward declarations for Xlib and Xrandr. | 21 // Forward declarations for Xlib and Xrandr. |
| 22 // This is so unused X definitions don't pollute the namespace. | 22 // This is so unused X definitions don't pollute the namespace. |
| 23 typedef unsigned long XID; | 23 typedef unsigned long XID; |
| 24 typedef XID RROutput; | 24 typedef XID RROutput; |
| 25 typedef XID RRCrtc; | 25 typedef XID RRCrtc; |
| 26 typedef XID RRMode; | 26 typedef XID RRMode; |
| 27 | 27 |
| 28 namespace chrome { | |
| 29 class PepperOutputProtectionHost; | |
|
Daniel Erat
2013/09/18 22:39:16
this doesn't appear to be used here
kcwu
2013/09/20 03:03:47
Done.
| |
| 30 } // namespace chrome | |
| 31 | |
| 28 namespace chromeos { | 32 namespace chromeos { |
| 29 | 33 |
| 30 // Used to describe the state of a multi-display configuration. | 34 // Used to describe the state of a multi-display configuration. |
| 31 enum OutputState { | 35 enum OutputState { |
| 32 STATE_INVALID, | 36 STATE_INVALID, |
| 33 STATE_HEADLESS, | 37 STATE_HEADLESS, |
| 34 STATE_SINGLE, | 38 STATE_SINGLE, |
| 35 STATE_DUAL_MIRROR, | 39 STATE_DUAL_MIRROR, |
| 36 STATE_DUAL_EXTENDED, | 40 STATE_DUAL_EXTENDED, |
| 37 }; | 41 }; |
| 38 | 42 |
| 43 // Video output link types. | |
|
marcheu
2013/09/18 23:21:35
The terminology "link" isn't used in this code, ca
kcwu
2013/09/20 03:03:47
Done.
| |
| 44 enum OutputLinkType { | |
| 45 OUTPUT_LINK_TYPE_NONE = 0, | |
| 46 OUTPUT_LINK_TYPE_UNKNOWN = 1 << 0, | |
| 47 OUTPUT_LINK_TYPE_INTERNAL = 1 << 1, | |
| 48 OUTPUT_LINK_TYPE_VGA = 1 << 2, | |
| 49 OUTPUT_LINK_TYPE_HDMI = 1 << 3, | |
| 50 OUTPUT_LINK_TYPE_DVI = 1 << 4, | |
| 51 OUTPUT_LINK_TYPE_DISPLAYPORT = 1 << 5, | |
| 52 }; | |
| 53 | |
|
marcheu
2013/09/18 23:21:35
Same here, we just use the term "output", not "out
kcwu
2013/09/20 03:03:47
Done.
| |
| 54 // Content protection methods applied on video output link. | |
| 55 enum OutputProtectionMethod { | |
| 56 OUTPUT_PROTECTION_METHOD_NONE = 0, | |
| 57 OUTPUT_PROTECTION_METHOD_HDCP = 1 << 0, | |
| 58 }; | |
| 59 | |
| 39 // This class interacts directly with the underlying Xrandr API to manipulate | 60 // This class interacts directly with the underlying Xrandr API to manipulate |
| 40 // CTRCs and Outputs. | 61 // CTRCs and Outputs. |
| 41 class CHROMEOS_EXPORT OutputConfigurator | 62 class CHROMEOS_EXPORT OutputConfigurator |
| 42 : public base::MessageLoop::Dispatcher, | 63 : public base::MessageLoop::Dispatcher, |
| 43 public base::MessagePumpObserver { | 64 public base::MessagePumpObserver { |
| 44 public: | 65 public: |
| 45 struct ModeInfo { | 66 struct ModeInfo { |
| 46 ModeInfo(); | 67 ModeInfo(); |
| 47 ModeInfo(int width, int height, bool interlaced); | 68 ModeInfo(int width, int height, bool interlaced); |
| 48 | 69 |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 211 // |touch_device_id| the ID of the touchscreen device to configure. | 232 // |touch_device_id| the ID of the touchscreen device to configure. |
| 212 // |ctm| contains the desired transformation parameters. The offsets | 233 // |ctm| contains the desired transformation parameters. The offsets |
| 213 // in it should be normalized so that 1 corresponds to the X or Y axis | 234 // in it should be normalized so that 1 corresponds to the X or Y axis |
| 214 // size for the corresponding offset. | 235 // size for the corresponding offset. |
| 215 virtual void ConfigureCTM(int touch_device_id, | 236 virtual void ConfigureCTM(int touch_device_id, |
| 216 const CoordinateTransformation& ctm) = 0; | 237 const CoordinateTransformation& ctm) = 0; |
| 217 | 238 |
| 218 // Sends a D-Bus message to the power manager telling it that the | 239 // Sends a D-Bus message to the power manager telling it that the |
| 219 // machine is or is not projecting. | 240 // machine is or is not projecting. |
| 220 virtual void SendProjectingStateToPowerManager(bool projecting) = 0; | 241 virtual void SendProjectingStateToPowerManager(bool projecting) = 0; |
| 242 | |
| 243 // Register a client for output protection and request a client id. Returns | |
|
Daniel Erat
2013/09/18 22:39:16
nit: make these verbs match the tense in other com
kcwu
2013/09/20 03:03:47
Done.
| |
| 244 // 0 if requesting failed. | |
| 245 virtual uint64_t RegisterOutputProtectionClient() = 0; | |
|
Daniel Erat
2013/09/18 22:39:16
mind typedef-ing uint64_t to something like Output
kcwu
2013/09/20 03:03:47
Done.
| |
| 246 // Unregister the client. | |
|
Daniel Erat
2013/09/18 22:39:16
nit: please add blank lines between methods
kcwu
2013/09/20 03:03:47
Done.
| |
| 247 virtual void UnregisterOutputProtectionClient(uint64_t client_id) = 0; | |
|
Daniel Erat
2013/09/18 22:39:16
document that the server _does_ need to be grabbed
kcwu
2013/09/20 03:03:47
This is done in output_configurator.cc
| |
| 248 // Query link status and protection status. Returns true on success. | |
| 249 virtual bool QueryOutputProtectionStatus( | |
| 250 uint64_t client_id, | |
| 251 uint32_t* link_mask, | |
| 252 uint32_t* protection_mask) = 0; | |
| 253 | |
| 254 // Request the desired protection methods. Returns true when the protection | |
| 255 // request has been made. | |
| 256 virtual bool EnableOutputProtection( | |
| 257 uint64_t client_id, | |
| 258 uint32_t desired_method_mask) = 0; | |
|
Daniel Erat
2013/09/18 22:39:16
what does |desired_method_mask| contain? if it's o
kcwu
2013/09/20 03:03:47
This follows the naming in ppapi/api/private/ppb_o
| |
| 221 }; | 259 }; |
| 222 | 260 |
| 223 // Helper class used by tests. | 261 // Helper class used by tests. |
| 224 class TestApi { | 262 class TestApi { |
| 225 public: | 263 public: |
| 226 TestApi(OutputConfigurator* configurator, int xrandr_event_base) | 264 TestApi(OutputConfigurator* configurator, int xrandr_event_base) |
| 227 : configurator_(configurator), | 265 : configurator_(configurator), |
| 228 xrandr_event_base_(xrandr_event_base) {} | 266 xrandr_event_base_(xrandr_event_base) {} |
| 229 ~TestApi() {} | 267 ~TestApi() {} |
| 230 | 268 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 341 void ResumeDisplays(); | 379 void ResumeDisplays(); |
| 342 | 380 |
| 343 const std::map<int, float>& GetMirroredDisplayAreaRatioMap() { | 381 const std::map<int, float>& GetMirroredDisplayAreaRatioMap() { |
| 344 return mirrored_display_area_ratio_map_; | 382 return mirrored_display_area_ratio_map_; |
| 345 } | 383 } |
| 346 | 384 |
| 347 // Configure outputs with |kConfigureDelayMs| delay, | 385 // Configure outputs with |kConfigureDelayMs| delay, |
| 348 // so that time-consuming ConfigureOutputs() won't be called multiple times. | 386 // so that time-consuming ConfigureOutputs() won't be called multiple times. |
| 349 void ScheduleConfigureOutputs(); | 387 void ScheduleConfigureOutputs(); |
| 350 | 388 |
| 389 // Register a client for output protection and request a client id. Returns | |
| 390 // 0 if requesting failed. | |
| 391 uint64_t RegisterOutputProtectionClient(); | |
|
Daniel Erat
2013/09/18 22:39:16
nit: please add comments between these methods too
kcwu
2013/09/20 03:03:47
Do you mean blank line?
| |
| 392 // Unregister the client. | |
| 393 void UnregisterOutputProtectionClient(uint64_t client_id); | |
| 394 // Query link status and protection status. | |
| 395 // |link_mask| is the type of connected output links, which is a bitmask | |
| 396 // of PP_OutputProtectionLinkType_Private values. |protection_mask| is the | |
| 397 // desired protection methods, which is a bitmask of the | |
| 398 // PP_OutputProtectionMethod_Private values. | |
|
Daniel Erat
2013/09/18 22:39:16
are the masks actually PP_*_Private values, or are
kcwu
2013/09/20 03:03:47
Done.
Ah, forgot to change this. PP_*_Private valu
| |
| 399 // Returns true on success. | |
| 400 bool QueryOutputProtectionStatus( | |
| 401 uint64_t client_id, | |
| 402 uint32_t* link_mask, | |
| 403 uint32_t* protection_mask); | |
| 404 | |
| 405 // Request the desired protection methods. | |
| 406 // |protection_mask| is the desired protection methods, which is a bitmask | |
| 407 // of the PP_OutputProtectionMethod_Private values. | |
| 408 // Returns true when the protection request has been made. | |
| 409 bool EnableOutputProtection( | |
| 410 uint64_t client_id, | |
| 411 uint32_t desired_method_mask); | |
| 412 | |
| 351 private: | 413 private: |
| 352 // Configure outputs. | 414 // Configure outputs. |
| 353 void ConfigureOutputs(); | 415 void ConfigureOutputs(); |
| 354 | 416 |
| 355 // Notifies observers about an attempted state change. | 417 // Notifies observers about an attempted state change. |
| 356 void NotifyObservers(bool success, OutputState attempted_state); | 418 void NotifyObservers(bool success, OutputState attempted_state); |
| 357 | 419 |
| 358 // Switches to the state specified in |output_state| and |power_state|. | 420 // Switches to the state specified in |output_state| and |power_state|. |
| 359 // If the hardware mirroring failed and |mirroring_controller_| is set, | 421 // If the hardware mirroring failed and |mirroring_controller_| is set, |
| 360 // it switches to |STATE_DUAL_EXTENDED| and calls |SetSoftwareMirroring()| | 422 // it switches to |STATE_DUAL_EXTENDED| and calls |SetSoftwareMirroring()| |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 429 scoped_ptr<base::OneShotTimer<OutputConfigurator> > configure_timer_; | 491 scoped_ptr<base::OneShotTimer<OutputConfigurator> > configure_timer_; |
| 430 | 492 |
| 431 DISALLOW_COPY_AND_ASSIGN(OutputConfigurator); | 493 DISALLOW_COPY_AND_ASSIGN(OutputConfigurator); |
| 432 }; | 494 }; |
| 433 | 495 |
| 434 typedef std::vector<OutputConfigurator::OutputSnapshot> OutputSnapshotList; | 496 typedef std::vector<OutputConfigurator::OutputSnapshot> OutputSnapshotList; |
| 435 | 497 |
| 436 } // namespace chromeos | 498 } // namespace chromeos |
| 437 | 499 |
| 438 #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ | 500 #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ |
| OLD | NEW |