add_tl() when creating virtual_stream list is referencing sh->codec which is owned by the demuxer. Don't close it to avoid dangling pointers. The comment is right, but this happens regardless of delay_open as we can clearly see in the add_tl() function.
Unified · Split
| @@ -210,11 +210,9 @@ static void reopen_lazy_segments(struct demuxer *demuxer, · 209 unmodified lines | ||
| 210 | 210 | if (src->current->d) |
| 211 | 211 | return; |
| 212 | 212 | |
| 213 | − // Note: in delay_open mode, we must _not_ close segments during demuxing, | |
| 213 | + // Note: we must _not_ close segments during demuxing, | |
| 214 | 214 | // because demuxed packets have demux_packet.codec set to objects owned |
| 215 | 215 | // by the segments. Closing them would create dangling pointers. |
| 216 | − if (!src->delay_open) | |
| 217 | − close_lazy_segments(demuxer, src); | |
| 218 | 216 | |
| 219 | 217 | struct demuxer_params params = { |
| 220 | 218 | .init_fragment = src->tl->init_fragment, |