summaryrefslogtreecommitdiffstats
path: root/waltham-transmitter/README.md
blob: b358cfd86dfeb2969ca63657158771c3c0ae90e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Waltham Transmitter #

Waltham transmitter is a plugin for weston which uses
waltham IPC library to connect to remote and transmit
client buffer using gstreamer framework

Waltham Transmitter is divide in to two component:

1. Transmitter plugin: Provides API to create remote connections and push surfaces over the network and handles remote output and remote input.
2. waltham renderer  : The waltham renderer creates a buffer to be transmitted to other domain. The current implementation it uses gstreamer.

###Architecture

````
				ECU 1                                                                     ECU 2
              +-----------------------------------------------------+                    +----------------------------------------------+
              |        +-----------------+                          |                    |                                              |
              |        | IVI-Application |                          |                    |               +-----------+-----------+      |
              |        +-----------------+                          |                    |               | Gstreamer |           |      |
              |                 ^                                   |    Buffer   -----------------------> (Decode)  |           |      |
              |        wayland  |                         +----------------------/       |               +-----------+           |      |
              |                 v                         |         |    (Ethernet)      |               |     Waltham-receiver  |      |
              |   +----+---------------------+            |         |        ---------------------------->                       |      |
              |   |    |  Transmitter Plugin |<-----------------------------/            |               +-----------------------+      |
              |   |    |                     |            |         |  Waltham-Protocol  |                             ^                |
              |   |    | +-------------------+            |         |                    |                     wayland |                |
              |   |    | | waltham-renderer  |------------+         |                    |                             v                |
              |   |    | |(gstreamer Encode) |                      |                    |                 +---------------------+      |
              |   |    +-+-------------------+                      |                    |                 |                     |      |
              |   |                          |                      |                    |                 |       WESTON        |      |
              |   |         WESTON           |                      |                    |                 |                     |      |
              |   +------+-------------------+                      |                    |                 +----------------+----+      |
              |          |                                          |                    |                                  |           |
              |          v                                          |                    |                                  v           |
              |   +------------+                                    |                    |                            +----------+      |
              |   |  Display   |                                    |                    |                            |  Display |      |
              |   |            |                                    |                    |                            |          |      |
              |   +------------+                                    |                    |                            +----------+      |
              +-----------------------------------------------------+                    +----------------------------------------------+

````

###How to build

1. Prerequisite before building

    weston, wayland , gstreamer plugins and waltham should be built and available.

2. Get the source code from the repository.

    git clone https://gerrit.automotivelinux.org/gerrit/src/weston-ivi-plugins

3. Create build folder in weston-ivi-plugins

        $cd weston-ivi-plugins/
        $mkdir build/
        $cd build/

4. Run Cmake

        $cmake ../
        $cmake --build .

5. transmitter.so and waltham-renderer.so should be available in the build directory.

###How to configure weston.ini and gstreamer pipeline

1. weston.ini:

    To load transmitter plugin to weston, add 'transmitter.so' to the 'modules'
    key under '[core]', and make sure the 'shell' is 'ivi-shell.so'.

    The destination of remoting is configured in weston.ini.
    Add output name, server address, port number, output's width and height key
    under '[remote-output]'. You can speficy multiple [remote-output].

    In details, see 'weston.ini.transmitter'.

2. gstreamer pipeline:

    You can use gstreamer pipeline as you want by configuraing from "pipeline.cfg".This file should 
    be in the folder "/etc/xdg/weston/".

    As an example, please refer to the example file named "pipeline_example*.cfg".

    - pipeline_example_general.cfg : Does not use any HW encoder.
    - pipeline_example_intel.cfg   : Use Intel's HW encoder.
    - pipeline_example_rcar.cfg    : Use Rcar's HW encoder.

    Rename file as "pipeline.cfg" and put in correct place when you use them.

###Connection Establishment

1. Connect two board over ethernet.

2. Assign IP to both the boards and check if the simple ping works.

    For example:if transmitter IP: 192.168.2.51 and Waltham-Receiver IP: 192.168.2.52 then

    $ping 192.168.2.52 (you can also ping vice versa)

3. Make sure that IP address specified in the weston.ini under [remote-output] matches the Waltham-Receiver IP.

4. Make sure that IP address in pipeline.cfg on the transmitter side match the Waltham-Receiver IP.

###How to test

start weston with modified weston.ini mention above.
You can confirm the transmitter is loaded properly from
weston log as below.

````

    [07:14:22.958] Loading module '/usr/lib/weston/transmitter.so'
    [07:14:22.977] Registered plugin API 'transmitter_v1' of size 88
    [07:14:22.978] Registered plugin API 'transmitter_ivi_v1' of size 16
    [07:14:22.982] Loading module '/usr/lib/libweston-2/waltham-renderer.so'
    [07:14:23.032] Transmitter initialized.
    [07:14:23.032] Module '/usr/lib/libweston-2/waltham-renderer.so' already loaded
    [07:14:23.032] Transmitter weston_seat 0xaaaad0079e50
    [07:14:23.032] Transmitter created pointer=0xaaaad00977c0 for seat 0xaaaad0079e50
    [07:14:23.032] Transmitter created keyboard=0xaaaad0079fe0 for seat 0xaaaad0079e50
    [07:14:23.032] Transmitter created touch=0xaaaacffe1010 for seat 0xaaaad0079e50
````
Start remoting :

- Start an IVI application.
- Put surface on transmitter output using LayerManagerControl command

Example command:

    $EGLWLMockNavigation &
    $LaygeManagementControl get scene
      -> Please check connector name of transmitter output
    $layer-add-surfaces -d [transmitter output name] -s 1 -l 1

Weston log will indicate remoting has started:

````
    [07:16:39.043] surface ID 10
    [07:16:39.055] gst-setting are :-->
    [07:16:39.055] ip = 192.168.2.52
    [07:16:39.055] port = 34400
    [07:16:39.055] bitrate = 3000000
    [07:16:39.055] width = 800
    [07:16:39.055] height = 480
    [07:16:40.819] Parsing GST pipeline:appsrc name=src ! videoconvert ! video/x-raw,format=I420 ! omxh264enc bitrate=3000000 control-rate=2 ! rtph264pay ! udpsink name=sink host=192.168.2.52 port=34400 sync=false async=false
````