diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-05-07 21:01:44 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-05-07 21:02:42 +0300 |
commit | 033e479bec89bfda08eada1a794b94eb4ae53a35 (patch) | |
tree | dd173829b86a246f4c6929f3395091bf0a7344e5 | |
parent | 70a2ded653cfe13fa30b39c66588a85076e03d6f (diff) | |
parent | 3517a9b72b06aeb962487e9d0025e22cd6d0f575 (diff) | |
download | mpv-033e479bec89bfda08eada1a794b94eb4ae53a35.tar.bz2 mpv-033e479bec89bfda08eada1a794b94eb4ae53a35.tar.xz |
Merge svn changes up to r31104
-rw-r--r-- | libvo/x11_common.c | 4 | ||||
-rw-r--r-- | vobsub.c | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 02e42ff221..056c452b2d 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -338,9 +338,9 @@ void update_xinerama_info(struct vo *vo) { struct MPOpts *opts = vo->opts; xinerama_x = xinerama_y = 0; #ifdef CONFIG_XINERAMA - int screen = xinerama_screen; - if (screen >= -1 && XineramaIsActive(vo->x11->display)) + if (xinerama_screen >= -1 && XineramaIsActive(vo->x11->display)) { + int screen = xinerama_screen; XineramaScreenInfo *screens; int num_screens; @@ -285,6 +285,8 @@ typedef struct { unsigned char *packet; unsigned int packet_reserve; unsigned int packet_size; + int padding_was_here; + int merge; } mpeg_t; static mpeg_t *mpeg_open(const char *filename) @@ -297,6 +299,8 @@ static mpeg_t *mpeg_open(const char *filename) res->packet = NULL; res->packet_size = 0; res->packet_reserve = 0; + res->padding_was_here = 1; + res->merge = 0; res->stream = rar_open(filename, "rb"); err = res->stream == NULL; if (err) @@ -368,10 +372,13 @@ static int mpeg_run(mpeg_t *mpeg) return -1; } else abort(); + if (!mpeg->padding_was_here) + mpeg->merge = 1; break; case 0xbd: /* packet */ if (rar_read(buf, 2, 1, mpeg->stream) != 1) return -1; + mpeg->padding_was_here = 0; len = buf[0] << 8 | buf[1]; idx = mpeg_tell(mpeg); c = rar_getc(mpeg->stream); @@ -454,6 +461,7 @@ static int mpeg_run(mpeg_t *mpeg) len = buf[0] << 8 | buf[1]; if (len > 0 && rar_seek(mpeg->stream, len, SEEK_CUR)) return -1; + mpeg->padding_was_here = 1; break; default: if (0xc0 <= buf[3] && buf[3] < 0xf0) { @@ -1026,6 +1034,11 @@ void *vobsub_open(const char *const name, const char *const ifo, last_pts_diff = pkt->pts100 - mpg->pts; else pkt->pts100 = mpg->pts; + if (mpg->merge) { + packet_t *last = &queue->packets[queue->current_index - 1]; + pkt->pts100 = last->pts100; + mpg->merge = 0; + } /* FIXME: should not use mpg_sub internal informations, make a copy */ pkt->data = mpg->packet; pkt->size = mpg->packet_size; |