Changeset 1237
- Timestamp:
- 12/16/09 18:53:22 (8 months ago)
- Location:
- branches/perian-1.2
- Files:
-
- 5 modified
-
. (modified) (1 prop)
-
CommonUtils.c (modified) (1 diff)
-
FFissionCodec/FFissionDecoder.cpp (modified) (6 diffs)
-
MatroskaImportPrivate.cpp (modified) (9 diffs)
-
Subtitles/SubImport.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/perian-1.2
-
branches/perian-1.2/CommonUtils.c
r1203 r1237 572 572 static CGColorSpaceRef sRGBColorSpace; 573 573 int unlock = PerianInitEnter(&loaded); 574 CFStringRef *srgb;575 574 576 575 if (!loaded) { 577 576 loaded = TRUE; 578 577 579 if ( (srgb = dlsym(RTLD_NEXT, "kCGColorSpaceSRGB"))) {580 sRGBColorSpace = CGColorSpaceCreateWithName( *srgb); // does not exist on 10.4578 if (kCGColorSpaceSRGB) { 579 sRGBColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); // does not exist on 10.4 581 580 } else { 582 581 sRGBColorSpace = CreateColorSpaceFromSystemICCProfileName(CFSTR("sRGB Profile.icc")); -
branches/perian-1.2/FFissionCodec/FFissionDecoder.cpp
r1152 r1237 129 129 int initialMap[6] = {0, 1, 2, 3, 4, 5}; 130 130 memcpy(fullChannelMap, initialMap, sizeof(initialMap)); 131 132 avcodec_get_context_defaults2(avContext, CODEC_TYPE_AUDIO); 131 133 } 132 134 … … 141 143 void FFissionDecoder::Initialize(const AudioStreamBasicDescription* inInputFormat, const AudioStreamBasicDescription* inOutputFormat, const void* inMagicCookie, UInt32 inMagicCookieByteSize) 142 144 { 143 if (inMagicCookie ByteSize > 0)145 if (inMagicCookie) 144 146 SetMagicCookie(inMagicCookie, inMagicCookieByteSize); 145 147 … … 181 183 182 184 CloseAVCodec(); 185 186 avContext->extradata_size = 0; 187 avContext->extradata = NULL; 183 188 } 184 189 … … 201 206 202 207 case kAudioFormatXiphVorbis: 203 avContext->extradata_size = ConvertXiphVorbisCookie(); 204 avContext->extradata = magicCookie; 208 if (!avContext->extradata) { 209 avContext->extradata_size = ConvertXiphVorbisCookie(); 210 avContext->extradata = magicCookie; 211 } 205 212 break; 206 213 … … 251 258 252 259 int len = headerSize[0] + headerSize[1] + headerSize[2]; 253 Byte *newCookie = new Byte[len + len/255 + 64 ];260 Byte *newCookie = new Byte[len + len/255 + 64 + FF_INPUT_BUFFER_PADDING_SIZE]; 254 261 ptr = newCookie; 255 262 … … 336 343 CodecID codecID = GetCodecID(mInputFormat.mFormatID); 337 344 avCodec = avcodec_find_decoder(codecID); 338 339 avcodec_get_context_defaults2(avContext, CODEC_TYPE_AUDIO);340 345 341 346 avContext->sample_rate = mInputFormat.mSampleRate; -
branches/perian-1.2/MatroskaImportPrivate.cpp
r1216 r1237 235 235 ComponentResult MatroskaImport::ReadTracks(KaxTracks &trackEntries) 236 236 { 237 Track firstVideoTrack = NULL; 238 Track firstAudioTrack = NULL; 239 Track firstSubtitleTrack = NULL; 237 Track firstVideoTrack = NULL; short firstVideoTrackLang = 0; 238 Track firstAudioTrack = NULL; short firstAudioTrackLang = 0; 239 Track firstSubtitleTrack = NULL; short firstSubtitleTrackLang = 0; 240 240 ComponentResult err = noErr; 241 bool foundAnEnabledTrack = false; 241 242 242 243 if (seenTracks) … … 262 263 mkvTrack.defaultDuration = uint32(defaultDuration) / float(timecodeScale) + .5; 263 264 265 KaxTrackLanguage & trackLang = GetChild<KaxTrackLanguage>(track); 266 KaxTrackName & trackName = GetChild<KaxTrackName>(track); 267 KaxContentEncodings * encodings = FindChild<KaxContentEncodings>(track); 268 269 short qtLang = ISO639_2ToQTLangCode(string(trackLang).c_str()); 270 SetMediaLanguage(mkvTrack.theMedia, qtLang); 271 264 272 switch (uint8(type)) { 265 273 case track_video: … … 268 276 if (err) return err; 269 277 270 if (firstVideoTrack )278 if (firstVideoTrack && qtLang != firstVideoTrackLang) 271 279 SetTrackAlternate(firstVideoTrack, mkvTrack.theTrack); 272 else 280 else { 273 281 firstVideoTrack = mkvTrack.theTrack; 282 firstVideoTrackLang = qtLang; 283 } 274 284 break; 275 285 … … 279 289 if (err) return err; 280 290 281 if (firstAudioTrack )291 if (firstAudioTrack && qtLang != firstAudioTrackLang) 282 292 SetTrackAlternate(firstAudioTrack, mkvTrack.theTrack); 283 else 293 else { 284 294 firstAudioTrack = mkvTrack.theTrack; 295 firstAudioTrackLang = qtLang; 296 } 285 297 break; 286 298 … … 291 303 if (mkvTrack.theTrack == NULL) continue; 292 304 293 if (firstSubtitleTrack )305 if (firstSubtitleTrack && qtLang != firstSubtitleTrackLang) 294 306 SetTrackAlternate(firstSubtitleTrack, mkvTrack.theTrack); 295 else 307 else { 296 308 firstSubtitleTrack = mkvTrack.theTrack; 309 firstSubtitleTrackLang = qtLang; 310 } 297 311 break; 298 312 … … 306 320 } 307 321 308 KaxTrackLanguage & trackLang = GetChild<KaxTrackLanguage>(track); 309 KaxTrackName & trackName = GetChild<KaxTrackName>(track); 310 KaxContentEncodings * encodings = FindChild<KaxContentEncodings>(track); 322 mkvTrack.isEnabled = uint8(enabled); 323 mkvTrack.usesLacing = uint8(lacing); 311 324 312 325 if (encodings) { … … 315 328 if (err) continue; 316 329 } 317 318 long qtLang = ISO639_2ToQTLangCode(string(trackLang).c_str());319 SetMediaLanguage(mkvTrack.theMedia, qtLang);320 321 mkvTrack.isEnabled = uint8(enabled);322 mkvTrack.usesLacing = uint8(lacing);323 330 324 331 if (!trackName.IsDefaultValue()) { … … 355 362 for (int i = 0; i < tracks.size(); i++) { 356 363 SetTrackEnabled(tracks[i].theTrack, tracks[i].isEnabled); 357 } 358 // ensure that at least one track in each alternate group (type) is enabled 364 if (tracks[i].isEnabled) 365 foundAnEnabledTrack = true; 366 } 359 367 // ffmpeg used to write a TrackDefault of 0 for all tracks 360 for (int i = 0; i < tracks.size(); i++) { 361 if (!GetTrackEnabled(tracks[i].theTrack)) { 362 Track alternate = GetTrackAlternate(tracks[i].theTrack); 363 while (alternate != tracks[i].theTrack && !GetTrackEnabled(alternate)) 364 alternate = GetTrackAlternate(alternate); 365 if (alternate == tracks[i].theTrack) 366 SetTrackEnabled(tracks[i].theTrack, 1); 367 } 368 } 368 // ensure that at least one track of each media type is enabled, if none were originally 369 // this picks the first track, which may not be the best, but the situation is quite rare anyway 370 if (!foundAnEnabledTrack) { 371 if (firstVideoTrack) 372 SetTrackEnabled(firstVideoTrack, 1); 373 if (firstAudioTrack) 374 SetTrackEnabled(firstAudioTrack, 1); 375 if (firstSubtitleTrack) 376 SetTrackEnabled(firstSubtitleTrack, 1); 377 } 378 369 379 seenTracks = true; 370 380 return noErr; … … 626 636 627 637 PtrAndHand(&emptyDataRefExtension[0], mkvTrack.subDataRefHandler, sizeof(emptyDataRefExtension)); 628 638 629 639 mkvTrack.theTrack = CreatePlaintextSubTrack(theMovie, imgDesc, GetMovieTimeScale(theMovie), mkvTrack.subDataRefHandler, HandleDataHandlerSubType, (*imgDesc)->cType, NULL, movieBox); 630 640 if (mkvTrack.theTrack == NULL) -
branches/perian-1.2/Subtitles/SubImport.mm
r1202 r1237 71 71 static void AppendSRGBProfile(ImageDescriptionHandle imgDesc) 72 72 { 73 if (!(*CGColorSpaceCopyICCProfile)) 74 return; //10.4 weak symbol check 75 73 76 CGColorSpaceRef cSpace = GetSRGBColorSpace(); 74 77 CFDataRef cSpaceICC = CGColorSpaceCopyICCProfile(cSpace);
