Changeset 69
- Timestamp:
- 08/22/06 22:26:00 (2 years ago)
- Files:
-
- trunk/FFusionCodec.c (modified) (4 diffs)
- trunk/FFusionCodec.h (modified) (1 diff)
- trunk/FFusionCodec.r (modified) (7 diffs)
- trunk/PerianAviImporter.r (modified) (8 diffs)
- trunk/ff_MovieImport.c (modified) (7 diffs)
- trunk/ff_MovieImportVersion.h (modified) (1 diff)
- trunk/ff_private.c (modified) (3 diffs)
- trunk/ff_private.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/FFusionCodec.c
r66 r69 119 119 void ChangeHintText(int value, ControlRef staticTextField); 120 120 121 extern void initLib(); 122 121 123 //--------------------------------------------------------------------------- 122 124 // Component Dispatcher … … 398 400 if (!glob->avCodec) 399 401 { 400 avcodec_init(); 401 register_avcodec(&msmpeg4v1_decoder); 402 register_avcodec(&msmpeg4v2_decoder); 403 register_avcodec(&msmpeg4v3_decoder); 404 register_avcodec(&mpeg4_decoder); 405 register_avcodec(&h264_decoder); 406 av_log_set_callback(FFMpegCodecprintf); 402 initLib(); 407 403 408 404 switch (glob->componentType) … … 474 470 case 'VSSH': 475 471 glob->avCodec = avcodec_find_decoder(CODEC_ID_H264); 472 break; 473 case 'FLV1': 474 glob->avCodec = avcodec_find_decoder(CODEC_ID_FLV1); 476 475 break; 477 476 default: … … 1151 1150 break; 1152 1151 1152 case 'FLV1': 1153 err = GetComponentResource((Component)glob->self, codecInfoResourceType, kFLV1CodecInfoResID, (Handle *)&tempCodecInfo); 1154 break; 1155 1153 1156 default: // should never happen but we have to handle the case 1154 1157 err = GetComponentResource((Component)glob->self, codecInfoResourceType, kDivX4CodecInfoResID, (Handle *)&tempCodecInfo); trunk/FFusionCodec.h
r56 r69 36 36 #define kDivX4CodecInfoResID 259 37 37 #define kDivX5CodecInfoResID 260 38 #define k3ivxCodecInfoResID 261 39 #define kXVIDCodecInfoResID 262 40 #define kMPEG4CodecInfoResID 263 41 #define kH264CodecInfoResID 264 38 #define k3ivxCodecInfoResID 261 39 #define kXVIDCodecInfoResID 262 40 #define kMPEG4CodecInfoResID 263 41 #define kH264CodecInfoResID 264 42 #define kFLV1CodecInfoResID 265 42 43 43 44 #define kFFusionCodecManufacturer 'SNE2' trunk/FFusionCodec.r
r56 r69 53 53 #define kMPEG4Name "MPEG-4 Video" 54 54 #define kH264Name "H.264" 55 #define kFLV1Name "Sorenson H.263" 55 56 56 57 // Codec names Resource ID … … 65 66 #define kMPEG4NameResID 263 66 67 #define kH264NameResID 264 68 #define kFLV1NameResID 265 67 69 68 70 // Codec infos Resource ID … … 77 79 #define kMPEG4InfoResID 292 78 80 #define kH264InfoResID 293 81 #define kFLV1InfoResID 294 79 82 80 83 // These flags specify information about the capabilities of the component … … 315 318 316 319 //--------------------------------------------------------------------------- 320 // Flash Video Description Resources 321 //--------------------------------------------------------------------------- 322 323 resource 'cdci' (kFLV1CodecInfoResID) { 324 kFLV1Name, // Type 325 1, // Version 326 1, // Revision level 327 kFFusionCodecManufacturer, // Manufacturer 328 kFFusionDecompressionFlags, // Decompression Flags 329 0, // Compression Flags 330 kFFusionFormatFlags, // Format Flags 331 128, // Compression Accuracy 332 128, // Decomression Accuracy 333 200, // Compression Speed 334 200, // Decompression Speed 335 128, // Compression Level 336 0, // Reserved 337 1, // Minimum Height 338 1, // Minimum Width 339 0, // Decompression Pipeline Latency 340 0, // Compression Pipeline Latency 341 0 // Private Data 342 }; 343 344 //--------------------------------------------------------------------------- 317 345 // MS-MPEG4 v1 Component 318 346 //--------------------------------------------------------------------------- … … 1967 1995 }; 1968 1996 1997 resource 'thng' (310) { 1998 decompressorComponentType, // Type 1999 'FLV1', // SubType 2000 kFFusionCodecManufacturer, // Manufacturer 2001 0, // - use componentHasMultiplePlatforms 2002 0, 2003 0, 2004 0, 2005 'STR ', // Name Type 2006 kFLV1NameResID, // Name ID 2007 'STR ', // Info Type 2008 kFLV1InfoResID, // Info ID 2009 0, // Icon Type 2010 0, // Icon ID 2011 kFFusionCodecVersion, // Version 2012 componentHasMultiplePlatforms + // Registration Flags 2013 componentDoAutoVersion, // Registration Flags 2014 0, // Resource ID of Icon Family 2015 { 2016 kFFusionDecompressionFlags, 2017 'dlle', // Entry point found by symbol name 'dlle' resource 2018 256, // ID of 'dlle' resource 2019 platformPowerPCNativeEntryPoint, 2020 kFFusionDecompressionFlags, 2021 'dlle', 2022 256, 2023 platformIA32NativeEntryPoint, 2024 }; 2025 }; 2026 1969 2027 //--------------------------------------------------------------------------- 1970 2028 // Component Name Resources … … 2007 2065 }; 2008 2066 2067 resource 'STR ' (kFLV1NameResID) { 2068 "Sorenson H.263 Decoder" 2069 }; 2070 2009 2071 //--------------------------------------------------------------------------- 2010 2072 // Component Name Resources … … 2047 2109 }; 2048 2110 2111 resource 'STR ' (kFLV1InfoResID) { 2112 "Decompresses video stored in Sorenson H.263 format." 2113 }; 2114 2049 2115 //--------------------------------------------------------------------------- 2050 2116 // Code Entry Point for Mach-O trunk/PerianAviImporter.r
r60 r69 38 38 | cmpThreadSafe ) 39 39 40 41 /* Component Manager Things: 42 * The Component Manager alias doesn't seem to work so we have 43 * More than one thing 44 */ 45 resource 'thng' (512) { 40 /* Component Manager Things - 41 AVI */ 42 resource 'thng' (kAVIthngResID) { 46 43 'eat ', // Type 47 44 'VfW ', // SubType … … 52 49 0, 53 50 'STR ', // Name Type 54 512, // Name ID51 kAVIthngResID, // Name ID 55 52 0, // Info Type 56 53 0, // Info ID … … 71 68 platformPowerPCNativeEntryPoint, // PowerPC 72 69 }, 73 'thnr', 51270 'thnr', kAVIthngResID 74 71 }; 75 72 … … 83 80 0, 84 81 'STR ', // Name Type 85 512, // Name ID82 kAVIthngResID, // Name ID 86 83 0, // Info Type 87 84 0, // Info ID … … 94 91 0, // Component Flags 95 92 0, // Component Flags Mask 96 'thnr', 512, // Component public resource identifier93 'thnr', kAVIthngResID, // Component public resource identifier 97 94 cmpAliasOnlyThisFile 98 95 }; … … 107 104 0, 108 105 'STR ', // Name Type 109 512, // Name ID106 kAVIthngResID, // Name ID 110 107 0, // Info Type 111 108 0, // Info ID … … 118 115 0, // Component Flags 119 116 0, // Component Flags Mask 120 'thnr', 512, // Component public resource identifier117 'thnr', kAVIthngResID, // Component public resource identifier 121 118 cmpAliasOnlyThisFile 122 119 }; 123 120 124 125 121 /* Perhaps in a later version, we have to use "QuickTime Media Configuration Resources" */ 126 resource 'thnr' ( 512) {122 resource 'thnr' (kAVIthngResID) { 127 123 { 128 124 'mime', 1, 0, 129 'mime', 512, 0,125 'mime', kAVIthngResID, 0, 130 126 } 131 127 }; 132 128 133 resource 'mime' ( 512) {129 resource 'mime' (kAVIthngResID) { 134 130 { 135 131 kMimeInfoMimeTypeTag, 1, "video/x-msvideo"; … … 145 141 }; 146 142 147 resource 'STR ' ( 512) {143 resource 'STR ' (kAVIthngResID) { 148 144 "FFAvi Movie Importer" 145 }; 146 147 148 /* Component Manager Things - 149 FLV */ 150 resource 'thng' (kFLVthngResID) { 151 'eat ', // Type 152 'FLV ', // SubType 153 'vide', // Manufacturer 154 0, 155 0, 156 0, 157 0, 158 'STR ', // Name Type 159 kFLVthngResID, // Name ID 160 0, // Info Type 161 0, // Info ID 162 0, // Icon Type 163 0, // Icon ID 164 kFFAviComponentVersion, // Version 165 componentHasMultiplePlatforms + 166 componentDoAutoVersion, // Registratin Flags 167 0, // Resource ID of Icon Family 168 { 169 kFFAvi_MovieImportFlags | movieImportSubTypeIsFileExtension, 170 'dlle', // Code Resource type 171 512, 172 platformIA32NativeEntryPoint, // IA32 173 kFFAvi_MovieImportFlags | movieImportSubTypeIsFileExtension, 174 'dlle', 175 512, 176 platformPowerPCNativeEntryPoint, // PowerPC 177 }, 178 'thnr', kFLVthngResID 179 }; 180 181 resource 'thnr' (kFLVthngResID) { 182 { 183 'mime', 1, 0, 184 'mime', kFLVthngResID, 0, 185 } 186 }; 187 188 resource 'mime' (kFLVthngResID) { 189 { 190 kMimeInfoMimeTypeTag, 1, "video/x-flv"; 191 kMimeInfoFileExtensionTag, 1, "flv"; 192 kMimeInfoDescriptionTag, 1, "Flash Video"; 193 }; 194 }; 195 196 resource 'STR ' (kFLVthngResID) { 197 "Flash Video Importer" 149 198 }; 150 199 trunk/ff_MovieImport.c
r67 r69 44 44 struct _ff_global_context { 45 45 ComponentInstance ci; 46 OSType componentType; 46 47 47 48 /* For feedback during import */ … … 75 76 inited = TRUE; 76 77 av_register_input_format(&avi_demuxer); 78 av_register_input_format(&flv_demuxer); 77 79 register_parsers(); 80 81 avcodec_init(); 82 register_avcodec(&msmpeg4v1_decoder); 83 register_avcodec(&msmpeg4v2_decoder); 84 register_avcodec(&msmpeg4v3_decoder); 85 register_avcodec(&mpeg4_decoder); 86 register_avcodec(&h264_decoder); 87 register_avcodec(&flv_decoder); 88 78 89 av_log_set_callback(FFMpegCodecprintf); 79 90 } … … 87 98 { 88 99 ComponentResult result; 100 ComponentDescription descout; 89 101 90 102 /* Check for Mac OS 10.4 & QT 7 */ … … 92 104 require_noerr(result,bail); 93 105 106 GetComponentInfo((Component)self, &descout, 0, 0, 0); 107 94 108 storage = malloc(sizeof(ff_global_context)); 95 109 if(!storage) goto bail; … … 100 114 SetComponentInstanceStorage(storage->ci, (Handle)storage); 101 115 116 storage->componentType = descout.componentSubType; 102 117 bail: 103 118 return result; … … 131 146 ComponentResult FFAvi_MovieImportGetMIMETypeList(ff_global_ptr storage, QTAtomContainer *mimeInfo) 132 147 { 133 return GetComponentResource((Component)storage->ci, 'mime', 512, (Handle*)mimeInfo); 148 ComponentResult err = noErr; 149 switch (storage->componentType) { 150 case 'VfW ': 151 case 'VFW ': 152 case 'AVI ': 153 err = GetComponentResource((Component)storage->ci, 'mime', kAVIthngResID, (Handle*)mimeInfo); 154 break; 155 case 'FLV ': 156 err = GetComponentResource((Component)storage->ci, 'mime', kFLVthngResID, (Handle*)mimeInfo); 157 break; 158 default: 159 err = GetComponentResource((Component)storage->ci, 'mime', kAVIthngResID, (Handle*)mimeInfo); 160 break; 161 } 162 return err; 134 163 } /* FFAvi_MovieImportGetMIMETypeList() */ 135 164 … … 328 357 if(ic->streams[0]->index_entries == NULL) 329 358 { 330 //Try to seek to the first frame; don't care if it fails 331 av_seek_frame(ic, -1, 0, 0); 359 if (storage->componentType == 'AVI ' || storage->componentType == 'VfW ' || storage->componentType == 'VFW ') 360 //Try to seek to the first frame; don't care if it fails 361 // Is this really needed for AVIs w/out an index? It seems to work fine without, 362 // and it seems that with it the first frame is skipped. 363 av_seek_frame(ic, -1, 0, 0); 332 364 dataOffset = 0; 333 365 } trunk/ff_MovieImportVersion.h
r20 r69 28 28 #define kChristophManufacturer 'Rafz' 29 29 30 #define kAVIthngResID 512 31 #define kFLVthngResID 515 32 30 33 #endif trunk/ff_private.c
r68 r69 142 142 imgHdl = (ImageDescriptionHandle)NewHandleClear(sizeof(ImageDescription)); 143 143 (*imgHdl)->idSize = sizeof(ImageDescription); 144 Codecprintf(NULL, "fourcc: %c%c%c%c\n",0xff & (codec->codec_tag),0xff & (codec->codec_tag)>>8,0xff & (codec->codec_tag)>>16,0xff & (codec->codec_tag)>>24); 145 (*imgHdl)->cType = BSWAP(codec->codec_tag); 144 145 if (codec->codec_tag) 146 (*imgHdl)->cType = BSWAP(codec->codec_tag); 147 else 148 // need to lookup the fourcc from the codec_id 149 (*imgHdl)->cType = map_video_codec_to_mov_tag(codec->codec_id); 150 Codecprintf(NULL, "fourcc: %c%c%c%c\n",0xff & (*imgHdl)->cType,0xff & (*imgHdl)->cType>>8,0xff & (*imgHdl)->cType>>16,0xff & (*imgHdl)->cType>>24); 151 146 152 (*imgHdl)->temporalQuality = codecMaxQuality; 147 153 (*imgHdl)->spatialQuality = codecMaxQuality; … … 195 201 asbd.mBitsPerChannel = codec->bits_per_sample; 196 202 203 // this probably isn't quite right; FLV doesn't set frame_size or block_align, 204 // but we need > 0 frames per packet or Apple's mp3 decoder won't work 205 if (asbd.mBytesPerPacket == 0 && asbd.mFramesPerPacket == 0) 206 asbd.mFramesPerPacket = 1; 207 197 208 /* ask the toolbox about more information */ 198 209 ioSize = sizeof(AudioStreamBasicDescription); … … 239 250 map->asbd = asbd; 240 251 } /* initialize_audio_map() */ 252 253 OSType map_video_codec_to_mov_tag(enum CodecID codec_id) 254 { 255 switch(codec_id) { 256 case CODEC_ID_FLV1: 257 return 'FLV1'; 258 } 259 return 0; 260 } 241 261 242 262 /* maps the codec_id tag of libavformat to a constant the AudioToolbox can work with */ trunk/ff_private.h
r68 r69 58 58 void import_avi(AVFormatContext *ic, NCStream *map, int64_t aviheader_offset); 59 59 60 OSType map_video_codec_to_mov_tag(enum CodecID codec_id); 60 61 void map_avi_to_mov_tag(enum CodecID codec_id, AudioStreamBasicDescription *asbd); 61 62 uint8_t *create_cookie(AVCodecContext *codec, int *cookieSize, UInt32 formatID);
