/* arc-linux-uclibc-gcc -I?/rootfs/include -L?/rootfs/lib -Wall -Werror \ -lamplayer -lamcontroler -lamcodec -lavformat -lavutil -lavcodec -lpthread -lz \ simple_player.c */ int main(int argc,char *argv[]) { thread_ctrl_para_t init_para; int pid; if(argc<2) { printf("usage:player file\n"); return -1; } player_init(); init_para.play_ctrl_para.file_name=argv[1]; pid=player_start(&init_para.play_ctrl_para,0); if(pid<0) { printf("player start failed!error=%d\n",pid); return -1; } init_para.pid = pid; while(player_get_state(pid)!=PLAYER_STOPED) { sleep(3); } player_progress_exit(); return 0; }
int dtplayer_start (void *player_priv) { //Comments: //register evetn server and player service in player_start //Since some app just want to get mediaInfo in dtplayer_init //No need to create loop there dt_event_server_init (); dtplayer_context_t *dtp_ctx = (dtplayer_context_t *)player_priv; int ret = player_start(dtp_ctx); return ret; }
bool ai_start(Player *player, Board *board) { int x, y; while (1) { x = rand() % board->width; y = rand() % board->height; if (board->fields[x][y].owner == 0) { if (!has_neighbour(x, y, ENEMY, board) || board->width * board->height <= 30) { player_start(player, pair_to_field(create_pair(x, y), board)); return true; } } } }
static void* music_player_thread (thread_handler* h) { music_player* mp = (music_player*) h; while(!h->cancel) { int song; if (0 > read (mp->control[0], &song, sizeof(song))) break; player_stop(mp); if (song >= 0) player_start(mp, mp->songs[song]); } return NULL; }
int main (int argc, char *argv[]) { Player player; /* Initialisation */ gst_init (&argc, &argv); gtk_init(&argc, &argv); int rc = 0; /* Verification des arguments d'entree */ switch(argc) { case 2: rc = init_video_player(&player,argv[1]); break; case 3: rc = init_video_player_subtitle(&player,argv[1],argv[2]); break; default: g_printerr ("Usage: %s <Ogg/Vorbis filename>\n", argv[0]); return -1; } if(rc) { g_printerr ("Player could not be created. Exiting.\n"); return -1; } get_ui(&player); /* passage a l'etat "playing" du pipeline */ g_print ("Lecture de : %s\n", argv[1]); player_start(&player); /* Iteration */ g_print ("En cours...\n"); /*g_main_loop_run (loop);*/ gtk_main(); /*SHOULD BE IN A FUNCTION END*/ /* En dehors de la boucle principale, on nettoie proprement */ gst_element_set_state ((player.pipeline), GST_STATE_NULL); g_print ("Suppression du pipeline\n"); gst_object_unref(player.pipeline); return EXIT_SUCCESS; }
void whoplaysfirst(t_p4 *p4) { int player; srand(time(NULL)); player = rand() % 2; if (player == PLAYER) { ft_putendl("It's for YOU to start!"); player_start(p4, player); } else if (player == CPU) { ft_putendl("It's for ME to start!"); computer_start(p4, player); } }
void mlrate_errors(FILE *fdiag) { player_t p; piter_t piter; player_start(&piter); while ((p = player_next(&piter)) != NO_PLAYER) if (player_get_rated(p) && !player_get_ignore(p)) { irank_t r = player_get_rank(p); double plevel; irank_t low, lowleft, lowright, high, highleft, highright; lowright = highleft = r; plevel = 1.0/log(player_get_ratedgames(p) + 1.0) - players_P(p, r); lowleft = RANK_MINIMUM; highright = RANK_MAXIMUM; do { low = (lowleft + lowright)/2; high = (highleft + highright)/2; if (players_P(p, low) + plevel > 0) lowright = low; /* Root's somewhere to the left. */ else lowleft = low; /* Root's somewhere to the right. */ if (players_P(p, high) + plevel < 0) highright = high; /* Root's somewhere to the left. */ else highleft = high; /* Root's somewhere to the right. */ } while (lowright - lowleft > CLOSE_ENOUGH && highright - highleft > CLOSE_ENOUGH); player_set_low(p, low-r); player_set_high(p, high-r); } }
int kk_player_start (kk_player_t *player) { int ret = -1; /* Already playing? Not an error. */ if (player->input != NULL) return 0; /* Queue empty? We consider that an error. */ if (kk_player_queue_is_empty (player->queue)) return -1; pthread_mutex_lock (&player->mutex); while (kk_player_queue_is_filled (player->queue)) { ret = player_start (player); if (ret == 0) break; } if (ret == 0) pthread_cond_signal (&player->cond); pthread_mutex_unlock (&player->mutex); return ret; }
bool CAMLPlayer::OpenFile(const CFileItem &file, const CPlayerOptions &options) { try { CLog::Log(LOGNOTICE, "CAMLPlayer: Opening: %s", file.GetPath().c_str()); // if playing a file close it first // this has to be changed so we won't have to close it. if (ThreadHandle()) CloseFile(); m_item = file; m_options = options; m_elapsed_ms = 0; m_duration_ms = 0; m_audio_info = "none"; m_audio_delay = g_settings.m_currentVideoSettings.m_AudioDelay; m_video_info = "none"; m_video_width = 0; m_video_height = 0; m_video_fps_numerator = 25; m_video_fps_denominator = 1; m_subtitle_delay = 0; m_subtitle_thread = NULL; m_chapter_index = 0; m_chapter_count = 0; m_show_mainvideo = -1; m_dst_rect.SetRect(0, 0, 0, 0); ClearStreamInfos(); static URLProtocol vfs_protocol = { "vfs", CFileURLProtocol::Open, CFileURLProtocol::Read, CFileURLProtocol::Write, CFileURLProtocol::Seek, CFileURLProtocol::SeekEx, // url_exseek, an amlogic extension. CFileURLProtocol::Close, }; CStdString url = m_item.GetPath(); if (url.Left(strlen("smb://")).Equals("smb://")) { // the name string needs to persist static const char *smb_name = "smb"; vfs_protocol.name = smb_name; } else if (url.Left(strlen("afp://")).Equals("afp://")) { // the name string needs to persist static const char *afp_name = "afp"; vfs_protocol.name = afp_name; } else if (url.Left(strlen("nfs://")).Equals("nfs://")) { // the name string needs to persist static const char *nfs_name = "nfs"; vfs_protocol.name = nfs_name; } else if (url.Left(strlen("http://")).Equals("http://")) { // the name string needs to persist static const char *http_name = "xb-http"; vfs_protocol.name = http_name; url = "xb-" + url; } printf("CAMLPlayer::OpenFile: URL=%s\n", url.c_str()); if (player_init() != PLAYER_SUCCESS) { printf("player init failed\n"); return false; } printf("player init......\n"); // must be after player_init av_register_protocol2(&vfs_protocol, sizeof(vfs_protocol)); static play_control_t play_control; memset(&play_control, 0, sizeof(play_control_t)); // if we do not register a callback, // then the libamplayer will free run checking status. player_register_update_callback(&play_control.callback_fn, &UpdatePlayerInfo, 1000); // leak file_name for now. play_control.file_name = (char*)strdup(url.c_str()); //play_control->nosound = 1; // if disable audio...,must call this api play_control.video_index = -1; //MUST play_control.audio_index = -1; //MUST play_control.sub_index = -1; //MUST play_control.hassub = 1; play_control.t_pos = -1; play_control.need_start = 1; // if 0,you can omit player_start_play API. // just play video/audio immediately. // if 1,then need call "player_start_play" API; //play_control.auto_buffing_enable = 1; //play_control.buffing_min = 0.2; //play_control.buffing_middle = 0.5; //play_control.buffing_max = 0.8; //play_control.byteiobufsize =; // maps to av_open_input_file buffer size //play_control.loopbufsize =; //play_control.enable_rw_on_pause =; m_aml_state.clear(); m_aml_state.push_back(0); m_pid = player_start(&play_control, 0); if (m_pid < 0) { printf("player start failed! error = %d\n", m_pid); return false; } // setup to spin the busy dialog until we are playing m_ready.Reset(); g_renderManager.PreInit(); // create the playing thread m_StopPlaying = false; Create(); if (!m_ready.WaitMSec(100)) { CGUIDialogBusy *dialog = (CGUIDialogBusy*)g_windowManager.GetWindow(WINDOW_DIALOG_BUSY); dialog->Show(); while (!m_ready.WaitMSec(1)) g_windowManager.ProcessRenderLoop(false); dialog->Close(); } // Playback might have been stopped due to some error. if (m_bStop || m_StopPlaying) return false; return true; } catch (...) { CLog::Log(LOGERROR, "%s - Exception thrown on open", __FUNCTION__); return false; } }
JNIEXPORT jint JNICALL Java_com_farcore_playerservice_AmPlayer_playMedia (JNIEnv *env, jobject obj,jstring url, jint isloop, jint pMode,jint st){ int pid = -1; jclass clazz = (*env)->GetObjectClass(env, obj); gMplayerClazz =(*env)->NewGlobalRef(env,clazz); if(gMplayerClazz){ LOGI("get mediaplayer class"); }else{ LOGE("can't get mediaplayer class"); return -100; } gPostMid = (*env)->GetStaticMethodID(env, gMplayerClazz, "onUpdateState", "(IIIIIII)V"); if(gPostMid){ LOGI("get update state object id"); }else{ LOGE("failed to get update object id"); return -101; } const char * pname = (*env)->GetStringUTFChars(env,url, NULL); if(NULL == pname) { LOGE("failed to change jstring to standard string"); return -1; } if(_plCtrl.file_name != NULL){ free(_plCtrl.file_name); } memset((void*)&_plCtrl,0,sizeof(play_control_t)); player_register_update_callback(&_plCtrl.callback_fn,&update_player_info,PLAYER_INFO_POP_INTERVAL); _plCtrl.file_name = strndup(pname,FILENAME_LENGTH_MAX); _plCtrl.video_index = -1;//MUST _plCtrl.audio_index = -1;//MUST _plCtrl.hassub = 1; if(pMode == 1){ _plCtrl.nosound = 1; SYS_set_tsync_enable(0);//if no sound,can set to be 0 LOGI("disable sound"); }else if(pMode ==2){ _plCtrl.novideo = 1; LOGI("disable video"); } SYS_set_tsync_enable(1);//if no sound,can set to be 0 if(isloop>0){ _plCtrl.loop_mode =1; LOGI("set loop mode"); } if(st>0){ LOGI("play start position:%d",st); _plCtrl.t_pos = st; } LOGI("add a media file to play"); pid=player_start(&_plCtrl,0); if(pid<0) { LOGI("player start failed!error=%d\n",pid); return -1; } (*env)->ReleaseStringUTFChars(env,url, pname); return pid; }
void on_start_activate(GtkAction * action, gpointer user_data) { player_start(get_player(app)); }
void mlrate(double mean, FILE *fdiag) { double maxchange; /* The max change of one turn. */ size_t pcount, gcount, rcount; /* Player, game, and removed counters. */ size_t wcount, lcount; /* Win/loss counters. */ double wsum, lsum; /* Weighted sums. */ size_t globturns = 0; /* Counts the turns of the outer loop. */ size_t hcount[10]; /* Handicap game counters. */ player_t p; /* A player. */ piter_t piter; /* An iterator over players. */ char *pflags; assert(0.0 < mean && mean < RANK_MAXIMUM); pflags = (char *)malloc(player_count()); if (pflags == NULL) errex("malloc(%lu) failed", player_count()); memset(pflags, 0, player_count()); /* Assign a start rating for every player. */ player_start(&piter); while ((p = player_next(&piter)) != NO_PLAYER) if (!player_get_rated(p) && !player_get_ignore(p)) { player_set_rank(p, mean); player_set_rated(p, 1); } /* Remove players with no wins or no losses against other rated ** players; then again and again, until no more can be removed. ** While we're at it, count some statistics as well. */ do { pcount = gcount = rcount = 0; hcount[0] = hcount[1] = hcount[2] = hcount[3] = hcount[4] = hcount[5] = hcount[6] = hcount[7] = hcount[8] = hcount[9] = 0; player_start(&piter); while ((p = player_next(&piter)) != NO_PLAYER) if (player_get_rated(p) && !player_get_ignore(p)) { game_t g; giter_t giter; unsigned oppcount = 0; wcount = lcount = 0; wsum = lsum = 0.0; player_games_start(p, &giter); while ((g = player_games_next(&giter)) != NO_GAME) if (game_weight(g) > 0.0) { double a = game_advantage(g); if (a >= 10.0) hcount[0] += 1; else if (a >= 1.0) hcount[(unsigned)floor(a)] += 1; if (p == game_winner(g) && player_get_rated(game_loser(g))) { wcount += 1; wsum += game_weight(g); if (!pflags[game_loser(g)]) { pflags[game_loser(g)] = 1; oppcount += 1; } } else if (p == game_loser(g) && player_get_rated(game_winner(g))) { lcount += 1; lsum += game_weight(g); if (!pflags[game_winner(g)]) { pflags[game_winner(g)] = 1; oppcount += 1; } } else game_set_weight(g, 0.0); } else game_set_weight(g, 0.0); if (wsum < 0.25 || lsum < 0.25 || oppcount < 3) { player_set_rated(p, 0); rcount += 1; } else { pcount += 1; gcount += wcount + lcount; } player_set_ratedgames(p, wcount, lcount); player_set_wratedgames(p, wsum, lsum); /* Clear flags. */ player_games_start(p, &giter); while ((g = player_games_next(&giter)) != NO_GAME) pflags[game_loser(g)] = pflags[game_winner(g)] = 0; } } while (rcount > 0); player_gc_games(); if (fdiag) { int i; fprintf(fdiag, "\nRemaining:\n%6lu players\n%6lu games\n\n", (unsigned long)pcount, (unsigned long)gcount/2); for (i = 1 ; i <= 9 ; i++) fprintf(fdiag, "Advantage %2d: %5lu games\n", i, (unsigned long)hcount[i]); fprintf(fdiag, "Advantage >=10: %5lu games\n\n", (unsigned long)hcount[0]); } if (pcount == 0 || gcount == 0) errex("No player or no games"); /* ** The outer loop. */ do { /* while (maxchange > CHANGE_LIMIT && globturns < GLOBAL_TURNS_MAX); */ int maxp = 0; pcount = 0; maxchange = 0.0; globturns += 1; /* ** Loop over all players. */ player_start(&piter); while ((p = player_next(&piter)) != NO_PLAYER) { /* ** We use bisection to find the root of the derivative (the maximum). */ irank_t r, oldrank; irank_t ileft = RANK_MINIMUM, iright = RANK_MAXIMUM; if (!player_get_rated(p) || player_get_ignore(p)) continue; /* ** Inner (bisection) loop. */ pcount += 1; r = oldrank = player_get_rank(p); do { /* while (iright - ileft > CLOSE_ENOUGH); */ game_t g; double sum = 0.0; giter_t giter; player_games_start(p, &giter); while ((g = player_games_next(&giter)) != NO_GAME) { player_t opp; double diff; if (p == game_winner(g)) { opp = game_loser(g); if (player_get_rated(opp)) { diff = RANK_DIFF(r, player_get_rank(opp)) + game_advantage(g); sum += dP(diff, 1) * game_weight(g); } } else { opp = game_winner(g); if (player_get_rated(opp)) { diff = RANK_DIFF(r, player_get_rank(opp)) - game_advantage(g); sum += dP(diff, 0) * game_weight(g); } } } if (sum > 0.0) iright = r; /* Root's somewhere to the left. */ else ileft = r; /* Root's somewhere to the right. */ r = (iright + ileft)/2; } while (iright - ileft > CLOSE_ENOUGH); if (r > oldrank) { if (r - oldrank > maxchange) { maxchange = r - oldrank; maxp = p; } } else { if (oldrank - r > maxchange) { maxchange = oldrank - r; maxp = p; } } player_set_rank(p, r); } /* while ((p = player_next())) */ #ifdef MAXP fprintf(stderr, "\n--- Maxp: %s rank=%g ww=%g wl=%g w=%u l=%u rg=%u\n", player_get_name(maxp), player_get_rank(maxp), player_get_wwins(maxp), player_get_wlosses(maxp), player_get_wins(maxp), player_get_losses(maxp), player_get_ratedgames(maxp)); #endif if (globturns > 100) circular_check(maxp); if (fdiag) { fprintf(fdiag, " %3lu: %6.3f", (unsigned long)globturns, maxchange); if (globturns % 5) fflush(fdiag); else fputc('\n', fdiag); } } while (maxchange > CHANGE_LIMIT && globturns < GLOBAL_TURNS_MAX); if (fdiag) { if (globturns % 5) fputc('\n', fdiag); fputc('\n', fdiag); } if (globturns == GLOBAL_TURNS_MAX) errex("Aborted after maximum %u turns\n", GLOBAL_TURNS_MAX); if (pflags != NULL) free(pflags); }
/* * Class: com_farcore_playerservice_MediaPlayer * Method: addMediaSource * Signature: (Ljava/lang/String;III)I */ JNIEXPORT jint JNICALL Java_com_farcore_playerservice_AmPlayer_setMediaFd (JNIEnv *env, jobject obj, jobject fileDescriptor,jint isloop, jint pMode,jint st,jlong offset, jlong length){ int pid = -1; char * file=NULL; jclass clazz = (*env)->GetObjectClass(env, obj); gMplayerClazz =(*env)->NewGlobalRef(env,clazz); if(gMplayerClazz){ ALOGI("get mediaplayer class"); }else{ ALOGE("can't get mediaplayer class"); return -100; } gPostMid = (*env)->GetStaticMethodID(env, gMplayerClazz, "onUpdateState", "(IIIIIII)V"); if(gPostMid){ ALOGI("get update state object id"); }else{ ALOGE("failed to get update object id"); return -101; } URLProtocol *prot=&android_protocol; prot->name="android"; prot->url_open=(int (*)(URLContext *, const char *, int ))vp_open; prot->url_read=(int (*)(URLContext *, unsigned char *, int))vp_read; prot->url_write=(int (*)(URLContext *, unsigned char *, int))vp_write; prot->url_seek=(int64_t (*)(URLContext *, int64_t , int))vp_seek; prot->url_close=(int (*)(URLContext *))vp_close; prot->url_get_file_handle = (int (*)(URLContext *))vp_get_file_handle; av_register_protocol(prot); if (fileDescriptor == NULL) { return -1; } int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); if(fd<0 || offset<0) return -1; file=(char *)malloc(128); if(file==NULL) return -1; mAmlogicFile.oldfd=fd; mAmlogicFile.fd = dup(fd); mAmlogicFile.fd_valid=1; mAmlogicFile.mOffset=offset; mAmlogicFile.mLength=length; _plCtrl.t_pos=-1;/*don't seek to 0*/ //mPlay_ctl.t_pos=0;/*don't seek to 0*/ sprintf(file,"android:AmlogicPlayer=[%x:%x],AmlogicPlayer_fd=[%x:%x]", NULL,NULL, (unsigned int)&mAmlogicFile,(~(unsigned int)&mAmlogicFile)); if(_plCtrl.file_name != NULL){ free(_plCtrl.file_name); } memset((void*)&_plCtrl,0,sizeof(play_control_t)); player_register_update_callback(&_plCtrl.callback_fn,&update_player_info,PLAYER_INFO_POP_INTERVAL); //_plCtrl.file_name = strndup(pname,FILENAME_LENGTH_MAX); mAmlogicFile.datasource=file; _plCtrl.file_name=(char*)mAmlogicFile.datasource; _plCtrl.video_index = -1;//MUST _plCtrl.audio_index = -1;//MUST _plCtrl.hassub = 1; //enable subtitle if(pMode == 1){ _plCtrl.nosound = 1; SYS_set_tsync_enable(0);//if no sound,can set to be 0 ALOGI("disable sound"); }else if(pMode ==2){ _plCtrl.novideo = 1; ALOGI("disable video"); } if(st>0){ ALOGI("play start position:%d",st); _plCtrl.t_pos = st; } SYS_set_tsync_enable(1);//if no sound,can set to be 0 if(isloop>0){ _plCtrl.loop_mode =1; ALOGI("set loop mode"); } _plCtrl.need_start = 1; ALOGI("set a media file to play,but need start it using start interface"); pid=player_start(&_plCtrl,0); if(pid<0) { ALOGI("player start failed!error=%d\n",pid); return -1; } //(*env)->ReleaseStringUTFChars(env,url, pname); return pid; }
int main(int argc,char *argv[]) { play_control_t *pCtrl = NULL; int pid; int pos = 0; int speed = 0; int tmpneedexit = 0; int ret = -1; media_info_t minfo; char tmpcommand[TMP_COMMAND_MAX]; EMU_STEP tmpstep = EMU_STEP_MENU; pCtrl = (play_control_t*)malloc(sizeof(play_control_t)); memset(pCtrl,0,sizeof(play_control_t)); memset(&minfo,0,sizeof(media_info_t)); if(argc<2) { printf("usage:player file\n"); return -1; } player_init(); set_display_axis(0); //move osd out of screen to set video layer out player_register_update_callback(&pCtrl->callback_fn,&update_player_info,1000); printf("player callback register....\n"); pCtrl->file_name = strdup(argv[1]); //pCtrl->nosound = 1; // if disable audio...,must call this api pCtrl->video_index = -1;// MUST pCtrl->audio_index = -1;// MUST pCtrl->sub_index = -1;/// MUST pCtrl->hassub = 1; // enable subtitle //just open a buffer,just for p2p,http,etc... //pCtrl->auto_buffing_enable = 1; // pCtrl->buffing_min = 0.001; // pCtrl->buffing_middle = 0.02; // pCtrl->buffing_max = 0.9; pCtrl->t_pos = -1; // start position, if live streaming, need set to -1 pCtrl->need_start = 0; // if 0,you can omit player_start_play API.just play video/audio immediately. if 1,need call "player_start_play" API; pid=player_start(pCtrl,0); if(pid<0) { printf("player start failed!error=%d\n",pid); return -1; } signal(SIGSEGV, signal_handler); //SYS_disable_osd0(); while((!tmpneedexit)&&(!PLAYER_THREAD_IS_STOPPED(player_get_state(pid)))){ switch (tmpstep) { case EMU_STEP_PAUSE: player_pause(pid); tmpstep = EMU_STEP_MENU; break; case EMU_STEP_RESUME: player_resume(pid); tmpstep = EMU_STEP_MENU; break; case EMU_STEP_SEEK: printf("will seek position:100\n"); pos = 100; player_timesearch(pid,pos); tmpstep = EMU_STEP_MENU; break; break; case EMU_STEP_STOP: player_stop(pid); tmpstep = EMU_STEP_MENU; break; case EMU_STEP_FF: printf("please input fastforward speed:\n"); speed = 1; player_forward(pid,speed); tmpstep = EMU_STEP_MENU; break; case EMU_STEP_RR: printf("please input fastrewind speed:"); speed = 1; player_backward(pid,speed); tmpstep = EMU_STEP_MENU; break; case EMU_STEP_SETLOOP: player_loop(pid); tmpstep = EMU_STEP_MENU; break; case EMU_STEP_EXIT: player_exit(pid); tmpneedexit = 1; break; case EMU_STEP_START: player_start_play(pid); //SYS_set_tsync_enable(0);///< f no sound,can set to be 0 tmpstep = EMU_STEP_MENU; break; case EMU_STEP_GETAVMEDIAINFO: if(pid>=0){ if(player_get_state(pid) > PLAYER_INITOK) { ret = player_get_media_info(pid,&minfo); if(ret==0) _media_info_dump(&minfo); } } tmpstep = EMU_STEP_MENU; break; case EMU_STEP_MENU: do { printf(SCREEN_SPLITER); printf(" player benchmark tool for android v2.0\n"); printf(SCREEN_SPLITER); printf("* Please choose one option *\r\n"); printf("* 0 show main menu *\r\n"); printf("* a start play *\r\n"); printf("* s get media info *\r\n"); printf("* 1 Pause play *\r\n"); printf("* 2 Resume play *\r\n"); printf("* 3 Stop play *\r\n"); printf("* 4 Fastforward *\r\n"); printf("* 5 Fastrewind *\r\n"); printf("* 6 Seek *\r\n"); printf("* 7 Set repeat *\r\n"); printf("* 8 Quit tools *\r\n"); printf(SCREEN_SPLITER); printf("please input you choice:"); memset(tmpcommand,0,TMP_COMMAND_MAX); scanf ("%s",tmpcommand); if (strcmp(tmpcommand,"1")==0){ tmpstep = EMU_STEP_PAUSE; } if (strcmp(tmpcommand,"0")==0){ sleep(1); tmpstep = EMU_STEP_MENU; } else if (strcmp(tmpcommand,"2")==0){ tmpstep = EMU_STEP_RESUME; } else if (strcmp(tmpcommand,"3")==0){ tmpstep = EMU_STEP_STOP; } else if (strcmp(tmpcommand,"4")==0){ tmpstep = EMU_STEP_FF; } else if (strcmp(tmpcommand,"5")==0){ tmpstep = EMU_STEP_RR; } else if (strcmp(tmpcommand,"6")==0) { tmpstep = EMU_STEP_SEEK; } else if (strcmp(tmpcommand,"7")==0) { tmpstep = EMU_STEP_SETLOOP; } else if (strcmp(tmpcommand,"8")==0) { tmpstep = EMU_STEP_EXIT; } else if (strcmp(tmpcommand,"a")==0) { tmpstep = EMU_STEP_START; } else if (strcmp(tmpcommand,"s")==0){ tmpstep = EMU_STEP_GETAVMEDIAINFO; } }while (0); break; } usleep(100*1000); signal(SIGCHLD, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGHUP, signal_handler); signal(SIGTERM, signal_handler); signal(SIGSEGV, signal_handler); signal(SIGINT, signal_handler); signal(SIGQUIT, signal_handler); } set_display_axis(1); //recover osd free(pCtrl->file_name); free(pCtrl); printf("...........player exit,~,byeybe...........\n"); return 0; }