Hi guys,
Follow-up to my post above. I was wrong about ffmpeg, sorry for the noise. 495d787c is from 6 Aug and DVDs still worked after it. It starts 20 Aug with 2a9a87e4 “Videoplayer: open base layer as default on dual layer video”.
That commit added this to CVideoPlayer::OpenDefaultStreams:
CDemuxStreamVideo* vstream = static_cast<CDemuxStreamVideo*>(
m_pDemuxer->GetStream(stream.demuxerId, stream.id));
if (vstream->isDualStream && vstream->isELStream)
GetStream() returns nullptr if the id is not in the demuxer map. On the DVD menu domain the demuxer has no streams yet and the selection streams come from libdvdnav (source 512), so it returns null and vstream is used without any check.
Kernel dump in 02_System.log, same in all 5 crashes:
ESR 0x92000006, level 2 translation fault in kodi.bin[400000+1bd1000]
x0 : 0000000000000000
pc : 00000000009dbf00
0x9dbf00 is CVideoPlayer::OpenDefaultStreams(bool)+656, instruction ldrb w1, [x0, #389]. That is the isDualStream load, one instruction after the call, nothing checks the pointer in between.
To be sure it is really this one, I patched that branch out of the shipped kodi.bin and bind mounted it over /usr/lib/kodi/kodi.bin. Same build, same discs, menus play again and the log shows “Opening stream: 1 source: 512” where it used to just stop. 20260730 logs that same line, that is what put me on it.
All nightlies since 20 Aug, all Amlogic, DVD menu only (VIDEO_TS.IFO / ISO). Direct VTS_*.VOB playback works, that is why it looked like only some discs are broken.
Fix is up as pull request #80 on CoreELEC/xbmc, “VideoPlayer: check demux stream before dual layer test”. It gates the probe on STREAM_SOURCE_DEMUX and checks the stream before the cast. Not compile tested, I don’t have a build tree here. Forum does not let me post links yet so I cannot link it directly.
And to be fair: I used Claude to help me dig through the crash dumps and the disassembly, it got me there much faster than I would alone. Box, logs and testing are mine.