int main(int argc, char **argv) { video_playback_setup *settings; sigset_t allsignals; struct sigaction action; struct timespec req; int i; fflush(stdout); vj_mem_init(); vevo_strict_init(); info = veejay_malloc(); if (!info) { vj_mem_threaded_stop(); return 1; } settings = (video_playback_setup *) info->settings; if(!check_command_line_options(argc, argv)) { veejay_free(info); return 0; } if(info->dump) { veejay_set_colors(0); vj_event_init(NULL); vj_effect_initialize(720,576,0); vj_osc_allocate(VJ_PORT+2); vj_event_dump(); vj_effect_dump(); fprintf(stdout, "Environment variables:\n\tSDL_VIDEO_HWACCEL\t\tSet to 1 to use SDL video hardware accel (default=on)\n\tVEEJAY_PERFORMANCE\t\tSet to \"quality\" or \"fastest\" (default is fastest)\n\tVEEJAY_AUTO_SCALE_PIXELS\tSet to 1 to convert between CCIR 601 and JPEG automatically (default=dont care)\n\tVEEJAY_INTERPOLATE_CHROMA\tSet to 1 if you wish to interpolate every chroma sample when scaling (default=0)\n\tVEEJAY_CAPTURE_DRIVER\t\tSet to \"unicap\" or \"v4lutils\" (default=v4lutils)\n\tVEEJAY_SDL_KEY_REPEAT_INTERVAL\tinterval of key pressed to repeat while pressed down.\n\tVEEJAY_PLAYBACK_CACHE\t\tSample cache size in MB - by default, veejay takes 30 percent of total RAM\n\tVEEJAY_SDL_KEY_REPEAT_DELAY\tDelay key repeat in ms\n\tVEEJAY_FULLSCREEN\t\tStart in fullscreen (1) or windowed (0) mode\n\tVEEJAY_SCREEN_GEOMETRY\t\tSpecifiy a geometry for veejay to position the video window.\n\tVEEJAY_SCREEN_SIZE\t\tSize of video window, defaults to full screen size.\n\tVEEJAY_RUN_MODE\t\t\tRun in \"classic\" (352x288 Dummy) or default (720x576). \n"); fprintf(stdout, "\n\n\tExample for bash:\n\t\t\t$ export VEEJAY_AUTO_SCALE_PIXEL=1\n"); veejay_free(info); return 0; } if( vj_el_get_mem_size() == 0 ) prepare_cache_line( max_mem_, n_slots_ ); veejay_check_homedir( info ); sigsegfault_handler(); sigemptyset(&(settings->signal_set)); sigaddset(&(settings->signal_set), SIGINT); sigaddset(&(settings->signal_set), SIGPIPE); sigaddset(&(settings->signal_set), SIGILL); // sigaddset(&(settings->signal_set), SIGSEGV); sigaddset(&(settings->signal_set), SIGFPE ); sigaddset(&(settings->signal_set), SIGTERM ); sigaddset(&(settings->signal_set), SIGABRT); sigaddset(&(settings->signal_set), SIGPWR ); sigaddset(&(settings->signal_set), SIGQUIT ); sigfillset( &allsignals ); action.sa_handler = donothing; action.sa_mask = allsignals; action.sa_flags = SA_SIGINFO | SA_ONESHOT ; //SA_RESTART | SA_RESETHAND; signal( SIGPIPE, SIG_IGN ); for( i = 1; i < NSIG; i ++ ) if( sigismember( &(settings->signal_set), i )) sigaction( i, &action, 0 ); char *mem_func = get_memcpy_descr(); if(mem_func) { veejay_msg(VEEJAY_MSG_INFO, "Using SIMD %s", mem_func); free(mem_func); } info->use_keyb = use_keyb; info->use_mouse = use_mouse; info->show_cursor = show_cursor; if(veejay_init( info, default_geometry_x, default_geometry_y, NULL, live, ta )< 0) { veejay_msg(VEEJAY_MSG_ERROR, "Cannot start veejay"); return 0; } if(auto_loop) veejay_auto_loop(info); print_license(); veejay_init_msg_ring(); // rest of logging to screen if(!veejay_main(info)) { veejay_msg(VEEJAY_MSG_ERROR, "Cannot start main playback cycle"); veejay_free(info); return 1; } veejay_msg(VEEJAY_MSG_DEBUG, "Started playback"); int current_state = LAVPLAY_STATE_PLAYING; req.tv_sec = 0; req.tv_nsec = 4000 * 1000; while( 1 ) { //@ until your PC stops working clock_nanosleep( CLOCK_REALTIME, 0, &req, NULL ); current_state = veejay_get_state(info); if( current_state == LAVPLAY_STATE_STOP ) break; } veejay_busy(info); veejay_free(info); veejay_destroy_msg_ring(); veejay_msg(VEEJAY_MSG_INFO, "Thank you for using Veejay"); return 0; }
static int set_option( const char *name, char *value ) { int err = 0; if( strcmp(name, "h") == 0 || strcmp(name, "hostname") == 0 ) { strcpy( hostname, optarg ); launcher ++; } else if( strcmp(name, "p") == 0 || strcmp(name ,"port") == 0 ) { if(sscanf( optarg, "%d", &port_num )) launcher++; } else if (strcmp(name, "l" ) == 0 ) { selected_skin = atoi( optarg); } else if (strcmp(name, "n") == 0 ) { veejay_set_colors(0); } else if (strcmp(name, "X") == 0 ) { n_tracks = 1 + atoi(optarg); if( n_tracks < 1 || n_tracks > mt_get_max_tracks() ) n_tracks = 1; } else if( strcmp(name, "t") == 0 || strcmp(name, "no-theme") == 0) { gveejay_theme = 1; } else if( strcmp(name, "v") == 0 || strcmp(name, "verbose") == 0) { verbosity = 1; } else if (strcmp(name, "s") == 0 || strcmp(name, "size") == 0) { if(sscanf( (char*) optarg, "%dx%d", &row, &col ) != 2 ) { fprintf(stderr, "--size parameter requires NxN argument"); err++; } } else if (strcmp(name, "V") == 0 ) { fprintf(stdout, "version: %s\n", PACKAGE_VERSION); fprintf(stdout, "data directory: %s\n", get_gveejay_dir()); exit(0); } else if (strcmp( name, "m" ) == 0 ) { strcpy(midi_file, optarg); load_midi = 1; } else if (strcmp(name,"g") == 0 ) { if(sscanf( optarg, "%d,%d",&geom_[0],&geom_[1]) != 2 ) { fprintf(stderr, "invalid screen coordinates:%s\n",optarg); } else { fprintf(stdout, "Place window at %d,%d", geom_[0],geom_[1]); vj_gui_set_geom(geom_[0],geom_[1]); } } else if (strcmp(name, "P" ) == 0 || strcmp(name, "preview" ) == 0 ) { preview = atoi(optarg); if(preview <= 0 || preview > 4 ) { fprintf(stderr, "--preview [0-4]\n"); err++; } } else if (strcmp(name,"b") == 0 || strcmp(name, "beta" ) == 0 ) { beta = 1; } else if (strcmp(name,"a") == 0 ) { auto_connect = 1; } else if( strcmp(name,"L") == 0 ) { set_disable_sample_image(1); } else err++; return err; }
static int set_option(const char *name, char *value) { /* return 1 means error, return 0 means okay */ int nerr = 0; if (strcmp(name, "port") == 0 || strcmp(name, "p") == 0) { info->uc->port = atoi(optarg); } else if (strcmp(name, "verbose") == 0 || strcmp(name, "v") == 0) { info->verbose = 1; veejay_set_debug_level(info->verbose); } else if (strcmp(name, "no-color") == 0 || strcmp(name,"n") == 0) { veejay_set_colors(0); } else if (strcmp(name, "audio") == 0 || strcmp(name, "a") == 0) { info->audio = atoi(optarg); } else if ( strcmp(name, "A" ) == 0 || strcmp(name, "capture-device" ) == 0 ) { live = atoi(optarg); } else if ( strcmp(name, "Z" ) == 0 || strcmp(name, "load-generators" ) == 0 ) { if( sscanf( optarg, "%d",&ta ) != 1 ) { fprintf(stderr, "-Z/--load-generators requires an argument\n"); nerr++; } } else if (strcmp(name, "bezerk") == 0 || strcmp(name, "b") == 0) { info->no_bezerk = 0; } else if (strcmp(name, "qrcode-connection-info" ) == 0 ) { info->qrcode = 1; } else if (strcmp(name, "timer") == 0 || strcmp(name, "t") == 0) { info->uc->use_timer = atoi(optarg); if (info->uc->use_timer < 0 || info->uc->use_timer > 2) { printf("Valid timers:\n\t0=none\n\t2=normal\n\t1=rtc\n"); nerr++; } } else if (strcmp(name, "multicast-vims") == 0 || strcmp(name,"T")==0) { check_val(optarg, name); info->settings->use_vims_mcast = 1; info->settings->vims_group_name = strdup(optarg); } else if (strcmp(name, "multicast-osc") == 0 || strcmp(name, "M") == 0 ) { check_val(optarg,name); info->settings->use_mcast = 1; info->settings->group_name = strdup( optarg ); } else if (strcmp(name, "max_cache" )== 0 || strcmp(name, "j" ) == 0 ) { n_slots_ = atoi( optarg ); if(n_slots_ < 0 ) n_slots_ = 0; else if (n_slots_ > 100) n_slots_ = 100; } else if (strcmp(name, "memory" ) == 0 || strcmp(name, "m" ) == 0) { max_mem_ = atoi(optarg); if(max_mem_ < 0 ) max_mem_ = 0; else if (max_mem_ > 100) max_mem_ = 100; } else if (strcmp(name, "synchronization") == 0 || strcmp(name, "c") == 0) { info->sync_correction = atoi(optarg); } else if (strcmp(name, "version") == 0 ) { printf("Veejay %s\n", VERSION); exit(0); } else if (strcmp(name, "graphics-driver") == 0 || strcmp(name, "G") == 0 || strcmp(name, "output") == 0 || strcmp(name, "O") == 0) { info->video_out = atoi(optarg); /* use SDL */ /*#ifndef HAVE_GL if(info->video_out==3) { fprintf(stderr, "OpenGL support not enabled at compile time\n"); exit(-1); } #endif */ if( info->video_out < 0 || info->video_out > 6 ) { fprintf(stderr, "Select a valid output display driver\n"); exit(-1); } } else if (strcmp(name, "B") == 0 || strcmp(name, "features")==0) { CompiledWith(); nerr++; } else if ( strcmp(name, "output-file" ) == 0 || strcmp(name, "o") == 0 ) { check_val(optarg,name); veejay_strncpy(info->y4m_file,(char*) optarg, strlen( (char*) optarg)); } else if (strcmp(name, "preserve-pathnames") == 0 ) { info->preserve_pathnames = 1; } else if (strcmp(name, "benchmark" ) == 0 ) { int w=0,h=0; int n = 0; if( value != NULL ) n = sscanf(value, "%dx%d", &w,&h ); if( n != 2 || value == NULL ) { fprintf(stderr," --benchmark parameter requires NxN argument\n"); nerr++; } if( n == 2 ) { benchmark_veejay(w,h); exit(0); } } else if (strcmp(name, "deinterlace") == 0 || strcmp(name, "I" )==0) { info->auto_deinterlace = 1; } else if (strcmp(name, "size") == 0 || strcmp(name, "s") == 0) { if (sscanf(value, "%dx%d", &info->bes_width, &info->bes_height) != 2) { fprintf(stderr,"-s/--size parameter requires NxN argument\n"); nerr++; } } else if (strcmp(name,"scene-detection" ) == 0 || strcmp( name,"S") == 0 ) { if ((sscanf(value, "%d", &info->uc->scene_detection )) != 1 ) { fprintf(stderr, "-S/--scene-detection requires threshold argument\n"); nerr++; } } #ifdef HAVE_XINERAMA #ifndef X_DISPLAY_MISSING else if (strcmp(name, "xinerama") == 0 || strcmp(name, "X") == 0 ) { x11_user_select( atoi(optarg) ); } #endif #endif else if (strcmp(name, "action-file")==0 || strcmp(name,"F")==0) { check_val(optarg,name); veejay_strncpy(info->action_file[0],(char*) optarg, strlen( (char*) optarg)); info->load_action_file = 1; }else if (strcmp(name, "sample-file")==0 || strcmp(name,"l")==0) { check_val(optarg,name); veejay_strncpy(info->action_file[1],(char*) optarg, strlen( (char*) optarg)); info->load_action_file = 1; } else if (strcmp(name, "geometry-x") == 0 || strcmp(name, "x")==0) { default_geometry_x = atoi(optarg); } else if (strcmp(name, "geometry-y") == 0 || strcmp(name,"y")==0) { default_geometry_y = atoi(optarg); } else if (strcmp(name, "no-keyboard") == 0 ) { use_keyb = 0; } else if (strcmp(name, "no-mouse") == 0 ) { use_mouse = 0; } else if (strcmp(name, "show-cursor") == 0 ) { show_cursor = 1; } else if(strcmp(name,"dump-events")==0 || strcmp(name,"u")==0) { info->dump = 1; } else if(strcmp(name, "input-width") == 0 || strcmp(name, "W") == 0 ) { info->dummy->width = atoi(optarg); } else if(strcmp(name, "input-height") == 0 || strcmp(name, "H") == 0 ) { info->dummy->height = atoi(optarg); } else if(strcmp(name, "norm") == 0 || strcmp(name, "N") == 0 ) { int val = atoi(optarg); if(val == 1 ) override_norm = 'n'; if(val == 0 ) override_norm = 'p'; if(val == 2 ) override_norm = 's'; } else if(strcmp(name, "D") == 0 || strcmp(name, "composite") == 0) { info->settings->composite = 0; } else if(strcmp(name, "output-width") == 0 || strcmp(name, "w") == 0) { info->video_output_width = atoi(optarg); } else if(strcmp(name, "output-height") == 0 || strcmp(name, "h") == 0) { info->video_output_height = atoi(optarg); } else if(strcmp(name, "audiorate") == 0 || strcmp(name, "r") == 0 ) { info->dummy->arate = atoi(optarg); } else if (strcmp(name,"fps")==0 || strcmp(name, "f")==0) { override_fps = atof(optarg); } else if(strcmp(name,"yuv")==0 || strcmp(name,"Y")==0) { override_pix_fmt = atoi(optarg); if( override_pix_fmt < 0 || override_pix_fmt > 2 ) override_pix_fmt = 0; } else if(strcmp(name, "swap-range") == 0 || strcmp(name, "e") == 0 ) { switch_jpeg = 1; } else if( strcmp(name,"auto-loop")==0 || strcmp(name,"L") == 0) { auto_loop = 1; } else if (strcmp(name, "quit") == 0 || strcmp(name, "q") == 0 ) { info->continuous = 0; } else if (strcmp(name, "clip-as-sample") == 0 || strcmp(name, "g") == 0 ) { info->uc->file_as_sample = 1; } else if (strcmp(name, "dummy") == 0 || strcmp(name, "d" ) == 0 ) { info->dummy->active = 1; // enable DUMMY MODE } else nerr++; /* unknown option - error */ return nerr; }