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:
parent
51d8ef0acf
commit
e5657a2e4b
105
libvo/vo_zr2.c
105
libvo/vo_zr2.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user