Hi,
I did some testing, and I can reproduce this behaviour with any library that has more then two images.
Environment:
Ipad: 5th generation WiFi only, 128GB, iPadOS 14.4
Ipad in landscape orientation at all times.
iPad App: Version 7.13 (11-02-2021)
Plex Server: Version 4.51.1 on Windows 10 Pro build 19042.804
I made 5 similar jpg files:
300 x 900 pixels (so we get a narrow, vertical band in the middle of the screen - this makes it easy to observe both the image and the background)
Images are coloured red, green, blue, yellow and purple, each with a white circle in the middle:
→ solid colours: easy to distinguish the different blurred backgrounds when swiping
→ white circle: easy to distinguish between the background and the image itself. The difference between a solid colour and the blurred version of a solid colour is very, very small…
70% compression, standard encoding, chroma subsampling YCbCr 1x1 1x1 1x1 (None)
Used Files with their filesizes (included in attachment):
- blue.jpg: 9174 bytes
- green.jpg: 9350 bytes
- purple.jpg: 9150 bytes
- red.jpg: 9056 bytes
- yellow.jpg: 9301 bytes
size on disk identical for all files: 12288 bytes.
The 5 files were added into a new library.
Plex orders them alphabetically, so we get the sequence blue, green, purple, red, yellow
general observed behaviour on iPad:
-
for every picture we have the picture itself, and a blurred version underneath it that is used to fill the full screen of the iPad. So what really seems to happen when we see blurred images is that we only see the background.
-
when going from one picture to the next, the background of the current picture disolves into the background of the target picture using some kind of alphablending. The further we swipe to the next picture, the fainter the previous background becomes.
-
the images themselves slide in from the side and out to the side at constant opacity at the same time the background is changed using alphablending.
-
after each scenario, we need to return to the library to reset the disappearing behaviour.
Given the scenarios I’ve tested, my hunch as a Software Engineer is that there is something wonky with the buffer used for the blurred (blursed?) background images or the buffer for the images themselves. I can imagine that it buffers two blurred images (which would make sense: the background for the current image, and for the image you are swiping to), and something weird happens when background images (or the images themselves) have to be cycled in and out of their respective buffers when swiping through the library. The reason for this assumption is that as long as you cycle between two images only, nothing goes wrong. However, when using three images, the middle image always stays OK, while image 1 and 3 go bad. When using more then three images, eventually all images go bad. Maybe Plex is using buffering on multiple levels, inception-style, where the buffer itself is getting buffered, this would certainly add to the fun of troubleshooting this issue. Or the buffer has a variable size depending on how many different images you swipe through, which would also alter behaviour.
Whatever the underlying mechanism, it seems that the error is triggered after a different amount of swipes, depending on a combination of how many images you’ve swiped through and whether or not you’ve changed direction when swiping.
Also, I’m fully aware that my assumptions might be completely wrong and that the source of this behaviour is something completely different. Perhaps the opacity of the images is flipped from 100 to 0 because the alphablending from the background does something it shouldn’t do to the image itself . In any case, the bug seems to be multi-layered. Scenario 5 is a good indicator of this…
Anyway, the result of my tests:
I’ve done five scenario’s, starting with a sequence of two images and then scaling up to three, four and five respectively. In each case, I swipe sequentially from the first image in the sequence to the last, and then back again. Scenario 5 is a variation on scenario 2 where I add colours on the fly after things start to go wrong.
I always start with blue.
These sequences can be reproduced consistently, i.e. while every scenario has a different amount of steps after which the problem occurs, within each scenario, the number is always the same.
In each scenario, I depict the image with the first letter of the colour in lowercase if OK, and in uppercase when the image is not showing. For clarity: “image gone” means that the only thing we see is the blurred background-version of the image.
i.e.
b = blue, image showing
B = blue, image gone
g = green, image showing
G = green, image gone
p = purple, image showing
P = purple, image gone
r = red, image showing
R = red, image gone
y = yellow, image showing
Y = yellow, image gone
For readability, I’ve added a space whenever switching away from blue. This makes it easier to identify each full cycle.
note: if instead of swiping the pictures in the ribbon at the bottom of the page are tapped, behaviour is the same. So it seems for example that tapping purple and then tapping blue is fully equivalent to swiping from blue to green to purple to green to blue.
scenario 1: alternating between two images, no issues!:
start in the library. All 5 images are visible
tap the blue image, which is the first image in the library. Slideshow is started on blue image.
(note: I know technically it is not a Slideshow, I’m just expressing my wish that it would be one)
swipe slowly to left. Effect: the background is slowly disolved from blue to green, the further the blue image is slid to the left.
At some point, the blue image is still visible in the far left of the screen, while the green image enters on the far right. Background is now a mix between blue and green at this point.
Finger is at left side of iPad-sceen by now. Lift finger from screen, the green image now snaps to the center, blue is gone.
Now swipe back right, to return back to blue. The same happens in reverse.
Keep alternating between green and blue:
Tried 100 cycles (yes, really…): no problem.
scenario 2: alternating between three images:
start in the library. All 5 images are visible
tap the blue image, which is the first image in the library. Slideshow is started on blue image.
repeat scenario 1, but with three colours: blue, green, purple.
so the sequence now becomes blue, green, purple, green, blue, green, purple, etc.
Test:
b gpgb gpgb gpgb gpgB gPgB gPgB gPgB gPgB gPgB gPgB
→ error starts after 16 swipes, not all images become botched
→ conclusion: the middle image (green) keeps displaying correctly. Perhaps the problem only occurs when displaying an image which is two or more positions away from any previous displayed picture? This would add to my suspicion it has something to do with a buffer…
scenario 3: alternating between four images:
start in the library. All 5 images are visible
tap the blue image, which is the first image in the library. Slideshow is started on blue image.
repeat scenario 2, but with four colours: blue, green, purple, red
so the sequence now becomes blue, green, purple, red, purple, green, blue, etc.
Test:
b gprpgb gprpgb gprpgb gprpGB GPRPGB
→ error starts after 22 swipes, all images botched after 22 swipes
→ conclusion: behaviour is similar as in previous test: but now all images eventually disappear. This adds to my suspicsion that it has to do something with some kind of buffer.
With the three images in the previous scenario, I suspect the middle image never has to be removed from the buffer, and therefore it stays OK.
scenario 4: alternating between five images
start in the library. All 5 images are visible
tap the blue image, which is the first image in the library. Slideshow is started on blue image.
repeat scenario 2, but with five colours: blue, green, purple, red, yellow
so the sequence now becomes blue, green, purple, red, yellow, red, purple, green, blue, etc.
Test:
b gpryrmgb gpryrmgb gpryrmgB gPrYrPgB gPrYrPgB gPrYrPGB GPRYRPGB
→ error starts after 23 swipes, all images botched after 45 swipes
→ image 1,3 and 5 become botched first, 2 and 4 stay OK for a cycle, then all are botched.
→ this is weird. It is as if the behaviour is some kind of mix between scenario 2 and scenario 3, where the odd positions get botched quickly, the even positions stay OK, but in this case only temporary.
scenario 5: start by alternating between three images until things go wrong, then add red then yellow to the mix:
start in the library. All 5 images are visible
tap the blue image, which is the first image in the library. Slideshow is started on blue image.
First, repeat scenario 2 until blue and purple are gone:
Test:
Start with scenario 2:
b gpgb gpgb gpgb gpgB gPgB gP
We are on Purple now (not showing anymore)
Now continue: swipe right to Red and continue as in scenario 3 (we resume from the position of the arrow)
b gpgb gpgb gpgb gpgB gPgB gP → rPgB gPr
→ both green and red stay OK for now (note: if we continue scenario 3 at this point, eventually all four colours wil again be botched, but we want to try the fifth colour as well before this happens)
We are on Red now (with its image showing)
→ now swipe right to Yellow, then back to red and continue as in scenario 4 (we resume from the position of the arrow):
b gpgb gpgb gpgb gpgb qpgB gPrPgB gPr → YrPg BgPrYrPg BgPrYrPG BGPRY
→ yellow is never shown correctly: so at this point even images that have not been shown yet are affected.
Attached log contains a test of scenario 2 at approx timestamp 20:03:00 - 20:03:16. If you need more logging, or are interested in specific scenario’s, let me know.
debuglogging_and_testfiles.zip (66.6 KB)