From: Michael Niedermayer <[email protected]>
Found-by: carl
Signed-off-by: Michael Niedermayer <[email protected]>
Conflicts:
libavdevice/xcbgrab.c
---
libavdevice/xcbgrab.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c
index 994f160..3aaaf0b 100644
--- a/libavdevice/xcbgrab.c
+++ b/libavdevice/xcbgrab.c
@@ -494,7 +494,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;
@@ -510,9 +509,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);
@@ -601,8 +597,20 @@ static av_cold int xcbgrab_read_header(AVFormatContext *s)
XCBGrabContext *c = s->priv_data;
int screen_num, ret;
const xcb_setup_t *setup;
+ char *display_name = av_strdup(s->filename);
+
+ if (s->filename) {
+ if (!display_name)
+ return AVERROR(ENOMEM);
+
+ if (!sscanf(s->filename, "%[^+]+%d,%d", display_name, &c->x, &c->y)) {
+ *display_name = 0;
+ sscanf(s->filename, "+%d,%d", &c->x, &c->y);
+ }
+ }
- c->conn = xcb_connect(s->filename[0] ? s->filename : NULL, &screen_num);
+ c->conn = xcb_connect(display_name[0] ? display_name : NULL, &screen_num);
+ av_freep(&display_name);
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);
--
1.7.10.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel