mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 06:03:45 +01:00
Fix vobsub_seek use same reseek method as vobsub_get_packet did.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25819 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
b060a1c644
commit
5d2de57e5b
25
vobsub.c
25
vobsub.c
@ -1279,14 +1279,9 @@ vobsub_set_from_lang(void *vobhandle, unsigned char * lang)
|
|||||||
mp_msg(MSGT_VOBSUB, MSGL_WARN, "No matching VOBSUB language found!\n");
|
mp_msg(MSGT_VOBSUB, MSGL_WARN, "No matching VOBSUB language found!\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) {
|
|
||||||
vobsub_t *vob = (vobsub_t *)vobhandle;
|
|
||||||
unsigned int pts100 = 90000 * pts;
|
|
||||||
if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) {
|
|
||||||
packet_queue_t *queue = vob->spu_streams + vobsub_id;
|
|
||||||
|
|
||||||
|
/// make sure we seek to the first packet of packets having same pts values.
|
||||||
|
static void vobsub_queue_reseek(packet_queue_t *queue, unsigned int pts100) {
|
||||||
int reseek_count = 0;
|
int reseek_count = 0;
|
||||||
unsigned int lastpts = 0;
|
unsigned int lastpts = 0;
|
||||||
while (queue->current_index < queue->packets_size
|
while (queue->current_index < queue->packets_size
|
||||||
@ -1300,6 +1295,16 @@ vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) {
|
|||||||
queue->packets[queue->current_index-1].pts100 != lastpts)
|
queue->packets[queue->current_index-1].pts100 != lastpts)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) {
|
||||||
|
vobsub_t *vob = (vobsub_t *)vobhandle;
|
||||||
|
unsigned int pts100 = 90000 * pts;
|
||||||
|
if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) {
|
||||||
|
packet_queue_t *queue = vob->spu_streams + vobsub_id;
|
||||||
|
|
||||||
|
vobsub_queue_reseek(queue, pts100);
|
||||||
|
|
||||||
while (queue->current_index < queue->packets_size) {
|
while (queue->current_index < queue->packets_size) {
|
||||||
packet_t *pkt = queue->packets + queue->current_index;
|
packet_t *pkt = queue->packets + queue->current_index;
|
||||||
@ -1346,11 +1351,7 @@ void vobsub_seek(void * vobhandle, float pts)
|
|||||||
return;
|
return;
|
||||||
queue = vob->spu_streams + vobsub_id;
|
queue = vob->spu_streams + vobsub_id;
|
||||||
queue->current_index = 0;
|
queue->current_index = 0;
|
||||||
while (queue->current_index < queue->packets_size
|
vobsub_queue_reseek(queue, seek_pts100);
|
||||||
&& (queue->packets + queue->current_index)->pts100 < seek_pts100)
|
|
||||||
++queue->current_index;
|
|
||||||
if (queue->current_index > 0)
|
|
||||||
--queue->current_index;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user