summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrik <rik@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-17 21:28:51 +0000
committerrik <rik@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-17 21:28:51 +0000
commit632687dda7c1e593230c99885227355691d3f09e (patch)
tree35b2afce3ac1dc8810b83618a58eb660a2f3b848
parenta195f967f1665fc96af726095e41c5d973d31eb7 (diff)
downloadmpv-632687dda7c1e593230c99885227355691d3f09e.tar.bz2
mpv-632687dda7c1e593230c99885227355691d3f09e.tar.xz
Minor patches from Tomi Ollila <Tomi.Ollila@iki.fi>:
Now searches first character device in list for default video device. Made all mp_msg() calls to consistently prepend `zr:' to the message. Now first checks whether video device openend before ioctl()s. (and rik added a linefeed to messages missing a linefeed) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5667 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--libvo/vo_zr.c104
1 files changed, 71 insertions, 33 deletions
diff --git a/libvo/vo_zr.c b/libvo/vo_zr.c
index f1a397a219..156bdb95c5 100644
--- a/libvo/vo_zr.c
+++ b/libvo/vo_zr.c
@@ -3,6 +3,8 @@
* Copyright (C) Rik Snel 2001,2002, License GNU GPL v2
*/
+/* $Id$ */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -81,19 +83,62 @@ struct video_capability vc;
//should be command line options
int norm = VIDEO_MODE_AUTO;
+#if 0
#ifndef VO_ZR_DEFAULT_DEVICE
#define VO_ZR_DEFAULT_DEVICE "/dev/video"
#endif
+#endif
char *device = NULL;
int zoran_getcap() {
- char* dev = device ? device : VO_ZR_DEFAULT_DEVICE;
+ char* dev;
+
+ if (device)
+ dev = device;
+ else { /* code borrowed from mjpegtools lavplay.c // 20020416 too */
+ struct stat vstat;
+
+#undef VIDEV
+#define VIDEV "/dev/video"
+ if (stat(VIDEV, &vstat) == 0 && S_ISCHR(vstat.st_mode))
+ dev = VIDEV;
+#undef VIDEV
+#define VIDEV "/dev/video0"
+ else if (stat(VIDEV, &vstat) == 0 && S_ISCHR(vstat.st_mode))
+ dev = VIDEV;
+#undef VIDEV
+#define VIDEV "/dev/v4l/video0"
+ else if (stat(VIDEV, &vstat) == 0 && S_ISCHR(vstat.st_mode))
+ dev = VIDEV;
+#undef VIDEV
+#define VIDEV "/dev/v4l0"
+ else if (stat(VIDEV, &vstat) == 0 && S_ISCHR(vstat.st_mode))
+ dev = VIDEV;
+#undef VIDEV
+#define VIDEV "/dev/v4l"
+ else if (stat(VIDEV, &vstat) == 0 && S_ISCHR(vstat.st_mode))
+ dev = VIDEV;
+#undef VIDEV
+ else {
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: unable to find video device\n");
+ return 1;
+ }
+ mp_msg(MSGT_VO, MSGL_V, "zr: found video device %s\n", dev);
+ }
+
vdes = open(dev, O_RDWR);
+
+ if (vdes < 0) {
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error opening %s: %s\n",
+ dev, strerror(errno));
+ return 1;
+ }
+
/* before we can ask for the maximum resolution, we must set
* the correct tv norm */
if (ioctl(vdes, MJPIOC_G_PARAMS, &zp) < 0) {
- mp_msg(MSGT_VO, MSGL_ERR, "device at %s is probably not a DC10(+)/buz/lml33\n", dev);
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: device at %s is probably not a DC10(+)/buz/lml33\n", dev);
return 1;
}
@@ -102,26 +147,19 @@ int zoran_getcap() {
zp.norm = norm;
if (ioctl(vdes, MJPIOC_S_PARAMS, &zp) < 0) {
mp_msg(MSGT_VO, MSGL_ERR,
- "unable to change video norm, use another program to change it (XawTV)\n");
+ "zr: unable to change video norm, use another program to change it (XawTV)\n");
return 1;
}
ioctl(vdes, MJPIOC_G_PARAMS, &zp);
if (norm != zp.norm) {
mp_msg(MSGT_VO, MSGL_ERR,
- "unable to change video norm, use another program to change it (XawTV)\n");
+ "zr: unable to change video norm, use another program to change it (XawTV)\n");
return 1;
}
}
- if (vdes < 0) {
- mp_msg(MSGT_VO, MSGL_ERR, "error opening %s\n",
- dev);
- return 1;
- }
-
-
if (ioctl(vdes, VIDIOCGCAP, &vc) < 0) {
- mp_msg(MSGT_VO, MSGL_ERR, "error getting video capabilities from %s\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error getting video capabilities from %s\n");
return 1;
}
mp_msg(MSGT_VO, MSGL_V, "zr: MJPEG card reports maxwidth=%d, maxheight=%d\n", vc.maxwidth, vc.maxheight);
@@ -138,7 +176,7 @@ int init_zoran(int zrhdec, int zrvdec) {
}
if (image_height > vc.maxheight) {
- mp_msg(MSGT_VO, MSGL_ERR, "movie to be played is too high, max height currenty %d\n", vc.maxheight);
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: movie to be played is too high, max height currenty %d\n", vc.maxheight);
return 1;
}
@@ -154,7 +192,7 @@ int init_zoran(int zrhdec, int zrvdec) {
mp_msg(MSGT_VO, MSGL_V, "zr: geometry (after 'scaling'): %dx%d+%d+%d fields=%d, w=%d, h=%d\n", zp.img_width, (3-fields)*zp.img_height, zp.img_x, zp.img_y, fields, image_width/hdec, image_height);
if (ioctl(vdes, MJPIOC_S_PARAMS, &zp) < 0) {
- mp_msg(MSGT_VO, MSGL_ERR, "error setting display parameters\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error setting display parameters\n");
return 1;
}
@@ -162,7 +200,7 @@ int init_zoran(int zrhdec, int zrvdec) {
zrq.size = MJPEG_SIZE;
if (ioctl(vdes, MJPIOC_REQBUFS, &zrq)) {
- mp_msg(MSGT_VO, MSGL_ERR, "error requesting %d buffers of size %d\n", zrq.count, zrq.size);
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error requesting %d buffers of size %d\n", zrq.count, zrq.size);
return 1;
}
@@ -170,7 +208,7 @@ int init_zoran(int zrhdec, int zrvdec) {
MAP_SHARED, vdes, 0);
if (buf == MAP_FAILED) {
- mp_msg(MSGT_VO, MSGL_ERR, "error requesting %d buffers of size %d\n", zrq.count, zrq.size);
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error requesting %d buffers of size %d\n", zrq.count, zrq.size);
return 1;
}
return 0;
@@ -183,13 +221,13 @@ void uninit_zoran(void) {
}
while (queue > synco + 1) {
if (ioctl(vdes, MJPIOC_SYNC, &zs) < 0)
- mp_msg(MSGT_VO, MSGL_ERR, "error waiting for buffers to become free");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error waiting for buffers to become free\n");
synco++;
}
/* stop streaming */
frame = -1;
if (ioctl(vdes, MJPIOC_QBUF_PLAY, &frame) < 0)
- mp_msg(MSGT_VO, MSGL_ERR, "error stopping playback of last frame");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error stopping playback of last frame\n");
close(vdes);
}
@@ -208,20 +246,20 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
if (g.set) {
if (g.width%2 != 0 || g.height%2 != 0 ||
g.xoff%2 != 0 || g.yoff%2 != 0) {
- mp_msg(MSGT_VO, MSGL_ERR, "arguments in -zrcrop must be multiples of 2\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: arguments in -zrcrop must be multiples of 2\n");
return 1;
}
if (g.width <= 0 || g.height <= 0 ||
g.xoff < 0 || g.yoff < 0) {
- mp_msg(MSGT_VO, MSGL_ERR, "width and height must be positive and offset nonnegative\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: width and height must be positive and offset nonnegative\n");
return 1;
}
if (g.width + g.xoff > width) {
- mp_msg(MSGT_VO, MSGL_ERR, "width+xoffset (%d+%d>%d) is too big\n", g.width, g.xoff, width);
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: width+xoffset (%d+%d>%d) is too big\n", g.width, g.xoff, width);
return 1;
}
if (g.height + g.yoff > height) {
- mp_msg(MSGT_VO, MSGL_ERR, "height+yoffset (%d+%d>%d) is too big\n", g.height, g.yoff, height);
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: height+yoffset (%d+%d>%d) is too big\n", g.height, g.yoff, height);
return 1;
}
} else {
@@ -258,7 +296,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
stretchy = 2;
} else if (vdec == 4) {
if (!zrfd) {
- mp_msg(MSGT_VO, MSGL_WARN, "vo_zr: vertical decimation too high, changing to 2 (use -zrfd to keep vdec=4)\n");
+ mp_msg(MSGT_VO, MSGL_WARN, "zr: vertical decimation too high, changing to 2 (use -zrfd to keep vdec=4)\n");
vdec = 2;
}
stretchy = 2;
@@ -267,7 +305,7 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
stretchx = 4;
} else if (hdec == 4){
if (!zrfd) {
- mp_msg(MSGT_VO, MSGL_WARN, "vo_zr: horizontal decimation too high, changing to 2 (use -zrfd to keep hdec=4)\n");
+ mp_msg(MSGT_VO, MSGL_WARN, "zr: horizontal decimation too high, changing to 2 (use -zrfd to keep hdec=4)\n");
hdec = 2;
}
stretchx = 4;
@@ -278,12 +316,12 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
stretchy = 2;
fields = 1;
if (vdec != 1 && !zrfd) {
- mp_msg(MSGT_VO, MSGL_WARN, "vo_zr: vertical decimation too high, changing to 1 (use -zrfd to keep vdec=%d)\n", vdec);
+ mp_msg(MSGT_VO, MSGL_WARN, "zr: vertical decimation too high, changing to 1 (use -zrfd to keep vdec=%d)\n", vdec);
vdec = 1;
}
if (hdec != 1 && !zrfd) {
- mp_msg(MSGT_VO, MSGL_WARN, "vo_zr: vertical decimation too high, changing to 1 (use -zrfd to keep hdec=%d)\n", hdec);
+ mp_msg(MSGT_VO, MSGL_WARN, "zr: vertical decimation too high, changing to 1 (use -zrfd to keep hdec=%d)\n", hdec);
hdec = 1;
}
}
@@ -323,12 +361,12 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
off_c += (image_width - g.width)/4;
framenum = 0;
size = image_width*image_height;
- mp_msg(MSGT_VO, MSGL_V, "input: %dx%d, cropped: %dx%d, output: %dx%d, off_y=%d, off_c=%d\n", width, height, g.width, g.height, image_width, image_height, off_y, off_c);
+ mp_msg(MSGT_VO, MSGL_V, "zr: input: %dx%d, cropped: %dx%d, output: %dx%d, off_y=%d, off_c=%d\n", width, height, g.width, g.height, image_width, image_height, off_y, off_c);
image = malloc(2*size); /* this buffer allows for YUV422 data,
* so it is a bit too big for YUV420 */
if (!image) {
- mp_msg(MSGT_VO, MSGL_ERR, "Memory exhausted\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: Memory exhausted\n");
return 1;
}
/* and make sure that the borders are _really_ black */
@@ -376,12 +414,12 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
0, quality, bw);
break;
default:
- mp_msg(MSGT_VO, MSGL_FATAL, "internal inconsistency in vo_zr\n");
+ mp_msg(MSGT_VO, MSGL_FATAL, "zr: internal inconsistency in vo_zr\n");
}
if (j == NULL) {
- mp_msg(MSGT_VO, MSGL_ERR, "Error initializing the jpeg encoder\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error initializing the jpeg encoder\n");
return 1;
}
@@ -408,7 +446,7 @@ static void flip_page (void) {
frame = queue;
} else {
if (ioctl(vdes, MJPIOC_SYNC, &zs) < 0)
- mp_msg(MSGT_VO, MSGL_ERR, "error waiting for buffers to become free");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: error waiting for buffers to become free\n");
frame = zs.frame;
synco++;
}
@@ -431,7 +469,7 @@ static void flip_page (void) {
if (ioctl(vdes, MJPIOC_QBUF_PLAY, &frame) < 0)
mp_msg(MSGT_VO, MSGL_ERR,
- "error queueing buffer for playback");
+ "zr: error queueing buffer for playback\n");
queue++;
framenum++;
@@ -569,7 +607,7 @@ vo_zr_parseoption(struct config * conf, char *opt, char *param){
&g.xoff, &g.yoff) != 4) {
g.xoff = 0; g.yoff = 0;
if (sscanf(param, "%dx%d", &g.width, &g.height) != 2) {
- mp_msg(MSGT_VO, MSGL_ERR, "argument to -zrcrop must be of the form 352x288+16+0\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "zr: argument to -zrcrop must be of the form 352x288+16+0\n");
return ERR_OUT_OF_RANGE;
}
}