Coming from 5.5, we have animSequence that use the acl bone compression, for some reason, it seems to create an issue in build with the alignment of the acl::compressed_tracks, if i understood correctly in builds we use the acl database which basically store all compressed tracks in the same memory segment, i suspect it might come from that, the packaging is done under a mac and the crash is seen with an IOS build
Here we have the callstack
Forgot to say, i tried to set the compression to the fallback compression, it’s not crashing, and as soon as i put the ACL compression again, it’s crashing, so i doubt it is coming from some leftovers compression of 5.5, but it’s a guess
That is quite unusual. Looking at the callstack, it appears that this particular animation sequence is using the regular ACL codec (default in UE 5.7), not the Database one. We can also see that the CompressedClipData pointer doesn’t appear to be correctly aligned, just as reported. Its alignment is 1 byte when it should be a minimum of 16 bytes.
On most platforms, the compressed data is allocated within a regular TArray which will maintain the proper alignment.
Could you modify FACLCompressedAnimData::Bind locally?
This function is called on load instead of on the first decompression call. That should help narrow down if this is an issue with memory corruption or something else.
On mobile platforms, such as iOS, it is also possible that the compressed data is memory mapped, in which case it isn’t allocated by a TArray. This handling is done in FCompressedAnimSequence::SerializeCompressedData.
Could you confirm the following:
Is the animation sequence normal looking or empty (no bone data, pure curves/attributes) (e.g. in editor)?
Are you using memory mapping on iOS?
Is the check in Bind tripping as well or only on first decompression?
After modifying the Bind function, i’m actually hitting the check in editor as well, if i try to open the animations
[Image Removed]it could be that mac is using the same memory mapping as the ios device, but starting from the branch 5.7 (up to date with 5.7.1 commits) and very few added commits (nothing related to animations), but since it’s a project from 5.5, maybe it is coming from a configuration, do you know a config i should look for that could potentially mmap in mac / ios ?
As far as i could tell, i don’t see anything weird with the animations itself, they are playing normally, even the apply compression is not reporting any errors
Furthermore, i tried to put all the animation under the default compression fallback settings, and it’s working fine as in 5.5 in build
I also tried to use force the usage of the ansi allocator, in case it could have an impact, but same result
Yes that was indeed this memoryMappedFiles configuration, i tried that prior to modify ByteSwapIn (tell me if you still need that input), that was the most promising test, now the question beeing, if this have been done to reduce memory waste, is it for me worth it to change it back to 16k and loose that memory rather than falling back to default compression for the animations, or is there is a way to specify aligments for theses specific datas ?
I think the call to Bind(..) might be too early after all.
Could you move the check inside UAnimBoneCompressionCodec_ACLBase::ByteSwapIn ? You might need to implement it in the derived ACL codec as I don’t think the Base will have access to the data
For memory mapping, you can look for: SupportsMemoryMappedAnimation and SupportsMemoryMappedFiles, they should be enabled on android/iOS I believe.