[Windows] Remove redundant DirectSound error codes
[xbmc.git] / xbmc / platform / android / activity / android_main.cpp
bloba934b6ee1ccd345c6361eb4255849b893c433bf8
1 /*
2 * Copyright (C) 2012-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "EventLoop.h"
10 #include "XBMCApp.h"
12 #include "platform/android/activity/JNIMainActivity.h"
13 #include "platform/android/activity/JNIXBMCAudioManagerOnAudioFocusChangeListener.h"
14 #include "platform/android/activity/JNIXBMCBroadcastReceiver.h"
15 #include "platform/android/activity/JNIXBMCConnectivityManagerNetworkCallback.h"
16 #include "platform/android/activity/JNIXBMCDisplayManagerDisplayListener.h"
17 #include "platform/android/activity/JNIXBMCFile.h"
18 #include "platform/android/activity/JNIXBMCJsonHandler.h"
19 #include "platform/android/activity/JNIXBMCMainView.h"
20 #include "platform/android/activity/JNIXBMCMediaSession.h"
21 #include "platform/android/activity/JNIXBMCNsdManagerDiscoveryListener.h"
22 #include "platform/android/activity/JNIXBMCNsdManagerRegistrationListener.h"
23 #include "platform/android/activity/JNIXBMCNsdManagerResolveListener.h"
24 #include "platform/android/activity/JNIXBMCSpeechRecognitionListener.h"
25 #include "platform/android/activity/JNIXBMCSurfaceTextureOnFrameAvailableListener.h"
26 #include "platform/android/activity/JNIXBMCTextureCache.h"
27 #include "platform/android/activity/JNIXBMCURIUtils.h"
28 #include "platform/android/activity/JNIXBMCVideoView.h"
30 #include <stdint.h>
31 #include <stdio.h>
32 #include <thread>
34 #include <unistd.h>
36 using namespace jni;
38 namespace
41 class LogRedirector
43 // redirect stdout / stderr to logcat
44 // based on https://codelab.wordpress.com/2014/11/03/how-to-use-standard-output-streams-for-logging-in-android-apps/
46 public:
47 LogRedirector()
49 // make stdout line-buffered and stderr unbuffered
50 setvbuf(stdout, 0, _IOLBF, 0);
51 setvbuf(stderr, 0, _IONBF, 0);
53 // spawn the logging thread
54 std::thread thread(&LogRedirector::Run);
55 thread.detach();
58 private:
59 static void Run()
61 // create a pipe and redirect stdout and stderr
62 int pfds[2];
63 pipe(pfds);
64 dup2(pfds[1], STDOUT_FILENO);
65 dup2(pfds[1], STDERR_FILENO);
67 ssize_t rdsz;
68 char buf[128];
69 while ((rdsz = read(pfds[0], buf, sizeof(buf) - 1)) > 0)
71 if (buf[rdsz - 1] == '\n')
72 --rdsz;
74 buf[rdsz] = 0; // add null-terminator
75 __android_log_write(ANDROID_LOG_DEBUG, "Kodi", buf);
80 LogRedirector g_LogRedirector;
82 } // namespace
84 extern void android_main(struct android_app* state)
87 CEventLoop eventLoop(state);
88 IInputHandler inputHandler;
89 CXBMCApp& theApp = CXBMCApp::Create(state->activity, inputHandler);
90 if (theApp.isValid())
92 eventLoop.run(theApp, inputHandler);
93 theApp.Quit();
95 else
96 CXBMCApp::android_printf("android_main: setup failed");
98 CXBMCApp::android_printf("android_main: Exiting");
100 CXBMCApp::Destroy();
102 // We need to call exit() so that all loaded libraries are properly unloaded
103 // otherwise on the next start of the Activity android will simply re-use
104 // those loaded libs in the state they were in when we quit Kodi last time
105 // which will lead to crashes because of global/static classes that haven't
106 // been properly uninitialized
107 exit(0);
110 extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
112 jint version = JNI_VERSION_1_6;
113 JNIEnv* env;
114 if (vm->GetEnv(reinterpret_cast<void**>(&env), version) != JNI_OK)
115 return -1;
117 CJNIMainActivity::RegisterNatives(env);
118 CJNIXBMCAudioManagerOnAudioFocusChangeListener::RegisterNatives(env);
119 CJNIXBMCBroadcastReceiver::RegisterNatives(env);
120 CJNIXBMCConnectivityManagerNetworkCallback::RegisterNatives(env);
121 CJNIXBMCDisplayManagerDisplayListener::RegisterNatives(env);
122 CJNIXBMCFile::RegisterNatives(env);
123 CJNIXBMCJsonHandler::RegisterNatives(env);
124 CJNIXBMCMainView::RegisterNatives(env);
125 CJNIXBMCMediaSession::RegisterNatives(env);
126 CJNIXBMCNsdManagerDiscoveryListener::RegisterNatives(env);
127 CJNIXBMCNsdManagerRegistrationListener::RegisterNatives(env);
128 CJNIXBMCNsdManagerResolveListener::RegisterNatives(env);
129 CJNIXBMCSpeechRecognitionListener::RegisterNatives(env);
130 CJNIXBMCSurfaceTextureOnFrameAvailableListener::RegisterNatives(env);
131 CJNIXBMCTextureCache::RegisterNatives(env);
132 CJNIXBMCURIUtils::RegisterNatives(env);
133 CJNIXBMCVideoView::RegisterNatives(env);
135 return version;