From 5e890f4026ba1a1e79c3f5ca187fa00a02867abb Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Tue, 23 Jun 2009 23:11:10 +0000 Subject: [PATCH] Added a patch to the OpenJPEG wrapper to try and correct bad J2KLayerInfo.End values that occur on 64-bit systems git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2907 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse/Imaging/OpenJPEG.cs | 32 ++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/OpenMetaverse/Imaging/OpenJPEG.cs b/OpenMetaverse/Imaging/OpenJPEG.cs index 701dc5c2..d4bfe21b 100644 --- a/OpenMetaverse/Imaging/OpenJPEG.cs +++ b/OpenMetaverse/Imaging/OpenJPEG.cs @@ -391,12 +391,42 @@ namespace OpenMetaverse.Imaging "Inconsistent packet data in JPEG2000 stream:\n"); for (int j = 0; j < layerInfo.Length; j++) output.AppendFormat("Layer {0}: Start: {1} End: {2}\n", j, layerInfo[j].Start, layerInfo[j].End); - Logger.Log(output.ToString(), Helpers.LogLevel.Error); + Logger.DebugLog(output.ToString()); success = false; break; } } + + if (!success) + { + for (int i = 0; i < layerInfo.Length; i++) + { + if (i < layerInfo.Length - 1) + layerInfo[i].End = layerInfo[i + 1].Start - 1; + else + layerInfo[i].End = marshalled.length; + } + + Logger.DebugLog("Corrected JPEG2000 packet data"); + success = true; + + for (int i = 0; i < layerInfo.Length; i++) + { + if (layerInfo[i].Start >= layerInfo[i].End || + (i > 0 && layerInfo[i].Start <= layerInfo[i - 1].End)) + { + System.Text.StringBuilder output = new System.Text.StringBuilder( + "Still inconsistent packet data in JPEG2000 stream, giving up:\n"); + for (int j = 0; j < layerInfo.Length; j++) + output.AppendFormat("Layer {0}: Start: {1} End: {2}\n", j, layerInfo[j].Start, layerInfo[j].End); + Logger.DebugLog(output.ToString()); + + success = false; + break; + } + } + } } else {