summaryrefslogtreecommitdiff
path: root/libavdevice/x11grab.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-05-26 21:17:05 +0200
committerAnton Khirnov <anton@khirnov.net>2011-05-27 06:52:52 +0200
commit3102fb0351fb9dd96543b3f1b9c4c04758226ee5 (patch)
tree5e8dc1d41aa5886ee62459898d13026bbedb91ad /libavdevice/x11grab.c
parent3e15ea21504a5cc1765afd78dd72ef486a10a27b (diff)
x11grab: factorize returning error codes.
Diffstat (limited to 'libavdevice/x11grab.c')
-rw-r--r--libavdevice/x11grab.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c
index 0e63d09fea..2e1f019584 100644
--- a/libavdevice/x11grab.c
+++ b/libavdevice/x11grab.c
@@ -91,6 +91,7 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
int y_off = 0;
int use_shm;
char *param, *offset;
+ int ret = 0;
param = av_strdup(s1->filename);
offset = strchr(param, '+');
@@ -105,17 +106,20 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
dpy = XOpenDisplay(param);
if(!dpy) {
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) {
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);
if (!st) {
- return AVERROR(ENOMEM);
+ ret = AVERROR(ENOMEM);
+ goto out;
}
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);
if (x11grab->shminfo.shmid == -1) {
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.readOnly = False;
@@ -144,7 +149,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
if (!XShmAttach(dpy, &x11grab->shminfo)) {
av_log(s1, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n");
/* needs some better error subroutine :) */
- return AVERROR(EIO);
+ ret = AVERROR(EIO);
+ goto out;
}
} else {
image = XGetImage(dpy, RootWindow(dpy, DefaultScreen(dpy)),
@@ -172,7 +178,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
} 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, "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;
case 24:
@@ -187,7 +194,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
} 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, "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;
case 32:
@@ -210,7 +218,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
break;
default:
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;
@@ -232,7 +241,8 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
st->codec->time_base = ap->time_base;
st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(ap->time_base) * 8;
- return 0;
+out:
+ return ret;
}
/**