diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2015-02-22 20:36:09 +0100 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2015-02-24 22:31:20 +0100 |
commit | 85b3b1c4ba7af9c2658442b0aafd27d613e1854b (patch) | |
tree | 1fd69f48346d4ec75ada9f3b72e5f45dd33cbdd9 /libavdevice | |
parent | b31328d008985f87f0a7c83c700847cef1a4f08c (diff) | |
download | ffmpeg-85b3b1c4ba7af9c2658442b0aafd27d613e1854b.tar.gz |
xcbgrab: Unbreak parsing filename options
CC: libav-stable@libav.org
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavdevice')
-rw-r--r-- | libavdevice/xcbgrab.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c index a29cd9b921..c4db9837e8 100644 --- a/libavdevice/xcbgrab.c +++ b/libavdevice/xcbgrab.c @@ -495,7 +495,6 @@ static int create_stream(AVFormatContext *s) { XCBGrabContext *c = s->priv_data; AVStream *st = avformat_new_stream(s, NULL); - const char *opts = strchr(s->filename, '+'); xcb_get_geometry_cookie_t gc; xcb_get_geometry_reply_t *geo; int ret; @@ -511,9 +510,6 @@ static int create_stream(AVFormatContext *s) if (ret < 0) return ret; - if (opts) - sscanf(opts, "%d,%d", &c->x, &c->y); - avpriv_set_pts_info(st, 64, 1, 1000000); gc = xcb_get_geometry(c->conn, c->screen->root); @@ -600,11 +596,23 @@ static av_cold int xcbgrab_read_header(AVFormatContext *s) XCBGrabContext *c = s->priv_data; int screen_num, ret; const xcb_setup_t *setup; + char *host = s->filename[0] ? s->filename : NULL; + const char *opts = strchr(s->filename, '+'); + + if (opts) { + sscanf(opts, "%d,%d", &c->x, &c->y); + host = av_strdup(s->filename); + host[opts - s->filename] = '\0'; + } + + c->conn = xcb_connect(host, &screen_num); + + if (opts) + av_free(host); - c->conn = xcb_connect(s->filename[0] ? s->filename : NULL, &screen_num); if ((ret = xcb_connection_has_error(c->conn))) { av_log(s, AV_LOG_ERROR, "Cannot open display %s, error %d.\n", - s->filename[0] ? s->filename : "default", ret); + s->filename[0] ? host : "default", ret); return AVERROR(EIO); } setup = xcb_get_setup(c->conn); |