| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_BASE_ANDROID_OVERLAY_CONFIG_H_ |
| #define MEDIA_BASE_ANDROID_OVERLAY_CONFIG_H_ |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "media/base/media_export.h" |
| #include "ui/gfx/geometry/rect.h" |
| |
| namespace media { |
| |
| class AndroidOverlay; |
| |
| // Configuration used to create an overlay. |
| struct MEDIA_EXPORT AndroidOverlayConfig { |
| public: |
| // Called when the overlay is ready for use, via |GetJavaSurface()|. |
| using ReadyCB = base::OnceCallback<void(AndroidOverlay*)>; |
| |
| // Called when overlay has failed before |ReadyCB| is called. Will not be |
| // called after ReadyCB. It will be the last callback for the overlay, except |
| // for any DeletedCB. |
| using FailedCB = base::OnceCallback<void(AndroidOverlay*)>; |
| |
| // Called when the surface has been destroyed. This will not be called unless |
| // ReadyCB has been called. It will be the last callback for the overlay, |
| // except for any DeletedCB. In response, the client is expected to quit |
| // using the surface and delete the overlay object. |
| using DestroyedCB = base::OnceCallback<void(AndroidOverlay*)>; |
| |
| // Called when the overlay object has been deleted. This is unrelated to |
| // any DestroyedCB, which informs us when the surface is no longer usable and |
| // that we should delete the AndroidOverlay object. DeletedCB is called when |
| // the AndroidOverlay object is deleted for any reason. It is guaranteed that |
| // the overlay pointer will still be a valid pointer, but it is not safe to |
| // access it. It's provided just to make it easier to tell which overlay is |
| // being deleted. |
| using DeletedCB = base::OnceCallback<void(AndroidOverlay*)>; |
| |
| // Optional callback to find out about the power-efficient state of the |
| // overlay. Called with true if the overlay is power-efficient, and false |
| // if it isn't. To receive these callbacks, one must set |power_efficient|. |
| using PowerEfficientCB = base::RepeatingCallback<void(AndroidOverlay*, bool)>; |
| |
| // Configuration used to create an overlay. |
| AndroidOverlayConfig(); |
| AndroidOverlayConfig(AndroidOverlayConfig&&); |
| ~AndroidOverlayConfig(); |
| |
| // Initial rectangle for the overlay. May be changed via ScheduleLayout(). |
| gfx::Rect rect; |
| |
| // Require a secure overlay? |
| bool secure = false; |
| |
| // Require that the overlay is power efficient? In other words, don't get |
| // an overlay if it (for example) pushes the device into GLES composition. If |
| // an overlay is provided, but it later becomes not power efficient, then it |
| // will not be destroyed. Use PowerEfficientCB to determine that this has |
| // happened, since that lets the client handle it more gracefully rather than |
| // looking like the surface was lost. |
| bool power_efficient = false; |
| |
| // Convenient helpers since the syntax is weird. |
| void is_ready(AndroidOverlay* overlay) { |
| if (ready_cb) |
| std::move(ready_cb).Run(overlay); |
| } |
| void is_failed(AndroidOverlay* overlay) { |
| if (failed_cb) |
| std::move(failed_cb).Run(overlay); |
| } |
| |
| ReadyCB ready_cb; |
| FailedCB failed_cb; |
| |
| // Optional, may be empty. |
| PowerEfficientCB power_cb; |
| |
| DISALLOW_COPY(AndroidOverlayConfig); |
| }; |
| |
| // Common factory type. |
| using AndroidOverlayFactoryCB = |
| base::RepeatingCallback<std::unique_ptr<AndroidOverlay>( |
| AndroidOverlayConfig)>; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_ANDROID_OVERLAY_CONFIG_H_ |