I wonder if anyone is interested in a solution... 😉
Just in case you are, here is what I did.
Neither FMX nor VCL will honor the orientation information in the EXIF header inside the JPEG.
For FMX: neither on Windows nor on macOS. And probably not on iOS, either. For Android and Linus, you need to test for yourself, maybe they do.
The only solution is to read the EXIF header, extract the Orientation tag and apply the necessary transformations to the image after loading.
There are several components for Delphi to read EXIF headers, some do work, some don't. The best known unit is CCR-Exif (https://github.com/Wolfcast/ccr-exif), which does everything and works quite well. It can read and write EXIF tags.
I've created my own, because CCR-Exif seems like overkill (after all, I just want to know 1 single byte in the JPEG)
If you want to display JPEG images correctly in your FMX application, I have published my little unit on SourceForge, It's as small and fast as possible with really minimal overhead.
The first function JPEGRotationFromStream() will work for VCL as well! So you can adapt it and use it for your VCL app, too.
But FMX has this nice little class called TBitmapSurface, which easily does the Rotate, Mirror and Flip transformations that are required to display the JPEG correctly. So, for FMX this unit goes the full length and delivers a TBitmap that's just right. The unit might be useful for VCL as well, but you have to go an extra mile to apply the transformations.
SourceForge Download:
https://sourceforge.net/projects/delphi-fmx-jpeg-loader-exif/