created README
[profile/ivi/layer-management.git] / README
1 Sections in this file describe:
2 - Introduction
3 - Component Overview
4 - Required platform capabilities
5 - How to build on different platforms
6
7
8 Introduction
9 ====================================
10 In the automotive domain, the most HMI systems are using their own window manager implementation. 
11 Many applications (e.g. navigation, reversing camera) are implemented standalone and 
12 therefore one service is used to composite all applications to the final image on the screen. This Service
13 is also know as LayerManagement. 
14 This Component provides a common API and a proof-of-concept implementation for the Layer Management Service. 
15 This service should improve the existing vendor-specific layer management implementations 
16 which have the following features :
17
18     * Fixed number of hardware layers
19     * Hardware accelerated compositing
20     * Platform dependent
21     * Number of layers not extensible during runtime
22     * Vendor-specific implementation
23     * No standardized interface
24     * Hardware dependent
25     * No change during runtime possible 
26
27 The IVI Layer Management have the following enhancements :
28
29     * Well-defined interface
30     * Standardized compositing
31     * Convenient and consistent access to hardware accelerated modules
32     * Separation of HMI and Layer Management
33     * Dynamically Extensions during runtime
34     * Low integration complexity
35     * Reduced dependency on hardware 
36
37 Component Overview
38 ====================================
39 The IVI Layer Management consist of three subcomponents.
40
41 The LayerManagementService
42 ===
43 This is the main component which controls and handles
44 the different layers with its content. Furthermore he
45 will execute the commands which are deployed by the corresponding
46 communicator. The content of the different layers are deployed to the
47 renderer.  
48
49 The LayerManagementCommunicator
50 ===
51 This subcomponent will handle the LayerManagement API messages. Generally
52 a communicator will establish the communication between application and the
53 LayerManagementService. The concept behind the communicator is to abstract
54 the required ipc mechanism on the target platform. 
55
56 The LayerManagementRenderer
57 ===
58 This subcomponent will handle the rendering of the different layers and its content on the
59 final used target platform. The concept behind the renderer is to abstract
60 the required rendering mechanism on the target platform. 
61
62 Required Platform capabilities
63 ====================================
64
65 Platform with X11 and OpenGL ES 2.0
66 ===
67
68 If you have choosen the X11GLESRenderer as rendering backend, then the following
69 Extensions have to be supported by the TargetPlatform :
70
71 X11 Extensions:
72
73 x-composite : This extension should support redirecting of egl Surfaces to x11 pixmaps too.
74
75 EGL / OpenGL ES 2.0:
76
77 EGL_IMAGE_KHR : 
78 The following functions should be supported by the vendor specific graphic driver
79 glEGLImageTargetTexture2DOES
80 eglCreateImageKHR
81 eglDestroyImageKHR
82 Furthermore it should be supported to create an egl image from an x11 pixmap.  
83
84 Beagle board platform
85 ===
86
87 If you have choosen the BeagleRenderer as rendering backend, than the following
88 kernel module must be available too :
89
90 CMEM Module is needed, it can be downloaded from
91
92 http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/index.html
93
94 The EGL implementation on the beagle board should support the following egl config: 
95
96 EGL_SURFACE_TYPE = EGL_WINDOW_BIT | EGL_PIXMAP_BIT
97 EGL_RENDERABLE_TYPE = EGL_OPENGL_ES2_BIT,
98 EGL_RED_SIZE = 8
99 EGL_ALPHA_SIZE = 8 
100 EGL_BIND_TO_TEXTURE_RGBA = EGL_TRUE
101
102 Furthermore the application which should be rendered by the layermanagement, should initialize egl
103 by the following steps:
104         
105 1. Get EGL Display
106 2. Initialize EGL
107 3. Bind API
108 4. Choose EGL Config
109 5. Allocate native pixmap Structure 
110 6. Allocate native pixmap space by CMEM_alloc
111 7. Get physical address of native pixmap using the CMEM module, and assign the address to the native pixmap structure.
112 8. Create egl pixmap surface using the allocated native pixmap.
113 9. Create egl context.
114 10. Make egl context with the surface as current.
115
116 How to build on different platforms
117 ====================================
118
119 If you want to build the layermanagement on your own platform than you have to use the following 
120 command line call:
121
122 make all [CONFIG=PLATFORM COMMUNICATOR=MyCommunicator RENDERER=MyRenderer]  
123
124 Example for Beagle Board:
125 make all CONFIG=Beagle 
126
127 If you want  you have to provide an additional platform definition file which
128 should located at LayerManagerPlatform. The file should provide the following content :
129
130 MyPlatform.defs:
131
132 RENDERER=MyRenderer
133 COMMUNICATOR=MyComunicator
134
135 CXXFLAGS = -Wall -fPIC -O2
136
137 ADD_INCLUDE_DIR+=<includes of target>
138
139 ADD_LIB_DIR+=<libraries of target>
140
141 LINKFLAGS = -Xlinker -export-dynamic
142
143 CXX = <path to cross compile toolchain> 
144  
145
146
147