//--------------------------------------------------------------------------- void ofVideoPlayer::closeMovie(){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (bLoaded == true){ DisposeMovie (moviePtr); #ifdef TARGET_WIN32 DisposeMovieDrawingCompleteUPP (myDrawCompleteProc); #endif moviePtr = NULL; } //-------------------------------------- #else //-------------------------------------- fobsDecoder->close(); //-------------------------------------- #endif //-------------------------------------- bLoaded = false; }
//--------------------------------------------------------------------------- void ofVideoPlayer::closeMovie(){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (bLoaded == true){ DisposeMovie (moviePtr); DisposeMovieDrawingCompleteUPP(myDrawCompleteProc); moviePtr = NULL; } //-------------------------------------- #else //-------------------------------------- gstUtils.close(); //-------------------------------------- #endif //-------------------------------------- bLoaded = false; }
//--------------------------------------------------------------------------- void ofQuickTimePlayer::closeMovie(){ //-------------------------------------- #ifdef OF_VIDEO_PLAYER_QUICKTIME //-------------------------------------- if (bLoaded == true){ DisposeMovie (moviePtr); DisposeMovieDrawingCompleteUPP(myDrawCompleteProc); moviePtr = NULL; width = height = 0; } //-------------------------------------- #endif //-------------------------------------- clearMemory(); bLoaded = false; }
int stQuicktimeDestroy(int sqHandle) { QuickTimeBitMapForSqueak *myBM; /* see if the handle really describes a MyBitmap surface */ if( ! (*findSurface)(sqHandle, &QuicktimeTargetDispatch, (int*) (&myBM)) ) { /* i don't know what it is but certainly not MyBitmap */ return interpreterProxy->primitiveFail(); } /* unregister and destroy */ (*unregisterSurface)(sqHandle); if (myBM->semaIndex && !((myBM->movie == nil) || (*myBM->movie == 0xFFFFFFFFU))) { DisposeMovieDrawingCompleteUPP(myBM->myDrawCompleteProc); SetMovieDrawingCompleteProc (myBM->movie,0,0,0); } myBM->semaIndex = 0; free(myBM); return 1; }
void DoKillMovie() { if (mMovieController && mMovie) { OSErr err = noErr; /* stop movie */ MCDoAction(mMovieController, mcActionPlay, (void*)Long2Fix(0)); #ifdef __APPLE_CC__ err = QTUninstallNextTaskNeededSoonerCallback(mTaskNeededSoonerCallback,mMovieTimerState.theEventTimer); #else err = mQTUninstallNextTaskPtr(mTaskNeededSoonerCallback,mMovieTimerState.theEventTimer); #endif RemoveEventLoopTimer(mMovieTimerState.theEventTimer); /* remove draw complete proc. */ SetMovieDrawingCompleteProc(mMovie, movieDrawingCallWhenChanged, nil, NULL); DisposeMovieDrawingCompleteUPP(mMyDrawCompleteProc); DisposeMungData(); DisposeMovieController(mMovieController); DisposeMovie(mMovie); DisposeEventLoopTimerUPP(mEventLoopTimer); #ifdef __APPLE_CC__ DisposeQTNextTaskNeededSoonerCallbackUPP(mTaskNeededSoonerCallback); #else mDisposeQTNextTaskPtr(mTaskNeededSoonerCallback); #endif mMovieController = nil; mMovie = nil; } }
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) { if (nlhs < 0) { mexErrMsgTxt("Too few output arguments."); return; } if (nlhs > 1) { mexErrMsgTxt("Too many output arguments."); return; } if (nrhs < 1) { mexErrMsgTxt("Too few input arguments."); return; } if (nrhs > 3) { mexErrMsgTxt("Too many input arguments."); return; } TimeValue duration; TimeRecord myTimeRecord; Rect bounds; OSErr result = 0; short resRefNum = -1; short actualResId = DoTheRightThing; FSSpec theFSSpec; GWorldPtr offWorld; Movie theMovie = nil; MovieController thePlayer = nil; MovieDrawingCompleteUPP myDrawCompleteProc; long frame_end; long myStep = 1; char location[PATH_BUFFER_SIZE]; long frame_count; mwSize cdims[2]; mxGetString(prhs[0], location, PATH_BUFFER_SIZE); if (nrhs > 2) { frame_start = rint(mxGetScalar(prhs[1])); frame_end = rint(mxGetScalar(prhs[2])); } else if (nrhs > 1) { frame_start = 1; frame_end = rint(mxGetScalar(prhs[1])); } else { frame_start = 1; frame_end = 0; } if (frame_start < 1) { mexErrMsgTxt("Error: the starting frame must be positive\n"); return; } if (frame_end < 0) { mexErrMsgTxt("Error: the ending frame must be positive\n"); return; } if (frame_end != 0 && frame_end < frame_start) { mexErrMsgTxt("Error: the ending frame must not be less than the starting frame\n"); return; } myDrawCompleteProc = NewMovieDrawingCompleteUPP(DrawCompleteProc); EnterMovies(); if (NativePathNameToFSSpec(location, &theFSSpec, 0) || OpenMovieFile(&theFSSpec, &resRefNum, 0) || NewMovieFromFile(&theMovie, resRefNum, &actualResId, 0, 0, 0)) { mexErrMsgTxt("Error: failed to open movie\n"); return; } if (resRefNum != -1) CloseMovieFile(resRefNum); GetMovieBox(theMovie, &bounds); QTNewGWorld(&offWorld, k32ARGBPixelFormat, &bounds, NULL, NULL, 0); LockPixels(GetGWorldPixMap(offWorld)); SetGWorld(offWorld, NULL); thePlayer = NewMovieController(theMovie, &bounds, mcTopLeftMovie | mcNotVisible); SetMovieGWorld(theMovie, offWorld, NULL); SetMovieActive(theMovie, true); SetMovieDrawingCompleteProc(theMovie, movieDrawingCallWhenChanged, myDrawCompleteProc, (long) offWorld); GetMovieTime(theMovie, &myTimeRecord); duration = GetMovieDuration(theMovie); // Compute the number of frames for allocation of output structure frame_count = 0; while ((frame_end == 0 || frame_count < frame_end) && GetMovieTime(theMovie, NULL) < duration) { frame_count++; MCDoAction(thePlayer, mcActionStep, (Ptr) myStep); } SetMovieTime(theMovie, &myTimeRecord); // Ignore frames greater than those in the file if (frame_end == 0 || frame_count < frame_end) frame_end = frame_count; cdims[0] = frame_end - frame_start + 1; // Indices are one-based cdims[1] = 1; plhs[0] = mxCreateCellArray(2, cdims); // Step through the movie and save the frame when in the chosen interval // Note: the step size seems to be handled as a short internally. // Using anything greater than 32758 will seek to an incorrect frame frame_num = 1; while (frame_num <= frame_end) { MCDoAction(thePlayer, mcActionStep, (Ptr) myStep); if (frame_num >= frame_start) { MCIdle(thePlayer); mxSetCell(plhs[0], frame_num - frame_start, framedata); } frame_num++; } UnlockPixels(GetGWorldPixMap (offWorld)); DisposeGWorld(offWorld); DisposeMovieController (thePlayer); DisposeMovie(theMovie); DisposeMovieDrawingCompleteUPP(myDrawCompleteProc); ExitMovies(); return; }