diff options
Diffstat (limited to 'src/fruits')
| -rw-r--r-- | src/fruits/ctv/ctv.c | 102 | ||||
| -rw-r--r-- | src/fruits/ctv/meson.build | 4 | ||||
| -rw-r--r-- | src/fruits/droid/ctv/.gitignore | 3 | ||||
| -rw-r--r-- | src/fruits/droid/ctv/app/src/main/AndroidManifest.xml | 2 | ||||
| -rw-r--r-- | src/fruits/droid/ctv/app/src/main/jniLibs/arm64-v8a/.gitignore | 1 | ||||
| -rw-r--r-- | src/fruits/droid/ctv/app/src/main/jniLibs/armeabi-v7a/.gitignore | 1 | ||||
| -rw-r--r-- | src/fruits/droid/ctv/app/src/main/jniLibs/x86/.gitignore | 1 |
7 files changed, 102 insertions, 12 deletions
diff --git a/src/fruits/ctv/ctv.c b/src/fruits/ctv/ctv.c index 9c45637..75936eb 100644 --- a/src/fruits/ctv/ctv.c +++ b/src/fruits/ctv/ctv.c @@ -1,26 +1,116 @@ #include <stl/window.h> #include <stl/platform.h> -#include "../../sink/desktop.h" +#include "../../screen/screen.h" +#include "../../render/renderer_libplacebo.h" +#include "../../mixer/mixer.h" +#include "../../libsink/sink.h" +#include "../../mixer/audio_null.h" +#include "../../mixer/audio_miniaudio.h" +#include "../../sink/common.h" +#include "../../server/common.c" struct ctv { struct aki_event_loop loop; - struct camu_desktop desktop; + struct camu_screen scr; + struct camu_renderer *renderer; + struct camu_mixer mixer; + struct camu_sink sink; + struct aki_thread thread; + bool created; }; -static void onSurfaceDestroyed(GLFMDisplay *display) { +static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque) +{ + struct ctv *c = (struct ctv *)userdata; + if (!camu_default_sink_callback(&c->scr, &c->mixer, op, type, opaque)) { + camu_sink_close(&c->sink); + } + return CAMU_SINK_OK; } -static void onDraw(GLFMDisplay *display) { +static void screen_callback(void *userdata, u8 op, void *opaque) +{ + struct ctv *c = (struct ctv *)userdata; + (void)c; + (void)op; + (void)opaque; } -void glfmMain(GLFMDisplay *display) { +static aki_thread_result AKI_THREADCALL event_loop_thread(void *userdata) +{ + struct ctv *c = (struct ctv *)userdata; + aki_event_loop_run(&c->loop); + return 0; +} + +static void onSurfaceCreated(GLFMDisplay *display, s32 width, s32 height) +{ + struct ctv *c = (struct ctv *)glfmGetUserData(display); + (void)width; + (void)height; + if (!c->created) { + c->scr.callback = screen_callback; + c->scr.userdata = c; + camu_screen_init(&c->scr, display); + camu_screen_create_window(&c->scr, "ctv"); + c->renderer = camu_renderer_lp_create(); + camu_screen_create_renderer(&c->scr, c->renderer); + + camu_mixer_init(&c->mixer, camu_audio_miniaudio_create()); + c->mixer.audio->configure_stream(c->mixer.audio, NULL); + camu_mixer_pick_format(&c->mixer, &c->mixer.fmt); + + aki_event_loop_init(&c->loop); + + camu_sink_init(&c->sink, &c->loop, &c->mixer, c->renderer); + c->sink.callback = sink_callback; + c->sink.userdata = c; + camu_sink_connect(&c->sink, AKI_SOCKET_TCP, CAMU_SERVER_IP, CAMU_PORT, al_str_c("ctv")); + + aki_thread_create(&c->thread, event_loop_thread, c); + + c->created = true; + } +} + +static void onSurfaceDestroyed(GLFMDisplay *display) +{ + (void)display; +} + +static void onDraw(GLFMDisplay *display) +{ + struct ctv *c = (struct ctv *)glfmGetUserData(display); + if (camu_screen_tick(&c->scr)) { + c->renderer->render(c->renderer, &c->scr); + } +} + +static s32 log_callback(void *userdata, char *message) +{ + (void)userdata; + __android_log_print(ANDROID_LOG_DEBUG, "CTV", "%s", message); + s32 ret = al_strlen(message); + al_free(message); + return ret; +} + +void glfmMain(GLFMDisplay *display) +{ + struct ctv *c = al_alloc_object(struct ctv); + c->created = false; + + al_set_print(log_callback, c); + + glfmSetUserData(display, c); glfmSetDisplayConfig(display, GLFMRenderingAPIOpenGLES2, GLFMColorFormatRGBA8888, GLFMDepthFormatNone, GLFMStencilFormatNone, GLFMMultisampleNone); - glfmSetRenderFunc(display, onDraw); + glfmSetSurfaceCreatedFunc(display, onSurfaceCreated); glfmSetSurfaceDestroyedFunc(display, onSurfaceDestroyed); + glfmSetRenderFunc(display, onDraw); } diff --git a/src/fruits/ctv/meson.build b/src/fruits/ctv/meson.build index 768f9e1..c06cec3 100644 --- a/src/fruits/ctv/meson.build +++ b/src/fruits/ctv/meson.build @@ -1,6 +1,6 @@ ctv_src = ['ctv.c'] -ctv_deps = [desktop] -ctv_args = [] +ctv_deps = [common_deps, buffer, render, screen, mixer, libsink] +ctv_args = ['-DCAMU_MIXER_THREADED', '-DCAMU_SCREEN_THREADED'] # https://github.com/google/ExoPlayer/issues/9933#issuecomment-1029775358 shared_library('ctv', ctv_src, dependencies: ctv_deps, c_args: ctv_args, link_args: ['-Wl,-Bsymbolic', '-static-libstdc++']) diff --git a/src/fruits/droid/ctv/.gitignore b/src/fruits/droid/ctv/.gitignore index 9c951ae..565a541 100644 --- a/src/fruits/droid/ctv/.gitignore +++ b/src/fruits/droid/ctv/.gitignore @@ -14,6 +14,3 @@ .externalNativeBuild .cxx local.properties -app/src/main/jniLibs/arm64-v8a/* -app/src/main/jniLibs/armeabi-v7a/* -app/src/main/jniLibs/x86/* diff --git a/src/fruits/droid/ctv/app/src/main/AndroidManifest.xml b/src/fruits/droid/ctv/app/src/main/AndroidManifest.xml index be6971b..4393ee9 100644 --- a/src/fruits/droid/ctv/app/src/main/AndroidManifest.xml +++ b/src/fruits/droid/ctv/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> - + <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" diff --git a/src/fruits/droid/ctv/app/src/main/jniLibs/arm64-v8a/.gitignore b/src/fruits/droid/ctv/app/src/main/jniLibs/arm64-v8a/.gitignore new file mode 100644 index 0000000..64b29ac --- /dev/null +++ b/src/fruits/droid/ctv/app/src/main/jniLibs/arm64-v8a/.gitignore @@ -0,0 +1 @@ +libctv.so diff --git a/src/fruits/droid/ctv/app/src/main/jniLibs/armeabi-v7a/.gitignore b/src/fruits/droid/ctv/app/src/main/jniLibs/armeabi-v7a/.gitignore new file mode 100644 index 0000000..64b29ac --- /dev/null +++ b/src/fruits/droid/ctv/app/src/main/jniLibs/armeabi-v7a/.gitignore @@ -0,0 +1 @@ +libctv.so diff --git a/src/fruits/droid/ctv/app/src/main/jniLibs/x86/.gitignore b/src/fruits/droid/ctv/app/src/main/jniLibs/x86/.gitignore new file mode 100644 index 0000000..64b29ac --- /dev/null +++ b/src/fruits/droid/ctv/app/src/main/jniLibs/x86/.gitignore @@ -0,0 +1 @@ +libctv.so |