static void play_file_av(int filefd, int vfd, int afd) { unsigned char buf[BUFFY]; int count; audioSetMute(afd, 1); videoBlank(vfd, 1); if (audio && !black) { audioStop(afd); deviceClear(afd, -1); audioSetAVSync(afd, 0); audioSelectSource(afd, AUDIO_SOURCE_MEMORY); audioPlay(afd); videoBlank(vfd, 0); } else if (audio && black) { deviceClear(afd, vfd); videoBlank(vfd, 1); audioSetAVSync(afd, 0); audioSelectSource(afd, AUDIO_SOURCE_MEMORY); videoSelectSource(vfd, VIDEO_SOURCE_MEMORY); audioPlay(afd); videoPlay(vfd); } else { deviceClear(afd, vfd); audioSetAVSync(afd, 1); audioSelectSource(afd, AUDIO_SOURCE_MEMORY); videoSelectSource(vfd, VIDEO_SOURCE_MEMORY); audioPlay(afd); videoPlay(vfd); videoBlank(vfd, 0); } if (dolby) { audioSetVolume(afd, 0); volset = 0; } else { audioSetVolume(afd, 255); volset = 1; } #ifndef __stub_posix_fadvise posix_fadvise(filefd, 0, 0, POSIX_FADV_SEQUENTIAL); #endif while ((count = read(filefd,buf,BUFFY)) > 0) scan_file_av(vfd,afd,buf,count); }
void play_file_video(int filefd, int fd) { char buf[BUFFY]; int count; int written; struct pollfd pfd[NFD]; // int stopped = 0; pfd[0].fd = STDIN_FILENO; pfd[0].events = POLLIN; pfd[1].fd = fd; pfd[1].events = POLLOUT; videoSelectSource(fd,VIDEO_SOURCE_MEMORY); videoPlay(fd); count = read(filefd,buf,BUFFY); write(fd,buf,count); while ( (count = read(filefd,buf,BUFFY)) >= 0 ){ written = 0; while(written < count){ if (poll(pfd,NFD,1)){ if (pfd[1].revents & POLLOUT){ written += write(fd,buf+written, count-written); } if (pfd[0].revents & POLLIN){ int c = getchar(); switch(c){ case 'z': videoFreeze(fd); printf("playback frozen\n"); // stopped = 1; break; case 's': videoStop(fd); printf("playback stopped\n"); // stopped = 1; break; case 'c': videoContinue(fd); printf("playback continued\n"); // stopped = 0; break; case 'p': videoPlay(fd); printf("playback started\n"); // stopped = 0; break; case 'f': videoFastForward(fd,0); printf("fastforward\n"); // stopped = 0; break; case 'm': videoSlowMotion(fd,2); printf("slowmotion\n"); // stopped = 0; break; case 'q': videoContinue(fd); exit(0); break; } } } } } }