commonsys-intf: display: Add frame extn interface

CRs-Fixed: 2482022
Change-Id: Iab4470b2f6fc5161a84557de3d50dfca6f591940
diff --git a/include/frame_extn_intf.h b/include/frame_extn_intf.h
new file mode 100644
index 0000000..b6bfe41
--- /dev/null
+++ b/include/frame_extn_intf.h
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2019, The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without modification, are permitted
+* provided that the following conditions are met:
+*    * Redistributions of source code must retain the above copyright notice, this list of
+*      conditions and the following disclaimer.
+*    * Redistributions in binary form must reproduce the above copyright notice, this list of
+*      conditions and the following disclaimer in the documentation and/or other materials provided
+*      with the distribution.
+*    * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+*      endorse or promote products derived from this software without specific prior written
+*      permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef __FRAME_EXTN_INTF_H__
+#define __FRAME_EXTN_INTF_H__
+
+#include <utils/Timers.h>
+#include <sys/types.h>
+#include <string>
+
+#define EXTENSION_LIBRARY_NAME "libframeextension.so"
+#define CREATE_FRAME_EXTN_INTERFACE "CreateFrameExtnInterface"
+#define DESTROY_FRAME_EXTN_INTERFACE "DestroyFrameExtnInterface"
+
+namespace composer {
+
+class FrameExtnIntf;
+
+// Function addresses queried at runtime using ::dlsym()
+typedef bool (*CreateFrameExtnInterface)(FrameExtnIntf **interface);
+typedef bool (*DestroyFrameExtnInterface)(FrameExtnIntf *interface);
+
+/*! @brief This structure defines extension version.
+
+    @details It is used to avoid any mismatch of versions between frameextension library
+    implementation and its clients usage (like SurfaceFlinger).
+
+  @sa FrameInfo
+*/
+struct Version {
+  uint8_t minor;
+  uint8_t major;
+};
+
+/*! @brief This structure defines the Frame info required by FrameExtnIntf.
+
+  @sa FrameExtnIntf::SetFrameInfo
+*/
+struct FrameInfo {
+  Version version;
+  bool transparent_region;
+  int width;
+  int height;
+  int max_queued_frames;
+  int num_idle;
+  std::string max_queued_layer_name;
+  std::string layer_name;
+  nsecs_t current_timestamp;
+  nsecs_t previous_timestamp;
+  nsecs_t vsync_timestamp;
+  nsecs_t refresh_timestamp;
+  nsecs_t ref_latency;
+  nsecs_t vsync_period;
+};
+
+
+/*! @brief This interface shall be implemented by frameextension library.
+
+  @details This class declares prototype for frameextension public interfaces which must be
+  implemented by frameextension library.
+*/
+class FrameExtnIntf {
+ public:
+  /*! @brief Set the FrameInfo used by frameextension.
+
+    @details This function is called once per refresh cycle so that required frame info are
+    feed to frameextension.
+
+    @param[in] frameInfo \link FrameInfo \endlink
+
+    @return \link int \endlink
+  */
+  virtual int SetFrameInfo(FrameInfo &frameInfo) = 0;
+
+ protected:
+  virtual ~FrameExtnIntf() { };
+};
+
+}  // namespace composer
+
+#endif  // __FRAME_EXTN_INTF_H__