Mercurial > mplayer.hg
comparison vobsub.c @ 25322:078bdfd44751
Fix spudec to display current vobsub immediately after a seek.
author | ulion |
---|---|
date | Tue, 11 Dec 2007 10:12:58 +0000 |
parents | 23894348d1e5 |
children | f95cd1391ea0 |
comparison
equal
deleted
inserted
replaced
25321:6b90fc097785 | 25322:078bdfd44751 |
---|---|
1295 vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) { | 1295 vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) { |
1296 vobsub_t *vob = (vobsub_t *)vobhandle; | 1296 vobsub_t *vob = (vobsub_t *)vobhandle; |
1297 unsigned int pts100 = 90000 * pts; | 1297 unsigned int pts100 = 90000 * pts; |
1298 if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) { | 1298 if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) { |
1299 packet_queue_t *queue = vob->spu_streams + vobsub_id; | 1299 packet_queue_t *queue = vob->spu_streams + vobsub_id; |
1300 | |
1301 int reseek_count = 0; | |
1302 unsigned int lastpts = 0; | |
1303 while (queue->current_index < queue->packets_size | |
1304 && queue->packets[queue->current_index].pts100 <= pts100) { | |
1305 lastpts = queue->packets[queue->current_index].pts100; | |
1306 ++queue->current_index; | |
1307 ++reseek_count; | |
1308 } | |
1309 while (reseek_count--) { | |
1310 --queue->current_index; | |
1311 if (queue->packets[queue->current_index-1].pts100 != UINT_MAX && | |
1312 queue->packets[queue->current_index-1].pts100 != lastpts) | |
1313 break; | |
1314 } | |
1315 | |
1300 while (queue->current_index < queue->packets_size) { | 1316 while (queue->current_index < queue->packets_size) { |
1301 packet_t *pkt = queue->packets + queue->current_index; | 1317 packet_t *pkt = queue->packets + queue->current_index; |
1302 if (pkt->pts100 != UINT_MAX) | 1318 if (pkt->pts100 != UINT_MAX) |
1303 if (pkt->pts100 <= pts100) { | 1319 if (pkt->pts100 <= pts100) { |
1304 ++queue->current_index; | 1320 ++queue->current_index; |