1
0
mirror of https://github.com/mpv-player/mpv synced 2025-01-11 17:39:38 +00:00

vo_zr2 moves to subopt-helper (per Alex's request)

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14429 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
rik 2005-01-08 14:25:22 +00:00
parent 51d8ef0acf
commit e5657a2e4b

View File

@ -1,7 +1,7 @@
/*
* vo_zr2.c - playback on zoran cards
* Based on vo_zr.c,v 1.27
* Copyright (C) Rik Snel 2001-2003, License GNU GPL v2
* Copyright (C) Rik Snel 2001-2005, License GNU GPL v2
*/
/* $Id$ */
@ -26,6 +26,7 @@
#include "video_out.h"
#include "video_out_internal.h"
#include "mp_msg.h"
#include "subopt-helper.h"
#include "fastmemcpy.h"
static vo_info_t info = {
@ -77,7 +78,7 @@ static void stop_playing(vo_zr2_priv_t *p) {
}
}
static char *guess_device(char *suggestion) {
static const char *guess_device(const char *suggestion, int inform) {
struct stat vstat;
int res;
char *devs[] = {
@ -98,7 +99,7 @@ static char *guess_device(char *suggestion) {
res = stat(suggestion, &vstat);
if (res == 0 && S_ISCHR(vstat.st_mode)) {
VERBOSE("using device %s\n", suggestion);
if (inform) VERBOSE("using device %s\n", suggestion);
return suggestion;
} else {
if (res != 0) ERROR("%s does not exist\n", suggestion);
@ -155,7 +156,7 @@ static uint32_t draw_image(mp_image_t *mpi) {
return VO_TRUE;
}
static char *normstring(int norm) {
static const char *normstring(int norm) {
switch (norm) {
case VIDEO_MODE_PAL:
return "PAL";
@ -169,54 +170,66 @@ static char *normstring(int norm) {
return "undefined";
}
static uint32_t preinit(const char *arg) {
char *dev = NULL, *ptr = NULL, *tmp;
vo_zr2_priv_t *p = &priv;
int last = 0, norm = VIDEO_MODE_AUTO;
static int get_norm(strarg_t *n) {
if (!strncmp(n->str, "PAL", n->len)) return VIDEO_MODE_PAL;
if (!strncmp(n->str, "NTSC", n->len)) return VIDEO_MODE_NTSC;
if (!strncmp(n->str, "SECAM", n->len)) return VIDEO_MODE_SECAM;
if (!strncmp(n->str, "auto", n->len)) return VIDEO_MODE_AUTO;
return -1; /* invalid */
}
VERBOSE("preinit() called\n");
static int nc(strarg_t *norm) {
if (get_norm(norm) == -1) {
ERROR("norm \"%.*s\" is not supported, choose from PAL, NTSC, SECAM and auto\n", norm->len, norm->str);
return 0;
} else return 1;
}
static int pbc(int *prebuf) {
if (*prebuf) WARNING("prebuffering is not yet supported\n");
return 1;
}
static uint32_t preinit(const char *arg) {
strarg_t dev_arg = { 0, NULL }, norm_arg = { 0, NULL };
vo_zr2_priv_t *p = &priv;
const char *dev = NULL;
char dev_arg_str[256];
int norm = VIDEO_MODE_AUTO, prebuf = 0;
opt_t subopts[] = { /* don't want warnings with -Wall... */
{ "dev", OPT_ARG_STR, &dev_arg, NULL, 0 },
{ "prebuf", OPT_ARG_BOOL, &prebuf, (opt_test_f)pbc, 0 },
{ "norm", OPT_ARG_STR, &norm_arg, (opt_test_f)nc, 0 },
{ NULL, 0, NULL, NULL, 0 }
};
VERBOSE("preinit() called with arg: %s\n", arg);
memset(p, 0, sizeof(*p)); /* set defaults */
p->vdes = -1;
if (arg) {
/* save subdevice string */
p->subdevice = strdup(arg);
if (!p->subdevice) {
ERROR("out of memory, this is bad\n");
uninit();
return 1;
}
tmp = ptr = p->subdevice;
do {
while (*tmp != ':' && *tmp) tmp++;
if (*tmp == ':') *tmp++ = '\0';
else last = 1;
DBG2("processing subdevice option \"%s\"\n", ptr);
if (!strncmp("dev=", ptr, 4)) {
dev = ptr + 4;
VERBOSE("user specified device \"%s\"\n", dev);
} else if (!strcasecmp("PAL", ptr)) {
norm = VIDEO_MODE_PAL;
VERBOSE("user specified video norm PAL\n");
} else if (!strcasecmp("SECAM", ptr)) {
norm = VIDEO_MODE_SECAM;
VERBOSE("user specified video norm SECAM\n");
} else if (!strcasecmp("NTSC", ptr)) {
norm = VIDEO_MODE_NTSC;
VERBOSE("user specified video norm NTSC\n");
} else if (!strcmp("prebuf", ptr)) {
WARNING("prebuffering is not yet supported\n");
} else {
WARNING("ignoring unknown subdevice option "
"\"%s\", or missing argument\n",
ptr);
}
ptr = tmp;
} while (!last);
if (subopt_parse(arg, subopts)) {
mp_msg(MSGT_VO, MSGL_FATAL,
"Allowed suboptions for -vo zr2 are:\n"
"- dev=DEVICE (default: %s)\n"
"- norm=PAL|NTSC|SECAM|auto (default: auto)\n"
"- prebuf/noprebuf (default:"
" noprebuf)\n"
"\n"
"Example: mplayer -vo zr2:dev=/dev/video1:"
"norm=PAL movie.avi\n\n"
, guess_device(NULL, 0));
return -1;
}
/* interpret the strings we got from subopt_parse */
if (norm_arg.len) norm = get_norm(&norm_arg);
if (dev_arg.len) { /* produce a proper ASCIIZ from dev_arg */
memcpy(dev_arg_str, dev_arg.str, dev_arg.len);
dev_arg_str[dev_arg.len] = '\0';
dev = dev_arg_str;
}
dev = guess_device(dev);
dev = guess_device(dev, 1);
if (!dev) {
uninit();
return 1;