void bina_exit() { renderer_destroy(); if (m.window) { sdl_destroy_window(m.window); } log_d("exiting library"); sdl_quit(); }
void free_resources() { sdl_quit(main_window, main_context); }
int main(int argc, char const *argv[]) { arguments_t arguments; try { arguments = get_command_line_arguments(argc, argv); } catch(std::string option) { std::cout << "Unknown option: " << option << std::endl; return -1; } if(arguments.options.help) { std::cout << "usage: ans [--version] [--help] [--text] [--ansi] [--xterm256] [--xterm24bit]" << std::endl; std::cout << " [--png] [--scroller] [file ...]" << std::endl; std::cout << std::endl; std::cout << " --text Display as plain-text" << std::endl; std::cout << " --ansi Display with ANSi escape sequences" << std::endl; std::cout << " --xterm256 Display with XTerm's 256-color palette" << std::endl; std::cout << " --xterm24bit Display with 24-Bit escape sequences" << std::endl; std::cout << " --png Generate a PNG image" << std::endl; std::cout << " --scroller Display artwork as a scrolling display" << std::endl; std::cout << " --scroller-continuous Display artwork as a continuous scrolling display" << std::endl; return 0; } if(arguments.options.version) { std::cout << "ans version 0.1" << std::endl; return 0; } switch(arguments.options.output_type) { case output_type_t::scroller: case output_type_t::scroller_continuous: sdl_init(); scroller_init(renderer, width, height); break; default: break; } for(auto filename:arguments.files) { try { auto artwork = load_artwork(filename); switch(arguments.options.output_type) { case output_type_t::text: display_as_text(std::cout, artwork); break; case output_type_t::ansi: display_as_ansi(std::cout, artwork); break; case output_type_t::xterm256: display_as_xterm256(std::cout, artwork); break; case output_type_t::xterm24bit: display_as_xterm24bit(std::cout, artwork); break; case output_type_t::png: { image_t image(artwork); image.save_as_png(filename + ".png"); } break; case output_type_t::scroller: if(display_as_scroller(window, width, height, renderer, artwork, false)) { scroller_quit(); sdl_quit(); return 0; } break; case output_type_t::scroller_continuous: if(display_as_scroller(window, width, height, renderer, artwork, true)) { scroller_quit(); sdl_quit(); return 0; } break; } } catch(file_format_not_recognized_t e) { std::cerr << "File format not recognized: " << filename << std::endl; } catch(std::exception e) { std::cerr << "An error occurred whilst attempting to read " << filename << std::endl; } } switch(arguments.options.output_type) { case output_type_t::scroller: case output_type_t::scroller_continuous: scroller_quit(); sdl_quit(); break; default: break; } return 0; }
int main(int argc, char*argv[]) { if (argc < 2 || strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { usage(); return 0; } signal(SIGINT, &onExit); streaming = 0; AVOutputFormat *fmt; AVFormatContext *oc; avcodec_init(); av_register_all(); fmt = av_guess_format(NULL, ".mkv", NULL); if (!fmt) { fprintf(stderr, "Could not find suitable output format\n"); exit(1); } fmt->flags = fmt->flags | AVFMT_NOFILE; // allocate the output media context oc = avformat_alloc_context(); if (!oc) { fprintf(stderr, "Memory error\n"); exit(1); } oc->oformat = fmt; // set the output parameters (must be done even if no parameters). if (av_set_parameters(oc, NULL) < 0) { fprintf(stderr, "Invalid output format parameters\n"); exit(1); } // * Initializiations * video_record_init(fmt, oc); video_play_init(); audio_record_init(fmt, oc); // * Start recording and encoding audio and video * stopRecording = 0; pthread_create(&video_thread_id, NULL, startVideoEncoding, NULL); pthread_create(&audio_thread_id, NULL, startAudioEncoding, NULL); pthread_create(&keyboard_thread_id, NULL, captureKeyboard, NULL); // * Connect to nameserver * char * name = "default"; char* protocol = "0"; char* control_port = CONTROL_PORT_S; if( argc >= 2) name = argv[1]; if( argc >= 3) protocol = argv[2]; if( argc >= 4) control_port = argv[3]; register_nameserver(name, protocol, control_port); // * Establish control, audio, and video connections * if(protocol[0] == TCP) establish_peer_connections(SOCK_STREAM); else if(protocol[0] == UDP) establish_peer_connections(SOCK_DGRAM); else exit(1); send_init_control_packet( oc->streams[0], oc->streams[1] ); // * Transmit data through the network * pthread_create(&control_network_thread_id, NULL, (void*)listen_control_packets,(void*) NULL); pthread_create(&video_network_thread_id, NULL, (void*)stream_video_packets, (void*)NULL); pthread_create(&audio_network_thread_id, NULL, (void*)stream_audio_packets, (void*)NULL); streaming = 1; // * Wait for threads to exit * pthread_join(video_thread_id, NULL); pthread_join(audio_thread_id, NULL); pthread_join(keyboard_thread_id, NULL); pthread_join(control_network_thread_id, NULL); pthread_join(video_network_thread_id, NULL); pthread_join(audio_network_thread_id, NULL); // * Exit * // pthread_mutex_destroy(&fileMutex); sdl_quit(); video_close(); audio_close(); av_free(oc); printf("[RECORDER] Quit Successfully\n"); return 0; }