- Timestamp:
- 03/21/12 18:36:20 (14 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgPlugins/quicktime/MovieData.cpp
r12910 r13041 17 17 18 18 19 19 20 20 MovieData::MovieData() : _pointer(NULL), _movie(NULL), _gw(NULL), _fError(false), _isLooping(false) 21 21 { … … 25 25 26 26 MovieData::~MovieData() 27 { 27 { 28 28 if (_pointer) free(_pointer); 29 29 if (_gw) DisposeGWorld(_gw); … … 33 33 } 34 34 } 35 36 37 38 35 36 37 38 39 39 void MovieData::load(osg::Image* image, std::string afilename, double startTime) 40 40 { 41 41 bool isUrl( osgDB::containsServerAddress(afilename) ); 42 42 43 43 std::string filename = afilename; 44 44 if (!isUrl) { 45 if (!osgDB::isFileNameNativeStyle(filename)) 45 if (!osgDB::isFileNameNativeStyle(filename)) 46 46 filename = osgDB::convertFileNameToNativeStyle(filename); 47 47 } 48 48 49 49 image->setFileName(filename); 50 50 51 51 52 52 QTNewMoviePropertyElement newMovieProperties[2]; … … 56 56 57 57 newMovieProperties[0].propClass = kQTPropertyClass_DataLocation; 58 if (!isUrl) 58 if (!isUrl) 59 59 { 60 60 #ifdef __APPLE__ … … 63 63 newMovieProperties[0].propID = kQTDataLocationPropertyID_CFStringWindowsPath; 64 64 #endif 65 65 66 66 newMovieProperties[0].propValueSize = sizeof(CFStringRef); 67 67 newMovieProperties[0].propValueAddress = &movieLocation; 68 } 69 else 68 } 69 else 70 70 { 71 71 movieURL = CFURLCreateWithString(kCFAllocatorDefault, movieLocation, NULL); 72 72 73 73 newMovieProperties[0].propID = kQTDataLocationPropertyID_CFURL; 74 74 newMovieProperties[0].propValueSize = sizeof(movieURL); … … 81 81 newMovieProperties[1].propValueSize = sizeof(trueValue); 82 82 newMovieProperties[1].propValueAddress = &trueValue; 83 83 84 84 // Instantiate the Movie 85 85 OSStatus status = NewMovieFromProperties(2, newMovieProperties, 0, NULL, &_movie); 86 86 CFRelease(movieLocation); 87 87 if (movieURL) CFRelease(movieURL); 88 88 89 89 if (status !=0) { 90 90 _fError = true; … … 92 92 return; 93 93 } 94 95 94 95 96 96 Rect bounds; 97 97 98 98 #ifdef __APPLE__ 99 99 GetRegionBounds(GetMovieBoundsRgn(_movie), &bounds); … … 110 110 _movieWidth = bounds.right; 111 111 _movieHeight = bounds.bottom; 112 112 113 113 _timescale = GetMovieTimeScale(_movie); 114 114 … … 116 116 if (!_fError) _initGWorldStuff(image); 117 117 118 118 119 119 if (!_fError) { 120 120 121 121 if ( startTime == 0.0) 122 122 GoToBeginningOfMovie(_movie); … … 125 125 SetMovieTimeValue(_movie,t); 126 126 } 127 127 128 128 UpdateMovie(_movie); 129 129 SetMovieRate(_movie,0.0); … … 144 144 145 145 void* buffer; 146 146 147 147 148 148 _textureWidth = ((_movieWidth + 7) >> 3) << 3; 149 149 _textureHeight = _movieHeight; 150 151 // some magic alignment... 150 151 // some magic alignment... 152 152 _pointer = (char*)malloc(4 * _textureWidth * _textureHeight + 32); 153 153 … … 189 189 textureBounds.bottom = image->t(); 190 190 err = QTNewGWorldFromPtr(&_gw, k32ARGBPixelFormat, &textureBounds, NULL, NULL, 0, image->data(), 4 * image->s()); 191 191 192 192 if (err !=0 ) 193 193 { … … 198 198 SetGWorld(_gw, NULL); // set current graphics port to offscreen 199 199 SetMovieGWorld(_movie, (CGrafPtr)_gw, NULL); 200 200 201 201 _checkMovieError("SetMovieGWorld failed"); 202 202 … … 222 222 void MovieData::setMovieTime(double atime) { 223 223 double time = (atime > getMovieDuration()) ? getMovieDuration() : atime; 224 224 225 225 TimeValue t = (TimeValue) (time * _timescale); 226 226 SetMovieTimeValue(_movie,t); … … 228 228 UpdateMovie(_movie); 229 229 MoviesTask(_movie,0); 230 231 230 231 232 232 } 233 233 … … 240 240 _preRolled = true; 241 241 } 242 243 SetMovieRate(_movie, X2Fix(rate)); 242 243 SetMovieRate(_movie, X2Fix(rate)); 244 244 _checkMovieError("setMovieRate failed"); 245 245 MoviesTask(_movie, 0); 246 246 _checkMovieError("MoviesTask failed"); 247 247 248 248 UpdateMovie(_movie); 249 249 _checkMovieError("UpdateMovie failed");
