Index: vobsub.c =================================================================== --- vobsub.c (revision 24612) +++ vobsub.c (working copy) @@ -26,6 +26,7 @@ #include "libavutil/common.h" extern int vobsub_id; +extern float sub_delay; /********************************************************************** * RAR stream handling @@ -1232,7 +1233,7 @@ int vobsub_get_packet(void *vobhandle, float pts,void** data, int* timestamp) { vobsub_t *vob = (vobsub_t *)vobhandle; - unsigned int pts100 = 90000 * pts; + unsigned int pts100 = 90000 * pts + 90 * sub_delay; if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) { packet_queue_t *queue = vob->spu_streams + vobsub_id; while (queue->current_index < queue->packets_size) { @@ -1241,7 +1242,7 @@ if (pkt->pts100 <= pts100) { ++queue->current_index; *data = pkt->data; - *timestamp = pkt->pts100; + *timestamp = pkt->pts100 - 90 * sub_delay; return pkt->size; } else break; else @@ -1261,7 +1262,7 @@ packet_t *pkt = queue->packets + queue->current_index; ++queue->current_index; *data = pkt->data; - *timestamp = pkt->pts100; + *timestamp = pkt->pts100 - 90 * sub_delay; return pkt->size; } } @@ -1272,7 +1273,7 @@ { vobsub_t * vob = (vobsub_t *)vobhandle; packet_queue_t * queue; - int seek_pts100 = (int)pts * 90000; + int seek_pts100 = pts * 90000 + sub_delay * 90; if (vob->spu_streams && 0 <= vobsub_id && (unsigned) vobsub_id < vob->spu_streams_size) { /* do not seek if we don't know the id */