//--------------------------------------------------------------------------- void ofVideoPlayer::setPosition(float pct){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- TimeRecord tr; tr.base = GetMovieTimeBase(moviePtr); long total = GetMovieDuration(moviePtr ); long newPos = (long)((float)total * pct); SetMovieTimeValue(moviePtr, newPos); //-------------------------------------- #else //-------------------------------------- pct = CLAMP(pct, 0,1); positionPct = pct; // check between 0 and 1; //-------------------------------------- #endif //-------------------------------------- }
//--------------------------------------------------------------------------- void ofVideoPlayer::setPosition(float pct){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- TimeRecord tr; tr.base = GetMovieTimeBase(moviePtr); long total = GetMovieDuration(moviePtr ); long newPos = (long)((float)total * pct); SetMovieTimeValue(moviePtr, newPos); MoviesTask(moviePtr,0); //-------------------------------------- #else //-------------------------------------- gstUtils.setPosition(pct); //-------------------------------------- #endif //-------------------------------------- }
//-------------------------------------------------------- void ofQuickTimePlayer::setLoopState(ofLoopType state){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if( isLoaded() ){ TimeBase myTimeBase; long myFlags = 0L; myTimeBase = GetMovieTimeBase(moviePtr); myFlags = GetTimeBaseFlags(myTimeBase); switch (state) { case OF_LOOP_NORMAL: myFlags |= loopTimeBase; myFlags &= ~palindromeLoopTimeBase; SetMoviePlayHints(moviePtr, hintsLoop, hintsLoop); SetMoviePlayHints(moviePtr, 0L, hintsPalindrome); break; case OF_LOOP_PALINDROME: myFlags |= loopTimeBase; myFlags |= palindromeLoopTimeBase; SetMoviePlayHints(moviePtr, hintsLoop, hintsLoop); SetMoviePlayHints(moviePtr, hintsPalindrome, hintsPalindrome); break; case OF_LOOP_NONE: default: myFlags &= ~loopTimeBase; myFlags &= ~palindromeLoopTimeBase; SetMoviePlayHints(moviePtr, 0L, hintsLoop | hintsPalindrome); break; } SetTimeBaseFlags(myTimeBase, myFlags); } //-------------------------------------- #endif //-------------------------------------- //store the current loop state; currentLoopState = state; }
//-------------------------------------------------------- void ofVideoPlayer::setLoopState(int state){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- TimeBase myTimeBase; long myFlags = 0L; myTimeBase = GetMovieTimeBase(moviePtr); myFlags = GetTimeBaseFlags(myTimeBase); switch (state) { case OF_LOOP_NORMAL: myFlags |= loopTimeBase; myFlags &= ~palindromeLoopTimeBase; SetMoviePlayHints(moviePtr, hintsLoop, hintsLoop); SetMoviePlayHints(moviePtr, 0L, hintsPalindrome); break; case OF_LOOP_PALINDROME: myFlags |= loopTimeBase; myFlags |= palindromeLoopTimeBase; SetMoviePlayHints(moviePtr, hintsLoop, hintsLoop); SetMoviePlayHints(moviePtr, hintsPalindrome, hintsPalindrome); break; case OF_LOOP_NONE: default: myFlags &= ~loopTimeBase; myFlags &= ~palindromeLoopTimeBase; SetMoviePlayHints(moviePtr, 0L, hintsLoop | hintsPalindrome); break; } SetTimeBaseFlags(myTimeBase, myFlags); //-------------------------------------- #else //-------------------------------------- loopMode = state; //-------------------------------------- #endif //-------------------------------------- }
OSErr QTInfo_GoToPosterFrame (Movie theMovie, MovieController theMC) { TimeRecord myTimeRecord; ComponentResult myErr = noErr; // stop the movie from playing myErr = MCDoAction(theMC, mcActionPlay, (void *)0L); if (myErr != noErr) goto bail; // set up a time record with the desired movie time, scale, and base myTimeRecord.value.hi = 0; myTimeRecord.value.lo = GetMoviePosterTime(theMovie); myTimeRecord.base = GetMovieTimeBase(theMovie); myTimeRecord.scale = GetMovieTimeScale(theMovie); myErr = MCDoAction(theMC, mcActionGoToTime, &myTimeRecord); bail: return((OSErr)myErr); }
//--------------------------------------------------------------------------- void ofQuickTimePlayer::setPosition(float pct){ if( !isLoaded() ){ ofLog(OF_LOG_ERROR, "ofQuickTimePlayer: movie not loaded!"); return; } //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- TimeRecord tr; tr.base = GetMovieTimeBase(moviePtr); long total = GetMovieDuration(moviePtr ); long newPos = (long)((float)total * pct); SetMovieTimeValue(moviePtr, newPos); MoviesTask(moviePtr,0); //-------------------------------------- #endif //-------------------------------------- }
void PlaySound_QuickTime(const char *cSoundFilename) { int err; Str255 pSoundFilename; /* file pathname in Pascal-string format */ FSSpec fsSoundFile; /* movie file location descriptor */ short resRefNum; /* open movie file reference */ if (!fQTInitialised) { pthread_mutex_init(&mutexQTAccess, NULL); ListCreate(&movielist); fQTInitialised = TRUE; } /* QuickTime is NOT reentrant in Mac OS (it is in MS Windows!) */ pthread_mutex_lock(&mutexQTAccess); EnterMovies(); /* can be called multiple times */ err = NativePathNameToFSSpec(cSoundFilename, &fsSoundFile, 0); if (err != 0) { outputf(_("PlaySound_QuickTime: error #%d, can't find %s.\n"), err, cSoundFilename); } else { /* open movie (WAV or whatever) file */ err = OpenMovieFile(&fsSoundFile, &resRefNum, fsRdPerm); if (err != 0) { outputf(_("PlaySound_QuickTime: error #%d opening %s.\n"), err, cSoundFilename); } else { /* create movie from movie file */ Movie *movie = (Movie *) malloc(sizeof(Movie)); err = NewMovieFromFile(movie, resRefNum, NULL, NULL, 0, NULL); CloseMovieFile(resRefNum); if (err != 0) { outputf(_("PlaySound_QuickTime: error #%d reading %s.\n"), err, cSoundFilename); } else { /* reset movie timebase */ TimeRecord t = { 0 }; t.base = GetMovieTimeBase(*movie); SetMovieTime(*movie, &t); /* add movie to list of running movies */ ListInsert(&movielist, movie); /* run movie */ StartMovie(*movie); } } } pthread_mutex_unlock(&mutexQTAccess); if (!fQTPlaying) { /* launch playing thread if necessary */ int err; pthread_t qtthread; fQTPlaying = TRUE; err = pthread_create(&qtthread, 0L, Thread_PlaySound_QuickTime, NULL); if (err == 0) pthread_detach(qtthread); else fQTPlaying = FALSE; } }