int main(int argc, char *argv[]) #endif { struct ffm_packet_info info = {0}; struct ffmpeg_mux ffm = {0}; struct resize_buf rb = {0}; bool fail = false; int ret; #ifdef _WIN32 char **argv; SetErrorMode(SEM_FAILCRITICALERRORS); 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], (int)len, NULL, 0, NULL, NULL); argv[i] = malloc(size + 1); WideCharToMultiByte(CP_UTF8, 0, argv_w[i], (int)len, argv[i], size + 1, NULL, NULL); argv[i][size] = 0; } _setmode(_fileno(stdin), O_BINARY); #endif setvbuf(stderr, NULL, _IONBF, 0); ret = ffmpeg_mux_init(&ffm, argc, argv); if (ret != FFM_SUCCESS) { puts("Couldn't initialize muxer"); return ret; } while (!fail && safe_read(&info, sizeof(info)) == sizeof(info)) { resize_buf_resize(&rb, info.size); if (safe_read(rb.buf, info.size) == info.size) { ffmpeg_mux_packet(&ffm, rb.buf, &info); } else { fail = true; } } 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; }
static int ffmpeg_mux_init(struct ffmpeg_mux *ffm, int argc, char *argv[]) { int ret = ffmpeg_mux_init_internal(ffm, argc, argv); if (ret != FFM_SUCCESS) { ffmpeg_mux_free(ffm); return ret; } ffm->initialized = true; return ret; }