summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-05-07 21:01:44 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-05-07 21:02:42 +0300
commit033e479bec89bfda08eada1a794b94eb4ae53a35 (patch)
treedd173829b86a246f4c6929f3395091bf0a7344e5
parent70a2ded653cfe13fa30b39c66588a85076e03d6f (diff)
parent3517a9b72b06aeb962487e9d0025e22cd6d0f575 (diff)
downloadmpv-033e479bec89bfda08eada1a794b94eb4ae53a35.tar.bz2
mpv-033e479bec89bfda08eada1a794b94eb4ae53a35.tar.xz
Merge svn changes up to r31104
-rw-r--r--libvo/x11_common.c4
-rw-r--r--vobsub.c13
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;
diff --git a/vobsub.c b/vobsub.c
index eeb8592607..f14e72f7d3 100644
--- a/vobsub.c
+++ b/vobsub.c
@@ -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;