Skip to content

Commit 856666c

Browse files
authored
Merge pull request #126
A few small changes
2 parents f45cff0 + 3cd0f6e commit 856666c

File tree

8 files changed

+58
-30
lines changed

8 files changed

+58
-30
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ on:
44
push:
55

66
env:
7-
TOOLCHAIN_URL: https://github.com/openlgtv/buildroot-nc4/releases/download/webos-d7ed7ee/arm-webos-linux-gnueabi_sdk-buildroot.tar.gz
8-
TOOLCHAIN_SHA256: 32816626e99fb34922a49d0c639f7c8a30356fffb222372d4823027f1382f640
7+
TOOLCHAIN_URL: https://github.com/openlgtv/buildroot-nc4/releases/download/webos-b17b4cc/arm-webos-linux-gnueabi_sdk-buildroot.tar.gz
8+
TOOLCHAIN_SHA256: 1f69af43caac4b6898d8f0323c975be60af04abdd1e1c144773072b28c961c20
99
TOOLCHAIN_DIR: /opt/arm-webos-linux-gnueabi_sdk-buildroot
1010
TOOLCHAIN_FILE: /opt/arm-webos-linux-gnueabi_sdk-buildroot/share/buildroot/toolchainfile.cmake
1111

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,28 @@ The calculator is your friend ;)
6666

