| @@ -91,6 +91,7 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| int y_off = 0; | int y_off = 0; | ||||
| int use_shm; | int use_shm; | ||||
| char *param, *offset; | char *param, *offset; | ||||
| int ret = 0; | |||||
| param = av_strdup(s1->filename); | param = av_strdup(s1->filename); | ||||
| offset = strchr(param, '+'); | offset = strchr(param, '+'); | ||||
| @@ -105,17 +106,20 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| dpy = XOpenDisplay(param); | dpy = XOpenDisplay(param); | ||||
| if(!dpy) { | if(!dpy) { | ||||
| av_log(s1, AV_LOG_ERROR, "Could not open X display.\n"); | av_log(s1, AV_LOG_ERROR, "Could not open X display.\n"); | ||||
| return AVERROR(EIO); | |||||
| ret = AVERROR(EIO); | |||||
| goto out; | |||||
| } | } | ||||
| if (ap->width <= 0 || ap->height <= 0 || ap->time_base.den <= 0) { | if (ap->width <= 0 || ap->height <= 0 || ap->time_base.den <= 0) { | ||||
| av_log(s1, AV_LOG_ERROR, "AVParameters don't have video size and/or rate. Use -s and -r.\n"); | av_log(s1, AV_LOG_ERROR, "AVParameters don't have video size and/or rate. Use -s and -r.\n"); | ||||
| return AVERROR(EIO); | |||||
| ret = AVERROR(EINVAL); | |||||
| goto out; | |||||
| } | } | ||||
| st = av_new_stream(s1, 0); | st = av_new_stream(s1, 0); | ||||
| if (!st) { | if (!st) { | ||||
| return AVERROR(ENOMEM); | |||||
| ret = AVERROR(ENOMEM); | |||||
| goto out; | |||||
| } | } | ||||
| av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ | av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ | ||||
| @@ -136,7 +140,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| IPC_CREAT|0777); | IPC_CREAT|0777); | ||||
| if (x11grab->shminfo.shmid == -1) { | if (x11grab->shminfo.shmid == -1) { | ||||
| av_log(s1, AV_LOG_ERROR, "Fatal: Can't get shared memory!\n"); | av_log(s1, AV_LOG_ERROR, "Fatal: Can't get shared memory!\n"); | ||||
| return AVERROR(ENOMEM); | |||||
| ret = AVERROR(ENOMEM); | |||||
| goto out; | |||||
| } | } | ||||
| x11grab->shminfo.shmaddr = image->data = shmat(x11grab->shminfo.shmid, 0, 0); | x11grab->shminfo.shmaddr = image->data = shmat(x11grab->shminfo.shmid, 0, 0); | ||||
| x11grab->shminfo.readOnly = False; | x11grab->shminfo.readOnly = False; | ||||
| @@ -144,7 +149,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| if (!XShmAttach(dpy, &x11grab->shminfo)) { | if (!XShmAttach(dpy, &x11grab->shminfo)) { | ||||
| av_log(s1, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n"); | av_log(s1, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n"); | ||||
| /* needs some better error subroutine :) */ | /* needs some better error subroutine :) */ | ||||
| return AVERROR(EIO); | |||||
| ret = AVERROR(EIO); | |||||
| goto out; | |||||
| } | } | ||||
| } else { | } else { | ||||
| image = XGetImage(dpy, RootWindow(dpy, DefaultScreen(dpy)), | image = XGetImage(dpy, RootWindow(dpy, DefaultScreen(dpy)), | ||||
| @@ -172,7 +178,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| } else { | } else { | ||||
| av_log(s1, AV_LOG_ERROR, "RGB ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel); | av_log(s1, AV_LOG_ERROR, "RGB ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel); | ||||
| av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask); | av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask); | ||||
| return AVERROR(EIO); | |||||
| ret = AVERROR(EIO); | |||||
| goto out; | |||||
| } | } | ||||
| break; | break; | ||||
| case 24: | case 24: | ||||
| @@ -187,7 +194,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| } else { | } else { | ||||
| av_log(s1, AV_LOG_ERROR,"rgb ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel); | av_log(s1, AV_LOG_ERROR,"rgb ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel); | ||||
| av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask); | av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask); | ||||
| return AVERROR(EIO); | |||||
| ret = AVERROR(EIO); | |||||
| goto out; | |||||
| } | } | ||||
| break; | break; | ||||
| case 32: | case 32: | ||||
| @@ -210,7 +218,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| break; | break; | ||||
| default: | default: | ||||
| av_log(s1, AV_LOG_ERROR, "image depth %i not supported ... aborting\n", image->bits_per_pixel); | av_log(s1, AV_LOG_ERROR, "image depth %i not supported ... aborting\n", image->bits_per_pixel); | ||||
| return -1; | |||||
| ret = AVERROR(EINVAL); | |||||
| goto out; | |||||
| } | } | ||||
| x11grab->frame_size = ap->width * ap->height * image->bits_per_pixel/8; | x11grab->frame_size = ap->width * ap->height * image->bits_per_pixel/8; | ||||
| @@ -232,7 +241,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| st->codec->time_base = ap->time_base; | st->codec->time_base = ap->time_base; | ||||
| st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(ap->time_base) * 8; | st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(ap->time_base) * 8; | ||||
| return 0; | |||||
| out: | |||||
| return ret; | |||||
| } | } | ||||
| /** | /** | ||||