diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c index 74bb1f4fdc775ab2528be762cd03621f8d827b04..576daf8264b978c71ac7b87a8fa576af5946bf7c 100644 --- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c @@ -17,6 +17,7 @@ #ifdef _WIN32 #include #include +#include #define inline __inline #endif @@ -629,7 +630,11 @@ static inline bool ffmpeg_mux_packet(struct ffmpeg_mux *ffm, uint8_t *buf, /* ------------------------------------------------------------------------- */ +#ifdef _WIN32 +int wmain(int argc, wchar_t *argv_w[]) +#else int main(int argc, char *argv[]) +#endif { struct ffm_packet_info info = {0}; struct ffmpeg_mux ffm = {0}; @@ -638,6 +643,21 @@ int main(int argc, char *argv[]) int ret; #ifdef _WIN32 + char **argv; + + argv = malloc(argc * sizeof(char*)); + for (int i = 0; i < argc; i++) { + size_t len = wcslen(argv_w[i]); + int size; + + size = WideCharToMultiByte(CP_UTF8, 0, argv_w[i], len, NULL, 0, + NULL, NULL); + argv[i] = malloc(size + 1); + WideCharToMultiByte(CP_UTF8, 0, argv_w[i], len, argv[i], + size + 1, NULL, NULL); + argv[i][size] = 0; + } + _setmode(_fileno(stdin), O_BINARY); #endif setvbuf(stderr, NULL, _IONBF, 0); @@ -660,5 +680,11 @@ int main(int argc, char *argv[]) ffmpeg_mux_free(&ffm); resize_buf_free(&rb); + +#ifdef _WIN32 + for (int i = 0; i < argc; i++) + free(argv[i]); + free(argv); +#endif return 0; }