//-------------------------------------------------------- void ofQuickTimePlayer::play(){ if( !isLoaded() ){ ofLog(OF_LOG_ERROR, "ofQuickTimePlayer::play - movie not loaded!"); return; } bPlaying = true; bPaused = false; //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (!bStarted){ start(); }else { // ------------ lower level "startMovie" // ------------ use desired speed & time (-1,1,etc) to Preroll... TimeValue timeNow; timeNow = GetMovieTime(moviePtr, nil); PrerollMovie(moviePtr, timeNow, X2Fix(speed)); SetMovieRate(moviePtr, X2Fix(speed)); MoviesTask(moviePtr, 0); } //-------------------------------------- #endif //-------------------------------------- //this is if we set the speed first but it only can be set when we are playing. setSpeed(speed); }
//-------------------------------------------------------- void ofQuickTimePlayer::start(){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (bLoaded == true && bStarted == false){ SetMovieActive(moviePtr, true); //------------------ set the movie rate to default //------------------ and preroll, so the first frames come correct TimeValue timeNow = GetMovieTime(moviePtr, 0); Fixed playRate = GetMoviePreferredRate(moviePtr); //Not being used! PrerollMovie(moviePtr, timeNow, X2Fix(speed)); SetMovieRate(moviePtr, X2Fix(speed)); setLoopState(currentLoopState); // get some pixels in there right away: MoviesTask(moviePtr,0); #if defined(TARGET_OSX) && defined(__BIG_ENDIAN__) convertPixels(offscreenGWorldPixels, pixels.getPixels(), width, height); #endif bHavePixelsChanged = true; bStarted = true; bPlaying = true; } //-------------------------------------- #endif //-------------------------------------- }
//-------------------------------------------------------- void ofVideoPlayer::play(){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (!bStarted){ start(); }else { // ------------ lower level "startMovie" // ------------ use desired speed & time (-1,1,etc) to Preroll... bPlaying = true; TimeValue timeNow; timeNow = GetMovieTime(moviePtr, nil); PrerollMovie(moviePtr, timeNow, X2Fix(speed)); SetMovieRate(moviePtr, X2Fix(speed)); MoviesTask(moviePtr, 0); } //-------------------------------------- #endif //-------------------------------------- }
//-------------------------------------------------------- void ofVideoPlayer::start(){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (bLoaded == true && bStarted == false){ SetMovieActive(moviePtr, true); //------------------ set the movie rate to default //------------------ and preroll, so the first frames come correct TimeValue timeNow = GetMovieTime(moviePtr, 0); Fixed playRate = GetMoviePreferredRate(moviePtr); //Not being used! PrerollMovie(moviePtr, timeNow, X2Fix(speed)); SetMovieRate(moviePtr, X2Fix(speed)); setLoopState(OF_LOOP_NORMAL); // get some pixels in there right away: MoviesTask(moviePtr,0); convertPixels(offscreenGWorldPixels, pixels, width, height); bHavePixelsChanged = true; if (bUseTexture == true){ tex.loadData(pixels, width, height, GL_RGB); } bStarted = true; bPlaying = true; } //-------------------------------------- #endif //-------------------------------------- }
static HRESULT QT_Process_Movie(QTSplitter* filter) { HRESULT hr = S_OK; OSErr err; WineDataRefRecord ptrDataRefRec; Handle dataRef = NULL; Track trk; short id = 0; DWORD tid; LONGLONG time; TRACE("Trying movie connect\n"); ptrDataRefRec.pReader = filter->pInputPin.pReader; ptrDataRefRec.streamSubtype = filter->pInputPin.subType; PtrToHand( &ptrDataRefRec, &dataRef, sizeof(WineDataRefRecord)); err = NewMovieFromDataRef(&filter->pQTMovie, newMovieActive|newMovieDontInteractWithUser|newMovieDontAutoUpdateClock|newMovieDontAskUnresolvedDataRefs|newMovieAsyncOK, &id, dataRef, 'WINE'); DisposeHandle(dataRef); if (err != noErr) { FIXME("QuickTime cannot handle media type(%i)\n",err); return VFW_E_TYPE_NOT_ACCEPTED; } PrePrerollMovie(filter->pQTMovie, 0, fixed1, NULL, NULL); PrerollMovie(filter->pQTMovie, 0, fixed1); GoToBeginningOfMovie(filter->pQTMovie); SetMovieActive(filter->pQTMovie,TRUE); if (GetMovieLoadState(filter->pQTMovie) < kMovieLoadStateLoaded) MoviesTask(filter->pQTMovie,100); trk = GetMovieIndTrackType(filter->pQTMovie, 1, VisualMediaCharacteristic, movieTrackCharacteristic | movieTrackEnabledOnly); TRACE("%p is a video track\n",trk); if (trk) hr = QT_Process_Video_Track(filter, trk); if (FAILED(hr)) return hr; trk = GetMovieIndTrackType(filter->pQTMovie, 1, AudioMediaCharacteristic, movieTrackCharacteristic | movieTrackEnabledOnly); TRACE("%p is a audio track\n",trk); if (trk) hr = QT_Process_Audio_Track(filter, trk); time = GetMovieDuration(filter->pQTMovie); filter->movie_scale = GetMovieTimeScale(filter->pQTMovie); filter->sourceSeeking.llDuration = ((double)time / filter->movie_scale) * 10000000; filter->sourceSeeking.llStop = filter->sourceSeeking.llDuration; TRACE("Movie duration is %s\n",wine_dbgstr_longlong(filter->sourceSeeking.llDuration)); filter->loaderThread = CreateThread(NULL, 0, QTSplitter_loading_thread, filter, 0, &tid); if (filter->loaderThread) TRACE("Created loading thread 0x%08x\n", tid); filter->splitterThread = CreateThread(NULL, 0, QTSplitter_thread, filter, 0, &tid); if (filter->splitterThread) TRACE("Created processing thread 0x%08x\n", tid); else hr = HRESULT_FROM_WIN32(GetLastError()); return hr; }
void MIDI_Play (const char *Name) { FILE *midiFile; char midiName[MAX_OSPATH], tempName[MAX_QPATH]; OSErr err; FSSpec midiSpec; FSRef midiRef; short midiRefNum; if (!bMidiInited) //don't try to play if there is no midi return; MIDI_Stop(); if (!Name || !*Name) { Sys_Printf("no midi music to play\n"); return; } q_snprintf (tempName, sizeof(tempName), "%s.%s", Name, "mid"); FS_OpenFile (va("%s/%s", "midi", tempName), &midiFile, false); if (!midiFile) { Con_Printf("music file %s not found\n", tempName); return; } else { if (file_from_pak) { int ret; Con_Printf("Extracting %s from pakfile\n", tempName); q_snprintf (midiName, sizeof(midiName), "%s/%s.%s", host_parms->userdir, TEMP_MUSICNAME, "mid"); ret = FS_CopyFromFile (midiFile, midiName, fs_filesize); fclose (midiFile); if (ret != 0) { Con_Printf("Error while extracting from pak\n"); return; } } else /* use the file directly */ { fclose (midiFile); q_snprintf (midiName, sizeof(midiName), "%s/%s/%s", fs_filepath, "midi", tempName); } } // converting path to FSSpec. found in CarbonCocoaIntegration.pdf: // page 27, Obtaining an FSSpec Structure err = FSPathMakeRef ((UInt8*)midiName, &midiRef, NULL); if (err != noErr) { Con_Printf ("MIDI: FSPathMakeRef: error while opening %s\n", midiName); return; } err = FSGetCatalogInfo (&midiRef, kFSCatInfoNone, NULL, NULL, &midiSpec, NULL); if (err != noErr) { Con_Printf ("MIDI: FSGetCatalogInfo: error while opening %s\n", midiName); return; } err = OpenMovieFile (&midiSpec, &midiRefNum, fsRdPerm); if (err != noErr) { Con_Printf ("MIDI: OpenMovieStream: error opening midi file\n"); return; } err = NewMovieFromFile (&midiTrack, midiRefNum, NULL, NULL, newMovieActive, NULL); if (err != noErr || !midiTrack) { Con_Printf ("MIDI: QuickTime error in creating stream.\n"); return; } GoToBeginningOfMovie (midiTrack); PrerollMovie (midiTrack, 0, 0); // pOx - set initial volume MIDI_SetVolume (&bgmvolume); StartMovie (midiTrack); Con_Printf ("Started midi music %s\n", tempName); }