| | 2124 | if (demuxer->sub->id >= 0 && demuxer->sub->id < priv->track_db) { |
| | 2125 | int samplenr = 0; |
| | 2126 | trak = priv->tracks[demuxer->sub->id]; |
| | 2127 | while (samplenr < trak->samples_size) { |
| | 2128 | double subpts = (double)trak->samples[samplenr].pts / (double)trak->timescale; |
| | 2129 | if (subpts >= pts) break; |
| | 2130 | samplenr++; |
| | 2131 | } |
| | 2132 | samplenr--; |
| | 2133 | if (samplenr < 0) |
| | 2134 | vo_sub = NULL; |
| | 2135 | else { |
| | 2136 | off_t pos = trak->samples[samplenr].pos + 2; |
| | 2137 | int len = trak->samples[samplenr].size - 2; |
| | 2138 | if (len < 0) len = 0; |
| | 2139 | if (len > MOV_MAX_SUBLEN) len = MOV_MAX_SUBLEN; |
| | 2140 | stream_seek(demuxer->stream, pos); |
| | 2141 | stream_read(demuxer->stream, priv->subtext, len); |
| | 2142 | priv->subtext[len] = 0; |
| | 2143 | priv->subs.lines = 1; |
| | 2144 | priv->subs.text[0] = &priv->subtext; |
| | 2145 | vo_sub = &priv->subs; |
| | 2146 | } |
| | 2147 | vo_osd_changed (OSDTYPE_SUBTITLE); |
| | 2148 | } |
| | 2149 | |