+2005-01-12 Richard Williamson <rjw@apple.com>
+
+ Fixed <rdar://problem/3926825> Safari ignores GIF loop count
+
+ Get loop count from file properties, not image properties.
+
+ Reviewed by Ken Kocienda.
+
+ * WebCoreSupport.subproj/WebImageData.h:
+ * WebCoreSupport.subproj/WebImageData.m:
+ (-[WebImageData _commonTermination]):
+ (-[WebImageData fileProperties]):
+ (-[WebImageData _floatProperty:type:at:]):
+ (-[WebImageData _floatFileProperty:type:]):
+ (-[WebImageData _repetitionCount]):
+
2005-01-11 Chris Blumenberg <cblu@apple.com>
Fixed: <rdar://problem/3934749> assertion failure in WebBaseNetscapePluginView loading movie
[self _invalidateImages];
[self _invalidateImageProperties];
+ if (fileProperties)
+ CFRelease (fileProperties);
+
if (imageSource)
CFRelease (imageSource);
return images[index];
}
+- (CFDictionaryRef)fileProperties
+{
+ if (!fileProperties) {
+ fileProperties = CGImageSourceCopyProperties (imageSource, 0);
+ }
+
+ return fileProperties;
+}
+
- (CFDictionaryRef)propertiesAtIndex:(size_t)index
{
size_t num = [self numberOfImages];
return 0.f;
}
- // FIXME: Use constant instead of DelayTime
CFNumberRef num = CFDictionaryGetValue (typeProperties, property);
if (!num) {
[decodeLock unlock];
return value;
}
+- (float)_floatFileProperty:(CFStringRef)property type:(CFStringRef)type
+{
+ [decodeLock lock];
+
+ CFDictionaryRef properties = [self fileProperties];
+ if (!properties) {
+ [decodeLock unlock];
+ return 0.f;
+ }
+
+ if (type) {
+ properties = CFDictionaryGetValue (properties, type);
+ if (!properties) {
+ [decodeLock unlock];
+ return 0.f;
+ }
+ }
+
+ CFNumberRef num = CFDictionaryGetValue (properties, property);
+ if (!num) {
+ [decodeLock unlock];
+ return 0.f;
+ }
+
+ float value = 0.f;
+ CFNumberGetValue (num, kCFNumberFloat32Type, &value);
+
+ [decodeLock unlock];
+
+ return value;
+}
+
#define MINIMUM_DURATION (1.0/30.0)
- (float)_frameDurationAt:(size_t)i
- (int)_repetitionCount
{
- return [self _floatProperty:kCGImagePropertyGIFLoopCount type:kCGImagePropertyGIFDictionary at:0];
+ return [self _floatFileProperty:kCGImagePropertyGIFLoopCount type:kCGImagePropertyGIFDictionary];
}
- (BOOL)isAnimationFinished