0ba74fbd9a
The header scrcpy.h is intended to be the "public" API. It should not depend on other internal headers. Therefore, declare all required structs in this header and adapt internal code.
109 lines
3.0 KiB
C
109 lines
3.0 KiB
C
#include "scrcpy.h"
|
|
|
|
#include <assert.h>
|
|
#include <stdbool.h>
|
|
#include <unistd.h>
|
|
#include <libavformat/avformat.h>
|
|
#define SDL_MAIN_HANDLED // avoid link error on Linux Windows Subsystem
|
|
#include <SDL2/SDL.h>
|
|
|
|
#include "config.h"
|
|
#include "cli.h"
|
|
#include "compat.h"
|
|
#include "util/log.h"
|
|
|
|
static void
|
|
print_version(void) {
|
|
fprintf(stderr, "scrcpy %s\n\n", SCRCPY_VERSION);
|
|
|
|
fprintf(stderr, "dependencies:\n");
|
|
fprintf(stderr, " - SDL %d.%d.%d\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION,
|
|
SDL_PATCHLEVEL);
|
|
fprintf(stderr, " - libavcodec %d.%d.%d\n", LIBAVCODEC_VERSION_MAJOR,
|
|
LIBAVCODEC_VERSION_MINOR,
|
|
LIBAVCODEC_VERSION_MICRO);
|
|
fprintf(stderr, " - libavformat %d.%d.%d\n", LIBAVFORMAT_VERSION_MAJOR,
|
|
LIBAVFORMAT_VERSION_MINOR,
|
|
LIBAVFORMAT_VERSION_MICRO);
|
|
fprintf(stderr, " - libavutil %d.%d.%d\n", LIBAVUTIL_VERSION_MAJOR,
|
|
LIBAVUTIL_VERSION_MINOR,
|
|
LIBAVUTIL_VERSION_MICRO);
|
|
}
|
|
|
|
static SDL_LogPriority
|
|
convert_log_level_to_sdl(enum sc_log_level level) {
|
|
switch (level) {
|
|
case SC_LOG_LEVEL_DEBUG:
|
|
return SDL_LOG_PRIORITY_DEBUG;
|
|
case SC_LOG_LEVEL_INFO:
|
|
return SDL_LOG_PRIORITY_INFO;
|
|
case SC_LOG_LEVEL_WARN:
|
|
return SDL_LOG_PRIORITY_WARN;
|
|
case SC_LOG_LEVEL_ERROR:
|
|
return SDL_LOG_PRIORITY_ERROR;
|
|
default:
|
|
assert(!"unexpected log level");
|
|
return SDL_LOG_PRIORITY_INFO;
|
|
}
|
|
}
|
|
|
|
|
|
int
|
|
main(int argc, char *argv[]) {
|
|
#ifdef __WINDOWS__
|
|
// disable buffering, we want logs immediately
|
|
// even line buffering (setvbuf() with mode _IOLBF) is not sufficient
|
|
setbuf(stdout, NULL);
|
|
setbuf(stderr, NULL);
|
|
#endif
|
|
|
|
struct scrcpy_cli_args args = {
|
|
.opts = SCRCPY_OPTIONS_DEFAULT,
|
|
.help = false,
|
|
.version = false,
|
|
};
|
|
|
|
#ifndef NDEBUG
|
|
args.opts.log_level = SC_LOG_LEVEL_DEBUG;
|
|
#endif
|
|
|
|
if (!scrcpy_parse_args(&args, argc, argv)) {
|
|
return 1;
|
|
}
|
|
|
|
SDL_LogPriority sdl_log = convert_log_level_to_sdl(args.opts.log_level);
|
|
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, sdl_log);
|
|
|
|
if (args.help) {
|
|
scrcpy_print_usage(argv[0]);
|
|
return 0;
|
|
}
|
|
|
|
if (args.version) {
|
|
print_version();
|
|
return 0;
|
|
}
|
|
|
|
LOGI("scrcpy " SCRCPY_VERSION " <https://github.com/Genymobile/scrcpy>");
|
|
|
|
#ifdef SCRCPY_LAVF_REQUIRES_REGISTER_ALL
|
|
av_register_all();
|
|
#endif
|
|
|
|
if (avformat_network_init()) {
|
|
return 1;
|
|
}
|
|
|
|
int res = scrcpy(&args.opts) ? 0 : 1;
|
|
|
|
avformat_network_deinit(); // ignore failure
|
|
|
|
#if defined (__WINDOWS__) && ! defined (WINDOWS_NOCONSOLE)
|
|
if (res != 0) {
|
|
fprintf(stderr, "Press any key to continue...\n");
|
|
getchar();
|
|
}
|
|
#endif
|
|
return res;
|
|
}
|