|
|
|
@ -95,11 +95,9 @@ static void x11grab_draw_region_win(struct x11grab *s) |
|
|
|
|
{ |
|
|
|
|
Display *dpy = s->dpy; |
|
|
|
|
Window win = s->region_win; |
|
|
|
|
int screen; |
|
|
|
|
GC gc; |
|
|
|
|
int screen = DefaultScreen(dpy); |
|
|
|
|
GC gc = XCreateGC(dpy, win, 0, 0); |
|
|
|
|
|
|
|
|
|
screen = DefaultScreen(dpy); |
|
|
|
|
gc = XCreateGC(dpy, win, 0, 0); |
|
|
|
|
XSetForeground(dpy, gc, WhitePixel(dpy, screen)); |
|
|
|
|
XSetBackground(dpy, gc, BlackPixel(dpy, screen)); |
|
|
|
|
XSetLineAttributes(dpy, gc, REGION_WIN_BORDER, LineDoubleDash, 0, 0); |
|
|
|
@ -117,12 +115,10 @@ static void x11grab_draw_region_win(struct x11grab *s) |
|
|
|
|
static void x11grab_region_win_init(struct x11grab *s) |
|
|
|
|
{ |
|
|
|
|
Display *dpy = s->dpy; |
|
|
|
|
int screen; |
|
|
|
|
XSetWindowAttributes attribs; |
|
|
|
|
XRectangle rect; |
|
|
|
|
XSetWindowAttributes attribs = { .override_redirect = True }; |
|
|
|
|
int screen = DefaultScreen(dpy); |
|
|
|
|
|
|
|
|
|
screen = DefaultScreen(dpy); |
|
|
|
|
attribs.override_redirect = True; |
|
|
|
|
s->region_win = XCreateWindow(dpy, RootWindow(dpy, screen), |
|
|
|
|
s->x_off - REGION_WIN_BORDER, |
|
|
|
|
s->y_off - REGION_WIN_BORDER, |
|
|
|
@ -160,12 +156,8 @@ static int x11grab_read_header(AVFormatContext *s1) |
|
|
|
|
AVStream *st = NULL; |
|
|
|
|
enum AVPixelFormat input_pixfmt; |
|
|
|
|
XImage *image; |
|
|
|
|
int x_off = 0; |
|
|
|
|
int y_off = 0; |
|
|
|
|
int screen; |
|
|
|
|
int use_shm; |
|
|
|
|
int x_off = 0, y_off = 0, ret = 0, screen, use_shm; |
|
|
|
|
char *param, *offset; |
|
|
|
|
int ret = 0; |
|
|
|
|
AVRational framerate; |
|
|
|
|
|
|
|
|
|
param = av_strdup(s1->filename); |
|
|
|
@ -179,12 +171,15 @@ static int x11grab_read_header(AVFormatContext *s1) |
|
|
|
|
*offset = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((ret = av_parse_video_size(&x11grab->width, &x11grab->height, |
|
|
|
|
x11grab->video_size)) < 0) { |
|
|
|
|
ret = av_parse_video_size(&x11grab->width, &x11grab->height, |
|
|
|
|
x11grab->video_size); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_log(s1, AV_LOG_ERROR, "Couldn't parse video size.\n"); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
if ((ret = av_parse_video_rate(&framerate, x11grab->framerate)) < 0) { |
|
|
|
|
|
|
|
|
|
ret = av_parse_video_rate(&framerate, x11grab->framerate); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_log(s1, AV_LOG_ERROR, "Could not parse framerate: %s.\n", |
|
|
|
|
x11grab->framerate); |
|
|
|
|
goto out; |
|
|
|
@ -531,10 +526,10 @@ static int x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt) |
|
|
|
|
|
|
|
|
|
if (s->show_region) { |
|
|
|
|
if (s->region_win) { |
|
|
|
|
XEvent evt; |
|
|
|
|
// clean up the events, and do the initinal draw or redraw.
|
|
|
|
|
for (evt.type = NoEventMask; |
|
|
|
|
XCheckMaskEvent(dpy, ExposureMask | StructureNotifyMask, &evt);) |
|
|
|
|
XEvent evt = { .type = NoEventMask }; |
|
|
|
|
// Clean up the events, and do the initial draw or redraw.
|
|
|
|
|
while (XCheckMaskEvent(dpy, ExposureMask | StructureNotifyMask, |
|
|
|
|
&evt)) |
|
|
|
|
; |
|
|
|
|
if (evt.type) |
|
|
|
|
x11grab_draw_region_win(s); |
|
|
|
|