6767
You can find them defined here: [Source code file](https://github.com/webosbrew/hyperion-webos/blob/master/src/quirks.h)
6868

69+
## Building
70+
71+
You will need [buildroot-nc4](https://github.com/openlgtv/buildroot-nc4)
72+
(or, theoretically, some other webOS toolchain).
73+
74+
Set `TOOLCHAIN_FILE` to the path of buildroot-nc4's `toolchainfile.cmake`.
75+
For example:
76+
77+
```sh
78+
export TOOLCHAIN_FILE='/opt/arm-webos-linux-gnueabi_sdk-buildroot/share/buildroot/toolchainfile.cmake'
79+
```
80+
81+
Then run the following commands:
82+
83+
```sh
84+
git clone --recursive https://github.com/webosbrew/hyperion-webos.git
85+
mkdir hyperion-webos/build
86+
cd hyperion-webos/build
87+
cmake .. -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}"
88+
make hyperion-webos gm_backend halgal_backend dile_vt_backend vtcapture_backend
89+
```
90+
6991
## Running
7092

7193
`hyperion-webos` together with `*_backend.so` libraries need to be copied onto

src/log.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ uint64_t start = 0;
88
PmLogContext context;
99
LogLevel current_log_level = Info;
1010

11-
void log_init()
11+
void log_init(void)
1212
{
1313
PmLogGetContext("hyperion-webos", &context);
1414
}

src/log.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ typedef enum {
1414
Debug = 7,
1515
} LogLevel;
1616

17-
void log_init();
17+
void log_init(void);
1818
void log_set_level(LogLevel level);
19-
void log_printf(LogLevel level, const char* module, const char* fmt, ...);
19+
void log_printf(LogLevel level, const char* module, const char* fmt, ...) __attribute__((format(printf, 3, 4)));
2020

2121
#define LOG(level, ...) log_printf(level, __func__, __VA_ARGS__)
2222
#define ERR(...) LOG(Error, __VA_ARGS__)

src/main.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
1+
#include <errno.h>
12
#include <getopt.h>
23
#include <glib.h>
4+
#include <signal.h>
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
#include <string.h>
38

49
#include "log.h"
510
#include "service.h"
611
#include "settings.h"
712
#include "version.h"
813

9-
GMainLoop* loop;
14+
GMainLoop* loop = NULL;
1015

1116
settings_t settings;
1217
service_t service;
1318
bool using_cli = false;
1419
int print_version = 0;
1520

16-
void int_handler(int signum __attribute__((unused)))
21+
static void int_handler(int signum __attribute__((unused)))
1722
{
1823
INFO("SIGINT detected, stopping...");
1924
g_main_loop_quit(loop);
2025
}
2126

22-
static struct option long_options[] = {
27+
static const struct option long_options[] = {
2328
{ "width", required_argument, 0, 'x' },
2429
{ "height", required_argument, 0, 'y' },
2530
{ "address", required_argument, 0, 'a' },
@@ -188,7 +193,10 @@ int main(int argc, char* argv[])
188193
return 0;
189194
}
190195

191-
signal(SIGINT, int_handler);
196+
if (signal(SIGINT, int_handler) == SIG_ERR) {
197+
WARN("Setting SIGINT handler failed: %s", strerror(errno));
198+
}
199+
192200
loop = g_main_loop_new(NULL, false);
193201

194202
if ((ret = service_init(&service, &settings)) != 0) {

src/service.c

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
//
1919
// SECURITY_COMPATIBILITY flag present in CMakeList disables deprecation notices, see:
2020
// https://github.com/webosose/luna-service2/blob/b74b1859372597fcd6f0f7d9dc3f300acbf6ed6c/include/public/luna-service2/lunaservice.h#L49-L53
21-
bool LSRegisterPubPriv(const char* name, LSHandle** sh,
21+
extern bool LSRegisterPubPriv(const char* name, LSHandle** sh,
2222
bool public_bus,
2323
LSError* lserror) __attribute__((weak));
2424

@@ -105,8 +105,8 @@ void service_init_backends(service_t* service)
105105
config.fps = settings->fps;
106106
config.quirks = settings->quirks;
107107

108-
char* ui_backends[] = { "libgm_backend.so", "libhalgal_backend.so", NULL };
109-
char* video_backends[] = { "libvtcapture_backend.so", "libdile_vt_backend.so", NULL };
108+
const char* const ui_backends[] = { "libgm_backend.so", "libhalgal_backend.so", NULL };
109+
const char* const video_backends[] = { "libvtcapture_backend.so", "libdile_vt_backend.so", NULL };
110110
char backend_name[FILENAME_MAX] = { 0 };
111111

112112
if (!service->ui_backend_initialized) {
@@ -115,7 +115,7 @@ void service_init_backends(service_t* service)
115115
if (settings->no_gui) {
116116
INFO("UI capture disabled");
117117
} else {
118-
if (settings->ui_backend == NULL || strcmp(settings->ui_backend, "") == 0 || strcmp(settings->ui_backend, "auto") == 0) {
118+
if (settings->ui_backend == NULL || settings->ui_backend[0] == '\0' || strcmp(settings->ui_backend, "auto") == 0) {
119119
INFO("Autodetecting UI backend...");
120120
if (unicapture_try_backends(&config, &service->ui_backend, ui_backends) == 0) {
121121
service->unicapture.ui_capture = &service->ui_backend;
@@ -137,7 +137,7 @@ void service_init_backends(service_t* service)
137137
if (settings->no_video) {
138138
INFO("Video capture disabled");
139139
} else {
140-
if (settings->video_backend == NULL || strcmp(settings->video_backend, "") == 0 || strcmp(settings->video_backend, "auto") == 0) {
140+
if (settings->video_backend == NULL || settings->video_backend[0] == '\0' || strcmp(settings->video_backend, "auto") == 0) {
141141
INFO("Autodetecting video backend...");
142142
if (unicapture_try_backends(&config, &service->video_backend, video_backends) == 0) {
143143
service->unicapture.video_capture = &service->video_backend;
@@ -331,11 +331,12 @@ bool service_method_set_settings(LSHandle* sh, LSMessage* msg, void* data)
331331
}
332332
}
333333

334-
if (service_destroy(service) == 0) {
335-
service_init(service, service->settings);
334+
bool destroyed = service_destroy(service) == 0;
335+
336+
service_init(service, service->settings);
337+
338+
if (destroyed) {
336339
service_start(service);
337-
} else {
338-
service_init(service, service->settings);
339340
}
340341

341342
jvalue_ref jobj = jobject_create();
@@ -524,17 +525,14 @@ int service_register(service_t* service, GMainLoop* loop)
524525

525526
LSErrorInit(&lserror);
526527

528+
DBG("Try register with LSRegister");
529+
bool registered = LSRegister(SERVICE_NAME, &handle, &lserror);
530+
527531
bool registeredLegacy = false;
528-
bool registered = false;
529532

530-
if (&LSRegisterPubPriv != 0) {
531-
DBG("Try register on LSRegister");
532-
registered = LSRegister(SERVICE_NAME, &handle, &lserror);
533-
DBG("Try legacy register on LSRegisterPubPriv");
533+
if (&LSRegisterPubPriv != NULL) {
534+
DBG("Try legacy register with LSRegisterPubPriv");
534535
registeredLegacy = LSRegisterPubPriv(SERVICE_NAME, &handlelegacy, true, &lserror);
535-
} else {
536-
DBG("Try register on LSRegister");
537-
registered = LSRegister(SERVICE_NAME, &handle, &lserror);
538536
}
539537

540538
if (!registered && !registeredLegacy) {

src/unicapture.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
return -2; \
1616
}
1717

18-
int unicapture_init_backend(cap_backend_config_t* config, capture_backend_t* backend, char* name)
18+
int unicapture_init_backend(cap_backend_config_t* config, capture_backend_t* backend, const char* name)
1919
{
2020
char* error;
2121
void* handle = dlopen(name, RTLD_LAZY);
@@ -61,7 +61,7 @@ int unicapture_init_backend(cap_backend_config_t* config, capture_backend_t* bac
6161
return ret;
6262
}
6363

64-
int unicapture_try_backends(cap_backend_config_t* config, capture_backend_t* backend, char** candidates)
64+
int unicapture_try_backends(cap_backend_config_t* config, capture_backend_t* backend, const char* const* candidates)
6565
{
6666
int ret = 0;
6767
for (int i = 0; candidates[i] != NULL; i++) {

src/unicapture.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ typedef struct _unicapture_state {
112112
extern "C" {
113113
#endif
114114
void unicapture_init(unicapture_state_t* state);
115-
int unicapture_try_backends(cap_backend_config_t* config, capture_backend_t* backend, char** candidates);
116-
int unicapture_init_backend(cap_backend_config_t* config, capture_backend_t* backend, char* name);
115+
int unicapture_try_backends(cap_backend_config_t* config, capture_backend_t* backend, const char* const* candidates);
116+
int unicapture_init_backend(cap_backend_config_t* config, capture_backend_t* backend, const char* name);
117117
int unicapture_start(unicapture_state_t* state);
118118
int unicapture_stop(unicapture_state_t* state);
119119
#ifdef __cplusplus

0 commit comments

Comments
 (0)