1
0
mirror of https://github.com/mpv-player/mpv synced 2025-04-11 04:01:31 +00:00

Merge svn change r31134

Fix some search/replace errors introduced in the svn commit.
This commit is contained in:
Uoti Urpala 2010-05-07 22:02:47 +03:00
commit 4c6e3ac01b
14 changed files with 3631 additions and 3641 deletions

14
LICENSE
View File

@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 2, June 1991 Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc. Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
Preamble Preamble
The licenses for most software are designed to take away your The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public freedom to share and change it. By contrast, the GNU General Public
@ -56,7 +56,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and The precise terms and conditions for copying, distribution and
modification follow. modification follow.
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains 0. This License applies to any program or other work which contains
@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally. of promoting the sharing and reuse of software generally.
NO WARRANTY NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it possible use to the public, the best way to achieve this is to make it

View File

@ -112,8 +112,8 @@ asx_parse_attribs(ASX_Parser_t* parser,char* buffer,char*** _attribs) {
if(ptr3 == NULL) break; if(ptr3 == NULL) break;
for(ptr2 = ptr3-1; strchr(SPACE,*ptr2) != NULL; ptr2--) { for(ptr2 = ptr3-1; strchr(SPACE,*ptr2) != NULL; ptr2--) {
if (ptr2 == ptr1) { if (ptr2 == ptr1) {
mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : this should never append, back to attribute begin while skipping end space",parser->line); mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : this should never append, back to attribute begin while skipping end space",parser->line);
break; break;
} }
} }
attrib = malloc(ptr2-ptr1+2); attrib = malloc(ptr2-ptr1+2);
@ -159,7 +159,7 @@ asx_parse_attribs(ASX_Parser_t* parser,char* buffer,char*** _attribs) {
*/ */
int int
asx_get_element(ASX_Parser_t* parser,char** _buffer, asx_get_element(ASX_Parser_t* parser,char** _buffer,
char** _element,char** _body,char*** _attribs) { char** _element,char** _body,char*** _attribs) {
char *ptr1,*ptr2, *ptr3, *ptr4; char *ptr1,*ptr2, *ptr3, *ptr4;
char *attribs = NULL; char *attribs = NULL;
char *element = NULL, *body = NULL, *ret = NULL, *buffer; char *element = NULL, *body = NULL, *ret = NULL, *buffer;
@ -183,21 +183,21 @@ asx_get_element(ASX_Parser_t* parser,char** _buffer,
int i; int i;
for(i = 0 ; i < parser->ret_stack_size ; i++) { for(i = 0 ; i < parser->ret_stack_size ; i++) {
if(buffer == ls[i].buffer) { if(buffer == ls[i].buffer) {
parser->line = ls[i].line; parser->line = ls[i].line;
break; break;
} }
} }
if( i < parser->ret_stack_size) { if( i < parser->ret_stack_size) {
i++; i++;
if( i < parser->ret_stack_size) if( i < parser->ret_stack_size)
memmove(parser->ret_stack,parser->ret_stack+i, (parser->ret_stack_size - i)*sizeof(ASX_LineSave_t)); memmove(parser->ret_stack,parser->ret_stack+i, (parser->ret_stack_size - i)*sizeof(ASX_LineSave_t));
parser->ret_stack_size -= i; parser->ret_stack_size -= i;
if(parser->ret_stack_size > 0) if(parser->ret_stack_size > 0)
parser->ret_stack = realloc(parser->ret_stack,parser->ret_stack_size*sizeof(ASX_LineSave_t)); parser->ret_stack = realloc(parser->ret_stack,parser->ret_stack_size*sizeof(ASX_LineSave_t));
else { else {
free(parser->ret_stack); free(parser->ret_stack);
parser->ret_stack = NULL; parser->ret_stack = NULL;
} }
} }
} }
@ -206,8 +206,8 @@ asx_get_element(ASX_Parser_t* parser,char** _buffer,
while(1) { while(1) {
for( ; ptr1[0] != '<' ; ptr1++) { for( ; ptr1[0] != '<' ; ptr1++) {
if(ptr1[0] == '\0') { if(ptr1[0] == '\0') {
ptr1 = NULL; ptr1 = NULL;
break; break;
} }
if(ptr1[0] == '\n') parser->line++; if(ptr1[0] == '\n') parser->line++;
} }
@ -216,16 +216,16 @@ asx_get_element(ASX_Parser_t* parser,char** _buffer,
if(strncmp(ptr1,"<!--",4) == 0) { // Comments if(strncmp(ptr1,"<!--",4) == 0) { // Comments
for( ; strncmp(ptr1,"-->",3) != 0 ; ptr1++) { for( ; strncmp(ptr1,"-->",3) != 0 ; ptr1++) {
if(ptr1[0] == '\0') { if(ptr1[0] == '\0') {
ptr1 = NULL; ptr1 = NULL;
break; break;
} }
if(ptr1[0] == '\n') parser->line++; if(ptr1[0] == '\n') parser->line++;
} }
//ptr1 = strstr(ptr1,"-->"); //ptr1 = strstr(ptr1,"-->");
if(!ptr1) { if(!ptr1) {
mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : unfinished comment",parser->line); mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : unfinished comment",parser->line);
return -1; return -1;
} }
} else { } else {
break; break;
@ -288,10 +288,10 @@ asx_get_element(ASX_Parser_t* parser,char** _buffer,
ptr3++; ptr3++;
for( ; strchr(SPACE,*ptr3) != NULL; ptr3++) { // Skip space on body begin for( ; strchr(SPACE,*ptr3) != NULL; ptr3++) { // Skip space on body begin
if(*ptr3 == '\0') { if(*ptr3 == '\0') {
mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : EOB reached while parsing %s element body",parser->line,element); mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : EOB reached while parsing %s element body",parser->line,element);
free(element); free(element);
if(attribs) free(attribs); if(attribs) free(attribs);
return -1; return -1;
} }
if(ptr3[0] == '\n') parser->line++; if(ptr3[0] == '\n') parser->line++;
} }
@ -299,52 +299,52 @@ asx_get_element(ASX_Parser_t* parser,char** _buffer,
body_line = parser->line; body_line = parser->line;
while(1) { // Find closing element while(1) { // Find closing element
for( ; ptr4[0] != '<' ; ptr4++) { for( ; ptr4[0] != '<' ; ptr4++) {
if(ptr4[0] == '\0') { if(ptr4[0] == '\0') {
ptr4 = NULL; ptr4 = NULL;
break; break;
} }
if(ptr4[0] == '\n') parser->line++; if(ptr4[0] == '\n') parser->line++;
} }
if(ptr4 && strncmp(ptr4,"<!--",4) == 0) { // Comments if(ptr4 && strncmp(ptr4,"<!--",4) == 0) { // Comments
for( ; strncmp(ptr4,"-->",3) != 0 ; ptr4++) { for( ; strncmp(ptr4,"-->",3) != 0 ; ptr4++) {
if(ptr4[0] == '\0') { if(ptr4[0] == '\0') {
ptr4 = NULL; ptr4 = NULL;
break; break;
} }
if(ptr1[0] == '\n') parser->line++; if(ptr1[0] == '\n') parser->line++;
} }
continue; continue;
} }
if(ptr4 == NULL || ptr4[1] == '\0') { if(ptr4 == NULL || ptr4[1] == '\0') {
mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : EOB reached while parsing %s element body",parser->line,element); mp_msg(MSGT_PLAYTREE,MSGL_ERR,"At line %d : EOB reached while parsing %s element body",parser->line,element);
free(element); free(element);
if(attribs) free(attribs); if(attribs) free(attribs);
return -1; return -1;
} }
if(ptr4[1] != '/' && strncasecmp(element,ptr4+1,strlen(element)) == 0) { if(ptr4[1] != '/' && strncasecmp(element,ptr4+1,strlen(element)) == 0) {
in++; in++;
ptr4+=2; ptr4+=2;
continue; continue;
} else if(strncasecmp(element,ptr4+2,strlen(element)) == 0) { // Extract body } else if(strncasecmp(element,ptr4+2,strlen(element)) == 0) { // Extract body
if(in > 0) { if(in > 0) {
in--; in--;
ptr4 += 2+strlen(element); ptr4 += 2+strlen(element);
continue; continue;
} }
ret = ptr4+strlen(element)+3; ret = ptr4+strlen(element)+3;
if(ptr4 != ptr3) { if(ptr4 != ptr3) {
ptr4--; ptr4--;
for( ; ptr4 != ptr3 && strchr(SPACE,*ptr4) != NULL; ptr4--) ;// Skip space on body end for( ; ptr4 != ptr3 && strchr(SPACE,*ptr4) != NULL; ptr4--) ;// Skip space on body end
// if(ptr4[0] == '\0') parser->line--; // if(ptr4[0] == '\0') parser->line--;
//} //}
ptr4++; ptr4++;
body = malloc(ptr4-ptr3+1); body = malloc(ptr4-ptr3+1);
strncpy(body,ptr3,ptr4-ptr3); strncpy(body,ptr3,ptr4-ptr3);
body[ptr4-ptr3] = '\0'; body[ptr4-ptr3] = '\0';
} }
break; break;
} else { } else {
ptr4 += 2; ptr4 += 2;
} }
} }
} else { } else {
@ -543,23 +543,23 @@ asx_parse_repeat(ASX_Parser_t* parser,char* buffer,char** _attribs) {
if(strcasecmp(element,"ENTRY") == 0) { if(strcasecmp(element,"ENTRY") == 0) {
entry = asx_parse_entry(parser,body,attribs); entry = asx_parse_entry(parser,body,attribs);
if(entry) { if(entry) {
if(!list) list = entry; if(!list) list = entry;
else play_tree_append_entry(list,entry); else play_tree_append_entry(list,entry);
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to repeat\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to repeat\n",element);
} }
} else if(strcasecmp(element,"ENTRYREF") == 0) { } else if(strcasecmp(element,"ENTRYREF") == 0) {
entry = asx_parse_entryref(parser,body,attribs); entry = asx_parse_entryref(parser,body,attribs);
if(entry) { if(entry) {
if(!list) list = entry; if(!list) list = entry;
else play_tree_append_entry(list,entry); else play_tree_append_entry(list,entry);
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to repeat\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to repeat\n",element);
} }
} else if(strcasecmp(element,"REPEAT") == 0) { } else if(strcasecmp(element,"REPEAT") == 0) {
entry = asx_parse_repeat(parser,body,attribs); entry = asx_parse_repeat(parser,body,attribs);
if(entry) { if(entry) {
if(!list) list = entry; if(!list) list = entry;
else play_tree_append_entry(list,entry); else play_tree_append_entry(list,entry);
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to repeat\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to repeat\n",element);
} }
} else if(strcasecmp(element,"PARAM") == 0) { } else if(strcasecmp(element,"PARAM") == 0) {
asx_parse_param(parser,attribs,repeat); asx_parse_param(parser,attribs,repeat);
@ -630,23 +630,23 @@ asx_parser_build_tree(struct m_config *mconfig, char* buffer,int deep) {
if(strcasecmp(element,"ENTRY") == 0) { if(strcasecmp(element,"ENTRY") == 0) {
entry = asx_parse_entry(parser,body,attribs); entry = asx_parse_entry(parser,body,attribs);
if(entry) { if(entry) {
if(!list) list = entry; if(!list) list = entry;
else play_tree_append_entry(list,entry); else play_tree_append_entry(list,entry);
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to asx\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to asx\n",element);
} }
} else if(strcasecmp(element,"ENTRYREF") == 0) { } else if(strcasecmp(element,"ENTRYREF") == 0) {
entry = asx_parse_entryref(parser,body,attribs); entry = asx_parse_entryref(parser,body,attribs);
if(entry) { if(entry) {
if(!list) list = entry; if(!list) list = entry;
else play_tree_append_entry(list,entry); else play_tree_append_entry(list,entry);
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to asx\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to asx\n",element);
} }
} else if(strcasecmp(element,"REPEAT") == 0) { } else if(strcasecmp(element,"REPEAT") == 0) {
entry = asx_parse_repeat(parser,body,attribs); entry = asx_parse_repeat(parser,body,attribs);
if(entry) { if(entry) {
if(!list) list = entry; if(!list) list = entry;
else play_tree_append_entry(list,entry); else play_tree_append_entry(list,entry);
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to asx\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Adding element %s to asx\n",element);
} }
} else } else
mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Ignoring element %s\n",element); mp_msg(MSGT_PLAYTREE,MSGL_DBG2,"Ignoring element %s\n",element);

View File

@ -49,7 +49,7 @@ asx_parser_free(ASX_Parser_t* parser);
*/ */
int int
asx_get_element(ASX_Parser_t* parser,char** _buffer, asx_get_element(ASX_Parser_t* parser,char** _buffer,
char** _element,char** _body,char*** _attribs); char** _element,char** _body,char*** _attribs);
int int
asx_parse_attribs(ASX_Parser_t* parser,char* buffer,char*** _attribs); asx_parse_attribs(ASX_Parser_t* parser,char* buffer,char*** _attribs);

View File

@ -17,349 +17,345 @@
*/ */
// ------------------------- common options -------------------- // ------------------------- common options --------------------
{"quiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"quiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"noquiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"noquiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
{"really-quiet", &verbose, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_PRE_PARSE, 0, -10, NULL}, {"really-quiet", &verbose, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_PRE_PARSE, 0, -10, NULL},
{"v", cfg_inc_verbose, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOSAVE, 0, 0, NULL}, {"v", cfg_inc_verbose, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOSAVE, 0, 0, NULL},
{"msglevel", (void *) msgl_config, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"msglevel", (void *) msgl_config, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
{"msgcolor", &mp_msg_color, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"msgcolor", &mp_msg_color, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nomsgcolor", &mp_msg_color, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nomsgcolor", &mp_msg_color, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
{"msgmodule", &mp_msg_module, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"msgmodule", &mp_msg_module, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nomsgmodule", &mp_msg_module, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nomsgmodule", &mp_msg_module, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
#ifdef CONFIG_ICONV #ifdef CONFIG_ICONV
{"msgcharset", &mp_msg_charset, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"msgcharset", &mp_msg_charset, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_PRIORITY #ifdef CONFIG_PRIORITY
{"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
{"codecpath", &codec_path, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"codecpath", &codec_path, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"noconfig", (void *) noconfig_opts, CONF_TYPE_SUBCONFIG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 0, NULL}, {"noconfig", (void *) noconfig_opts, CONF_TYPE_SUBCONFIG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 0, NULL},
// ------------------------- stream options -------------------- // ------------------------- stream options --------------------
#ifdef CONFIG_STREAM_CACHE #ifdef CONFIG_STREAM_CACHE
{"cache", &stream_cache_size, CONF_TYPE_INT, CONF_RANGE, 32, 1048576, NULL}, {"cache", &stream_cache_size, CONF_TYPE_INT, CONF_RANGE, 32, 1048576, NULL},
{"nocache", &stream_cache_size, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nocache", &stream_cache_size, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"cache-min", &stream_cache_min_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL}, {"cache-min", &stream_cache_min_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL},
{"cache-seek-min", &stream_cache_seek_min_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL}, {"cache-seek-min", &stream_cache_seek_min_percent, CONF_TYPE_FLOAT, CONF_RANGE, 0, 99, NULL},
#else #else
{"cache", "MPlayer was compiled without cache2 support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"cache", "MPlayer was compiled without cache2 support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_STREAM_CACHE */ #endif /* CONFIG_STREAM_CACHE */
{"vcd", "-vcd N has been removed, use vcd://N instead.\n", CONF_TYPE_PRINT, CONF_NOCFG ,0,0, NULL}, {"vcd", "-vcd N has been removed, use vcd://N instead.\n", CONF_TYPE_PRINT, CONF_NOCFG ,0,0, NULL},
{"cuefile", "-cuefile has been removed, use cue://filename:N where N is the track number.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"cuefile", "-cuefile has been removed, use cue://filename:N where N is the track number.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"cdrom-device", &cdrom_device, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"cdrom-device", &cdrom_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
#ifdef CONFIG_DVDREAD #ifdef CONFIG_DVDREAD
{"dvd-device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"dvd-device", &dvd_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"dvd-speed", &dvd_speed, CONF_TYPE_INT, 0, 0, 0, NULL}, {"dvd-speed", &dvd_speed, CONF_TYPE_INT, 0, 0, 0, NULL},
{"dvd", "-dvd N has been removed, use dvd://N instead.\n" , CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"dvd", "-dvd N has been removed, use dvd://N instead.\n" , CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"dvdangle", &dvd_angle, CONF_TYPE_INT, CONF_RANGE, 1, 99, NULL}, {"dvdangle", &dvd_angle, CONF_TYPE_INT, CONF_RANGE, 1, 99, NULL},
#else #else
{"dvd-device", "MPlayer was compiled without libdvdread support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"dvd-device", "MPlayer was compiled without libdvdread support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"dvd-speed", "MPlayer was compiled without libdvdread support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"dvd-speed", "MPlayer was compiled without libdvdread support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"dvd", "MPlayer was compiled without libdvdread support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"dvd", "MPlayer was compiled without libdvdread support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_DVDREAD */ #endif /* CONFIG_DVDREAD */
OPT_INTPAIR("chapter", chapterrange, 0), OPT_INTPAIR("chapter", chapterrange, 0),
OPT_INTRANGE("edition", edition_id, 0, -1, 8190), OPT_INTRANGE("edition", edition_id, 0, -1, 8190),
{"alang", &audio_lang, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"alang", &audio_lang, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"slang", &dvdsub_lang, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"slang", &dvdsub_lang, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"dvdauth", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"dvdauth", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"dvdkey", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"dvdkey", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"csslib", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"csslib", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#ifdef CONFIG_NETWORK #ifdef CONFIG_NETWORK
{"user", &network_username, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"user", &network_username, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"passwd", &network_password, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"passwd", &network_password, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"bandwidth", &network_bandwidth, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL}, {"bandwidth", &network_bandwidth, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
{"user-agent", &network_useragent, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"user-agent", &network_useragent, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"cookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"cookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nocookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nocookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"cookies-file", &cookies_file, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"cookies-file", &cookies_file, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"prefer-ipv4", &network_prefer_ipv4, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"prefer-ipv4", &network_prefer_ipv4, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"ipv4-only-proxy", &network_ipv4_only_proxy, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"ipv4-only-proxy", &network_ipv4_only_proxy, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"reuse-socket", &reuse_socket, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"reuse-socket", &reuse_socket, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"noreuse-socket", &reuse_socket, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"noreuse-socket", &reuse_socket, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
#ifdef HAVE_AF_INET6 #ifdef HAVE_AF_INET6
{"prefer-ipv6", &network_prefer_ipv4, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"prefer-ipv6", &network_prefer_ipv4, CONF_TYPE_FLAG, 0, 1, 0, NULL},
#else #else
{"prefer-ipv6", "MPlayer was compiled without IPv6 support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"prefer-ipv6", "MPlayer was compiled without IPv6 support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif /* HAVE_AF_INET6 */ #endif /* HAVE_AF_INET6 */
#else #else
{"user", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"user", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"passwd", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"passwd", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"bandwidth", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"bandwidth", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"user-agent", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"user-agent", "MPlayer was compiled without streaming (network) support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_NETWORK */ #endif /* CONFIG_NETWORK */
#ifdef CONFIG_LIVE555 #ifdef CONFIG_LIVE555
{"sdp", "-sdp has been removed, use sdp://file instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"sdp", "-sdp has been removed, use sdp://file instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif /* CONFIG_LIVE555 */ #endif /* CONFIG_LIVE555 */
#if defined(CONFIG_LIBNEMESI) || defined(CONFIG_LIVE555) #if defined(CONFIG_LIBNEMESI) || defined(CONFIG_LIVE555)
// -rtsp-stream-over-tcp option, specifying TCP streaming of RTP/RTCP // -rtsp-stream-over-tcp option, specifying TCP streaming of RTP/RTCP
{"rtsp-stream-over-tcp", &rtsp_transport_tcp, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"rtsp-stream-over-tcp", &rtsp_transport_tcp, CONF_TYPE_FLAG, 0, 0, 1, NULL},
#else #else
{"rtsp-stream-over-tcp", "-rtsp-stream-over-tcp requires the \"LIVE555 Streaming Media\" or \"libnemesi\" libraries.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"rtsp-stream-over-tcp", "-rtsp-stream-over-tcp requires the \"LIVE555 Streaming Media\" or \"libnemesi\" libraries.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* defined(CONFIG_LIBNEMESI) || defined(CONFIG_LIVE555) */ #endif /* defined(CONFIG_LIBNEMESI) || defined(CONFIG_LIVE555) */
#ifdef CONFIG_LIBNEMESI #ifdef CONFIG_LIBNEMESI
{"rtsp-stream-over-sctp", &rtsp_transport_sctp, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"rtsp-stream-over-sctp", &rtsp_transport_sctp, CONF_TYPE_FLAG, 0, 0, 1, NULL},
#else #else
{"rtsp-stream-over-sctp", "-rtsp-stream-over-sctp requires the \"libnemesi\" library\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"rtsp-stream-over-sctp", "-rtsp-stream-over-sctp requires the \"libnemesi\" library\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_LIBNEMESI */ #endif /* CONFIG_LIBNEMESI */
#ifdef CONFIG_NETWORK #ifdef CONFIG_NETWORK
{"rtsp-port", &rtsp_port, CONF_TYPE_INT, CONF_RANGE, -1, 65535, NULL}, {"rtsp-port", &rtsp_port, CONF_TYPE_INT, CONF_RANGE, -1, 65535, NULL},
{"rtsp-destination", &rtsp_destination, CONF_TYPE_STRING, CONF_MIN, 0, 0, NULL}, {"rtsp-destination", &rtsp_destination, CONF_TYPE_STRING, CONF_MIN, 0, 0, NULL},
#else #else
{"rtsp-port", "MPlayer was compiled without network support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"rtsp-port", "MPlayer was compiled without network support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"rtsp-destination", "MPlayer was compiled without network support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"rtsp-destination", "MPlayer was compiled without network support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_NETWORK */ #endif /* CONFIG_NETWORK */
// ------------------------- demuxer options -------------------- // ------------------------- demuxer options --------------------
// number of frames to play/convert // number of frames to play/convert
{"frames", &play_n_frames_mf, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL}, {"frames", &play_n_frames_mf, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
// seek to byte/seconds position // seek to byte/seconds position
{"sb", &seek_to_byte, CONF_TYPE_POSITION, CONF_MIN, 0, 0, NULL}, {"sb", &seek_to_byte, CONF_TYPE_POSITION, CONF_MIN, 0, 0, NULL},
{"ss", &seek_to_sec, CONF_TYPE_TIME, 0, 0, 0, NULL}, {"ss", &seek_to_sec, CONF_TYPE_TIME, 0, 0, 0, NULL},
// stop at given position // stop at given position
{"endpos", &end_at, CONF_TYPE_TIME_SIZE, 0, 0, 0, NULL}, {"endpos", &end_at, CONF_TYPE_TIME_SIZE, 0, 0, 0, NULL},
{"edl", &edl_filename, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"edl", &edl_filename, CONF_TYPE_STRING, 0, 0, 0, NULL},
// AVI specific: force non-interleaved mode // AVI specific: force non-interleaved mode
{"ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noni", &force_ni, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noni", &force_ni, CONF_TYPE_FLAG, 0, 1, 0, NULL},
// AVI and Ogg only: (re)build index at startup // AVI and Ogg only: (re)build index at startup
{"noidx", &index_mode, CONF_TYPE_FLAG, 0, -1, 0, NULL}, {"noidx", &index_mode, CONF_TYPE_FLAG, 0, -1, 0, NULL},
{"idx", &index_mode, CONF_TYPE_FLAG, 0, -1, 1, NULL}, {"idx", &index_mode, CONF_TYPE_FLAG, 0, -1, 1, NULL},
{"forceidx", &index_mode, CONF_TYPE_FLAG, 0, -1, 2, NULL}, {"forceidx", &index_mode, CONF_TYPE_FLAG, 0, -1, 2, NULL},
{"saveidx", &index_file_save, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"saveidx", &index_file_save, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"loadidx", &index_file_load, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"loadidx", &index_file_load, CONF_TYPE_STRING, 0, 0, 0, NULL},
// select audio/video/subtitle stream // select audio/video/subtitle stream
OPT_INTRANGE("aid", audio_id, 0, -2, 8190), OPT_INTRANGE("aid", audio_id, 0, -2, 8190),
{"ausid", &audio_substream_id, CONF_TYPE_INT, 0, 0, 0, NULL}, {"ausid", &audio_substream_id, CONF_TYPE_INT, 0, 0, 0, NULL},
OPT_INTRANGE("vid", video_id, 0, -2, 8190), OPT_INTRANGE("vid", video_id, 0, -2, 8190),
OPT_INTRANGE("sid", sub_id, 0, -2, 8190), OPT_INTRANGE("sid", sub_id, 0, -2, 8190),
OPT_FLAG_CONSTANTS("nosub", sub_id, 0, -1, -2), OPT_FLAG_CONSTANTS("nosub", sub_id, 0, -1, -2),
OPT_FLAG_CONSTANTS("novideo", video_id, 0, -1, -2), OPT_FLAG_CONSTANTS("novideo", video_id, 0, -1, -2),
{ "hr-mp3-seek", &hr_mp3_seek, CONF_TYPE_FLAG, 0, 0, 1, NULL }, { "hr-mp3-seek", &hr_mp3_seek, CONF_TYPE_FLAG, 0, 0, 1, NULL },
{ "nohr-mp3-seek", &hr_mp3_seek, CONF_TYPE_FLAG, 0, 1, 0, NULL}, { "nohr-mp3-seek", &hr_mp3_seek, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{ "rawaudio", &demux_rawaudio_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, { "rawaudio", &demux_rawaudio_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
{ "rawvideo", &demux_rawvideo_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, { "rawvideo", &demux_rawvideo_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#ifdef CONFIG_CDDA #ifdef CONFIG_CDDA
{ "cdda", &cdda_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, { "cdda", &cdda_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#endif #endif
// demuxer.c - select audio/sub file/demuxer // demuxer.c - select audio/sub file/demuxer
{ "audiofile", &audio_stream, CONF_TYPE_STRING, 0, 0, 0, NULL }, { "audiofile", &audio_stream, CONF_TYPE_STRING, 0, 0, 0, NULL },
{ "audiofile-cache", &audio_stream_cache, CONF_TYPE_INT, CONF_RANGE, 50, 65536, NULL}, { "audiofile-cache", &audio_stream_cache, CONF_TYPE_INT, CONF_RANGE, 50, 65536, NULL},
{ "subfile", &sub_stream, CONF_TYPE_STRING, 0, 0, 0, NULL }, { "subfile", &sub_stream, CONF_TYPE_STRING, 0, 0, 0, NULL },
{ "demuxer", &demuxer_name, CONF_TYPE_STRING, 0, 0, 0, NULL }, { "demuxer", &demuxer_name, CONF_TYPE_STRING, 0, 0, 0, NULL },
{ "audio-demuxer", &audio_demuxer_name, CONF_TYPE_STRING, 0, 0, 0, NULL }, { "audio-demuxer", &audio_demuxer_name, CONF_TYPE_STRING, 0, 0, 0, NULL },
{ "sub-demuxer", &sub_demuxer_name, CONF_TYPE_STRING, 0, 0, 0, NULL }, { "sub-demuxer", &sub_demuxer_name, CONF_TYPE_STRING, 0, 0, 0, NULL },
{ "extbased", &extension_parsing, CONF_TYPE_FLAG, 0, 0, 1, NULL }, { "extbased", &extension_parsing, CONF_TYPE_FLAG, 0, 0, 1, NULL },
{ "noextbased", &extension_parsing, CONF_TYPE_FLAG, 0, 1, 0, NULL }, { "noextbased", &extension_parsing, CONF_TYPE_FLAG, 0, 1, 0, NULL },
{"mf", (void *) mfopts_conf, CONF_TYPE_SUBCONFIG, 0,0,0, NULL}, {"mf", (void *) mfopts_conf, CONF_TYPE_SUBCONFIG, 0,0,0, NULL},
#ifdef CONFIG_RADIO #ifdef CONFIG_RADIO
{"radio", radioopts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"radio", radioopts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#else #else
{"radio", "MPlayer was compiled without Radio interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"radio", "MPlayer was compiled without Radio interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif /* CONFIG_RADIO */ #endif /* CONFIG_RADIO */
#ifdef CONFIG_TV #ifdef CONFIG_TV
{"tv", (void *) tvopts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"tv", (void *) tvopts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#else #else
{"tv", "MPlayer was compiled without TV interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"tv", "MPlayer was compiled without TV interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif /* CONFIG_TV */ #endif /* CONFIG_TV */
#ifdef CONFIG_PVR #ifdef CONFIG_PVR
{"pvr", (void *) pvropts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"pvr", (void *) pvropts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#else #else
{"pvr", "MPlayer was compiled without V4L2/PVR interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"pvr", "MPlayer was compiled without V4L2/PVR interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif /* CONFIG_PVR */ #endif /* CONFIG_PVR */
{"vivo", (void *) vivoopts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"vivo", (void *) vivoopts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#ifdef CONFIG_DVBIN #ifdef CONFIG_DVBIN
{"dvbin", (void *) dvbin_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"dvbin", (void *) dvbin_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#endif #endif
// ------------------------- a-v sync options -------------------- // ------------------------- a-v sync options --------------------
// AVI specific: A-V sync mode (bps vs. interleaving) // AVI specific: A-V sync mode (bps vs. interleaving)
{"bps", &pts_from_bps, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"bps", &pts_from_bps, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nobps", &pts_from_bps, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nobps", &pts_from_bps, CONF_TYPE_FLAG, 0, 1, 0, NULL},
// set A-V sync correction speed (0=disables it): // set A-V sync correction speed (0=disables it):
{"mc", &default_max_pts_correction, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL}, {"mc", &default_max_pts_correction, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL},
// force video/audio rate: // force video/audio rate:
{"fps", &force_fps, CONF_TYPE_DOUBLE, CONF_MIN, 0, 0, NULL}, {"fps", &force_fps, CONF_TYPE_DOUBLE, CONF_MIN, 0, 0, NULL},
{"srate", &force_srate, CONF_TYPE_INT, CONF_RANGE, 1000, 8*48000, NULL}, {"srate", &force_srate, CONF_TYPE_INT, CONF_RANGE, 1000, 8*48000, NULL},
{"channels", &audio_output_channels, CONF_TYPE_INT, CONF_RANGE, 1, 8, NULL}, {"channels", &audio_output_channels, CONF_TYPE_INT, CONF_RANGE, 1, 8, NULL},
{"format", &audio_output_format, CONF_TYPE_AFMT, 0, 0, 0, NULL}, {"format", &audio_output_format, CONF_TYPE_AFMT, 0, 0, 0, NULL},
OPT_FLOATRANGE("speed", playback_speed, 0, 0.01, 100.0), OPT_FLOATRANGE("speed", playback_speed, 0, 0.01, 100.0),
// set a-v distance // set a-v distance
{"delay", &audio_delay, CONF_TYPE_FLOAT, CONF_RANGE, -100.0, 100.0, NULL}, {"delay", &audio_delay, CONF_TYPE_FLOAT, CONF_RANGE, -100.0, 100.0, NULL},
// ignore header-specified delay (dwStart) // ignore header-specified delay (dwStart)
{"ignore-start", &ignore_start, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"ignore-start", &ignore_start, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noignore-start", &ignore_start, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noignore-start", &ignore_start, CONF_TYPE_FLAG, 0, 1, 0, NULL},
#ifdef CONFIG_LIBA52 #ifdef CONFIG_LIBA52
{"a52drc", &a52_drc_level, CONF_TYPE_FLOAT, CONF_RANGE, 0, 1, NULL}, {"a52drc", &a52_drc_level, CONF_TYPE_FLOAT, CONF_RANGE, 0, 1, NULL},
#endif #endif
// ------------------------- codec/vfilter options -------------------- // ------------------------- codec/vfilter options --------------------
// MP3-only: select stereo/left/right // MP3-only: select stereo/left/right
#ifdef CONFIG_FAKE_MONO #ifdef CONFIG_FAKE_MONO
{"stereo", &fakemono, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL}, {"stereo", &fakemono, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL},
#endif #endif
// disable audio // disable audio
OPT_FLAG_CONSTANTS("sound", audio_id, 0, -2, -1), OPT_FLAG_CONSTANTS("sound", audio_id, 0, -2, -1),
OPT_FLAG_CONSTANTS("nosound", audio_id, 0, -1, -2), OPT_FLAG_CONSTANTS("nosound", audio_id, 0, -1, -2),
{"af*", &af_cfg.list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"af*", &af_cfg.list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"af-adv", (void *) audio_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"af-adv", (void *) audio_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
{"vop", "-vop has been removed, use -vf instead.\n", CONF_TYPE_PRINT, CONF_NOCFG ,0,0, NULL}, {"vop", "-vop has been removed, use -vf instead.\n", CONF_TYPE_PRINT, CONF_NOCFG ,0,0, NULL},
OPT_SETTINGSLIST("vf*", vf_settings, 0, &vf_obj_list), OPT_SETTINGSLIST("vf*", vf_settings, 0, &vf_obj_list),
// select audio/video codec (by name) or codec family (by number): // select audio/video codec (by name) or codec family (by number):
// {"afm", &audio_family, CONF_TYPE_INT, CONF_MIN, 0, 22, NULL}, // keep ranges in sync {"afm", &audio_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
// {"vfm", &video_family, CONF_TYPE_INT, CONF_MIN, 0, 29, NULL}, // with codec-cfg.c {"vfm", &video_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
// {"afm", &audio_fm, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"ac", &audio_codec_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"afm", &audio_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"vc", &video_codec_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"vfm", &video_fm_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
// {"ac", &audio_codec, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"ac", &audio_codec_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"vc", &video_codec_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
// postprocessing: // postprocessing:
#ifdef CONFIG_LIBAVCODEC #ifdef CONFIG_LIBAVCODEC
{"pp", &divx_quality, CONF_TYPE_INT, 0, 0, 0, NULL}, {"pp", &divx_quality, CONF_TYPE_INT, 0, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_LIBPOSTPROC #ifdef CONFIG_LIBPOSTPROC
{"pphelp", &pp_help, CONF_TYPE_PRINT_INDIRECT, CONF_NOCFG, 0, 0, NULL}, {"pphelp", &pp_help, CONF_TYPE_PRINT_INDIRECT, CONF_NOCFG, 0, 0, NULL},
#endif #endif
// scaling: // scaling:
{"sws", &sws_flags, CONF_TYPE_INT, 0, 0, 2, NULL}, {"sws", &sws_flags, CONF_TYPE_INT, 0, 0, 2, NULL},
{"ssf", (void *) scaler_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"ssf", (void *) scaler_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
OPT_FLAG_ON("zoom", softzoom, 0), OPT_FLAG_ON("zoom", softzoom, 0),
OPT_FLAG_OFF("nozoom", softzoom, 0), OPT_FLAG_OFF("nozoom", softzoom, 0),
OPT_FLOATRANGE("aspect", movie_aspect, 0, 0.2, 3.0), OPT_FLOATRANGE("aspect", movie_aspect, 0, 0.2, 3.0),
OPT_FLAG_CONSTANTS("noaspect", movie_aspect, 0, 0, 0), OPT_FLAG_CONSTANTS("noaspect", movie_aspect, 0, 0, 0),
OPT_FLOATRANGE("xy", screen_size_xy, 0, 0.001, 4096), OPT_FLOATRANGE("xy", screen_size_xy, 0, 0.001, 4096),
OPT_FLAG_CONSTANTS("flip", flip, 0, -1, 1), OPT_FLAG_CONSTANTS("flip", flip, 0, -1, 1),
OPT_FLAG_CONSTANTS("noflip", flip, 0, -1, 0), OPT_FLAG_CONSTANTS("noflip", flip, 0, -1, 0),
{"tsfastparse", "-tsfastparse is no longer a valid option.\n", CONF_TYPE_PRINT, CONF_NOCFG ,0,0, NULL {"tsfastparse", "-tsfastparse is no longer a valid option.\n", CONF_TYPE_PRINT, CONF_NOCFG ,0,0, NULL
}, },
{"tsprog", &ts_prog, CONF_TYPE_INT, CONF_RANGE, 0, 65534, NULL}, {"tsprog", &ts_prog, CONF_TYPE_INT, CONF_RANGE, 0, 65534, NULL},
#define TS_MAX_PROBE_SIZE 2000000 /* don't forget to change this in libmpdemux/demux_ts.c too */ #define TS_MAX_PROBE_SIZE 2000000 /* don't forget to change this in libmpdemux/demux_ts.c too */
{"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, {"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL},
{"psprobe", &ps_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, {"psprobe", &ps_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL},
{"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL},
// draw by slices or whole frame (useful with libmpeg2/libavcodec) // draw by slices or whole frame (useful with libmpeg2/libavcodec)
OPT_FLAG_ON("slices", vd_use_slices, 0), OPT_FLAG_ON("slices", vd_use_slices, 0),
OPT_FLAG_OFF("noslices", vd_use_slices, 0), OPT_FLAG_OFF("noslices", vd_use_slices, 0),
{"field-dominance", &field_dominance, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL}, {"field-dominance", &field_dominance, CONF_TYPE_INT, CONF_RANGE, -1, 1, NULL},
#ifdef CONFIG_LIBAVCODEC #ifdef CONFIG_LIBAVCODEC
{"lavdopts", (void *) lavc_decode_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"lavdopts", (void *) lavc_decode_opts_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_LIBAVFORMAT #ifdef CONFIG_LIBAVFORMAT
{"lavfdopts", (void *) lavfdopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"lavfdopts", (void *) lavfdopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_XVID4 #ifdef CONFIG_XVID4
{"xvidopts", xvid_dec_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"xvidopts", xvid_dec_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#endif #endif
{"codecs-file", &codecs_file, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"codecs-file", &codecs_file, CONF_TYPE_STRING, 0, 0, 0, NULL},
// ------------------------- subtitles options -------------------- // ------------------------- subtitles options --------------------
{"sub", &sub_name, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"sub", &sub_name, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
#ifdef CONFIG_FRIBIDI #ifdef CONFIG_FRIBIDI
{"fribidi-charset", &fribidi_charset, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"fribidi-charset", &fribidi_charset, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"flip-hebrew", &flip_hebrew, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"flip-hebrew", &flip_hebrew, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noflip-hebrew", &flip_hebrew, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noflip-hebrew", &flip_hebrew, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"flip-hebrew-commas", &fribidi_flip_commas, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"flip-hebrew-commas", &fribidi_flip_commas, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"noflip-hebrew-commas", &fribidi_flip_commas, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"noflip-hebrew-commas", &fribidi_flip_commas, CONF_TYPE_FLAG, 0, 0, 1, NULL},
#else #else
{"fribidi-charset", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"fribidi-charset", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"flip-hebrew", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"flip-hebrew", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"noflip-hebrew", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"noflip-hebrew", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"flip-hebrew-commas", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"flip-hebrew-commas", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"noflip-hebrew-commas", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"noflip-hebrew-commas", "MPlayer was compiled without FriBiDi support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_FRIBIDI */ #endif /* CONFIG_FRIBIDI */
#ifdef CONFIG_ICONV #ifdef CONFIG_ICONV
{"subcp", &sub_cp, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"subcp", &sub_cp, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
{"subdelay", &sub_delay, CONF_TYPE_FLOAT, 0, 0.0, 10.0, NULL}, {"subdelay", &sub_delay, CONF_TYPE_FLOAT, 0, 0.0, 10.0, NULL},
{"subfps", &sub_fps, CONF_TYPE_FLOAT, 0, 0.0, 10.0, NULL}, {"subfps", &sub_fps, CONF_TYPE_FLOAT, 0, 0.0, 10.0, NULL},
{"autosub", &sub_auto, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"autosub", &sub_auto, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noautosub", &sub_auto, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noautosub", &sub_auto, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"unicode", &sub_unicode, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"unicode", &sub_unicode, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nounicode", &sub_unicode, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nounicode", &sub_unicode, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"utf8", &sub_utf8, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"utf8", &sub_utf8, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noutf8", &sub_utf8, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noutf8", &sub_utf8, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"forcedsubsonly", &forced_subs_only, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"forcedsubsonly", &forced_subs_only, CONF_TYPE_FLAG, 0, 0, 1, NULL},
// specify IFO file for VOBSUB subtitle // specify IFO file for VOBSUB subtitle
{"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL},
// enable Closed Captioning display // enable Closed Captioning display
{"subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nosubcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nosubcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"overlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 2, NULL}, {"overlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 2, NULL},
{"nooverlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 0, NULL}, {"nooverlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 0, NULL},
{"sub-bg-color", &sub_bg_color, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL}, {"sub-bg-color", &sub_bg_color, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL},
{"sub-bg-alpha", &sub_bg_alpha, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL}, {"sub-bg-alpha", &sub_bg_alpha, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL},
{"sub-no-text-pp", &sub_no_text_pp, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"sub-no-text-pp", &sub_no_text_pp, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"sub-fuzziness", &sub_match_fuzziness, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL}, {"sub-fuzziness", &sub_match_fuzziness, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL},
{"font", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"font", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"subfont", &sub_font_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"subfont", &sub_font_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"ffactor", &font_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 10.0, NULL}, {"ffactor", &font_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 10.0, NULL},
{"subpos", &sub_pos, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL}, {"subpos", &sub_pos, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL},
{"subalign", &sub_alignment, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL}, {"subalign", &sub_alignment, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL},
{"subwidth", &sub_width_p, CONF_TYPE_INT, CONF_RANGE, 10, 100, NULL}, {"subwidth", &sub_width_p, CONF_TYPE_INT, CONF_RANGE, 10, 100, NULL},
{"spualign", &spu_alignment, CONF_TYPE_INT, CONF_RANGE, -1, 2, NULL}, {"spualign", &spu_alignment, CONF_TYPE_INT, CONF_RANGE, -1, 2, NULL},
{"spuaa", &spu_aamode, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL}, {"spuaa", &spu_aamode, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
{"spugauss", &spu_gaussvar, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 3.0, NULL}, {"spugauss", &spu_gaussvar, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 3.0, NULL},
#ifdef CONFIG_FREETYPE #ifdef CONFIG_FREETYPE
{"subfont-encoding", &subtitle_font_encoding, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"subfont-encoding", &subtitle_font_encoding, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"subfont-text-scale", &text_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL}, {"subfont-text-scale", &text_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL},
{"subfont-osd-scale", &osd_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL}, {"subfont-osd-scale", &osd_font_scale_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL},
{"subfont-blur", &subtitle_font_radius, CONF_TYPE_FLOAT, CONF_RANGE, 0, 8, NULL}, {"subfont-blur", &subtitle_font_radius, CONF_TYPE_FLOAT, CONF_RANGE, 0, 8, NULL},
{"subfont-outline", &subtitle_font_thickness, CONF_TYPE_FLOAT, CONF_RANGE, 0, 8, NULL}, {"subfont-outline", &subtitle_font_thickness, CONF_TYPE_FLOAT, CONF_RANGE, 0, 8, NULL},
{"subfont-autoscale", &subtitle_autoscale, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL}, {"subfont-autoscale", &subtitle_autoscale, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL},
#endif #endif
#ifdef CONFIG_ASS #ifdef CONFIG_ASS
OPT_FLAG_ON("ass", ass_enabled, 0), OPT_FLAG_ON("ass", ass_enabled, 0),
OPT_FLAG_OFF("noass", ass_enabled, 0), OPT_FLAG_OFF("noass", ass_enabled, 0),
{"ass-font-scale", &ass_font_scale, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL}, {"ass-font-scale", &ass_font_scale, CONF_TYPE_FLOAT, CONF_RANGE, 0, 100, NULL},
{"ass-line-spacing", &ass_line_spacing, CONF_TYPE_FLOAT, CONF_RANGE, -1000, 1000, NULL}, {"ass-line-spacing", &ass_line_spacing, CONF_TYPE_FLOAT, CONF_RANGE, -1000, 1000, NULL},
{"ass-top-margin", &ass_top_margin, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, {"ass-top-margin", &ass_top_margin, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
{"ass-bottom-margin", &ass_bottom_margin, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL}, {"ass-bottom-margin", &ass_bottom_margin, CONF_TYPE_INT, CONF_RANGE, 0, 2000, NULL},
{"ass-use-margins", &ass_use_margins, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"ass-use-margins", &ass_use_margins, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noass-use-margins", &ass_use_margins, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noass-use-margins", &ass_use_margins, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"embeddedfonts", &use_embedded_fonts, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"embeddedfonts", &use_embedded_fonts, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noembeddedfonts", &use_embedded_fonts, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noembeddedfonts", &use_embedded_fonts, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"ass-force-style", &ass_force_style_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"ass-force-style", &ass_force_style_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"ass-color", &ass_color, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"ass-color", &ass_color, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"ass-border-color", &ass_border_color, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"ass-border-color", &ass_border_color, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"ass-styles", &ass_styles_file, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"ass-styles", &ass_styles_file, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"ass-hinting", &ass_hinting, CONF_TYPE_INT, CONF_RANGE, 0, 7, NULL}, {"ass-hinting", &ass_hinting, CONF_TYPE_INT, CONF_RANGE, 0, 7, NULL},
#endif #endif
#ifdef CONFIG_FONTCONFIG #ifdef CONFIG_FONTCONFIG
{"fontconfig", &font_fontconfig, CONF_TYPE_FLAG, 0, -1, 1, NULL}, {"fontconfig", &font_fontconfig, CONF_TYPE_FLAG, 0, -1, 1, NULL},
{"nofontconfig", &font_fontconfig, CONF_TYPE_FLAG, 0, 1, -1, NULL}, {"nofontconfig", &font_fontconfig, CONF_TYPE_FLAG, 0, 1, -1, NULL},
#else #else
{"fontconfig", "MPlayer was compiled without fontconfig support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"fontconfig", "MPlayer was compiled without fontconfig support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"nofontconfig", "MPlayer was compiled without fontconfig support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"nofontconfig", "MPlayer was compiled without fontconfig support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_FONTCONFIG */ #endif /* CONFIG_FONTCONFIG */

View File

@ -92,67 +92,67 @@ const m_option_t radioopts_conf[]={
#ifdef CONFIG_TV #ifdef CONFIG_TV
const m_option_t tvopts_conf[]={ const m_option_t tvopts_conf[]={
{"on", "-tv on has been removed, use tv:// instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"on", "-tv on has been removed, use tv:// instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"immediatemode", &stream_tv_defaults.immediate, CONF_TYPE_INT, CONF_RANGE, 0, 1, NULL}, {"immediatemode", &stream_tv_defaults.immediate, CONF_TYPE_INT, CONF_RANGE, 0, 1, NULL},
{"noaudio", &stream_tv_defaults.noaudio, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"noaudio", &stream_tv_defaults.noaudio, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"audiorate", &stream_tv_defaults.audiorate, CONF_TYPE_INT, 0, 0, 0, NULL}, {"audiorate", &stream_tv_defaults.audiorate, CONF_TYPE_INT, 0, 0, 0, NULL},
{"driver", &stream_tv_defaults.driver, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"driver", &stream_tv_defaults.driver, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"device", &stream_tv_defaults.device, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"device", &stream_tv_defaults.device, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"freq", &stream_tv_defaults.freq, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"freq", &stream_tv_defaults.freq, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"channel", &stream_tv_defaults.channel, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"channel", &stream_tv_defaults.channel, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"chanlist", &stream_tv_defaults.chanlist, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"chanlist", &stream_tv_defaults.chanlist, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"norm", &stream_tv_defaults.norm, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"norm", &stream_tv_defaults.norm, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"automute", &stream_tv_defaults.automute, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL}, {"automute", &stream_tv_defaults.automute, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL},
#if defined(CONFIG_TV_V4L2) || defined(CONFIG_TV_DSHOW) #if defined(CONFIG_TV_V4L2) || defined(CONFIG_TV_DSHOW)
{"normid", &stream_tv_defaults.normid, CONF_TYPE_INT, 0, 0, 0, NULL}, {"normid", &stream_tv_defaults.normid, CONF_TYPE_INT, 0, 0, 0, NULL},
#endif #endif
{"width", &stream_tv_defaults.width, CONF_TYPE_INT, 0, 0, 4096, NULL}, {"width", &stream_tv_defaults.width, CONF_TYPE_INT, 0, 0, 4096, NULL},
{"height", &stream_tv_defaults.height, CONF_TYPE_INT, 0, 0, 4096, NULL}, {"height", &stream_tv_defaults.height, CONF_TYPE_INT, 0, 0, 4096, NULL},
{"input", &stream_tv_defaults.input, CONF_TYPE_INT, 0, 0, 20, NULL}, {"input", &stream_tv_defaults.input, CONF_TYPE_INT, 0, 0, 20, NULL},
{"outfmt", &stream_tv_defaults.outfmt, CONF_TYPE_IMGFMT, 0, 0, 0, NULL}, {"outfmt", &stream_tv_defaults.outfmt, CONF_TYPE_IMGFMT, 0, 0, 0, NULL},
{"fps", &stream_tv_defaults.fps, CONF_TYPE_FLOAT, 0, 0, 100.0, NULL}, {"fps", &stream_tv_defaults.fps, CONF_TYPE_FLOAT, 0, 0, 100.0, NULL},
{"channels", &stream_tv_defaults.channels, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"channels", &stream_tv_defaults.channels, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"brightness", &stream_tv_defaults.brightness, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL}, {"brightness", &stream_tv_defaults.brightness, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
{"contrast", &stream_tv_defaults.contrast, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL}, {"contrast", &stream_tv_defaults.contrast, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
{"hue", &stream_tv_defaults.hue, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL}, {"hue", &stream_tv_defaults.hue, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
{"saturation", &stream_tv_defaults.saturation, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL}, {"saturation", &stream_tv_defaults.saturation, CONF_TYPE_INT, CONF_RANGE, -100, 100, NULL},
{"gain", &stream_tv_defaults.gain, CONF_TYPE_INT, CONF_RANGE, -1, 100, NULL}, {"gain", &stream_tv_defaults.gain, CONF_TYPE_INT, CONF_RANGE, -1, 100, NULL},
#if defined(CONFIG_TV_V4L) || defined(CONFIG_TV_V4L2) || defined(CONFIG_TV_DSHOW) #if defined(CONFIG_TV_V4L) || defined(CONFIG_TV_V4L2) || defined(CONFIG_TV_DSHOW)
{"buffersize", &stream_tv_defaults.buffer_size, CONF_TYPE_INT, CONF_RANGE, 16, 1024, NULL}, {"buffersize", &stream_tv_defaults.buffer_size, CONF_TYPE_INT, CONF_RANGE, 16, 1024, NULL},
{"amode", &stream_tv_defaults.amode, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL}, {"amode", &stream_tv_defaults.amode, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL},
{"volume", &stream_tv_defaults.volume, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL}, {"volume", &stream_tv_defaults.volume, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL},
#endif #endif
#if defined(CONFIG_TV_V4L) || defined(CONFIG_TV_V4L2) #if defined(CONFIG_TV_V4L) || defined(CONFIG_TV_V4L2)
{"bass", &stream_tv_defaults.bass, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL}, {"bass", &stream_tv_defaults.bass, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL},
{"treble", &stream_tv_defaults.treble, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL}, {"treble", &stream_tv_defaults.treble, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL},
{"balance", &stream_tv_defaults.balance, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL}, {"balance", &stream_tv_defaults.balance, CONF_TYPE_INT, CONF_RANGE, 0, 65535, NULL},
{"forcechan", &stream_tv_defaults.forcechan, CONF_TYPE_INT, CONF_RANGE, 1, 2, NULL}, {"forcechan", &stream_tv_defaults.forcechan, CONF_TYPE_INT, CONF_RANGE, 1, 2, NULL},
{"forceaudio", &stream_tv_defaults.force_audio, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"forceaudio", &stream_tv_defaults.force_audio, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"buffersize", &stream_tv_defaults.buffer_size, CONF_TYPE_INT, CONF_RANGE, 16, 1024, NULL}, {"buffersize", &stream_tv_defaults.buffer_size, CONF_TYPE_INT, CONF_RANGE, 16, 1024, NULL},
{"mjpeg", &stream_tv_defaults.mjpeg, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"mjpeg", &stream_tv_defaults.mjpeg, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"decimation", &stream_tv_defaults.decimation, CONF_TYPE_INT, CONF_RANGE, 1, 4, NULL}, {"decimation", &stream_tv_defaults.decimation, CONF_TYPE_INT, CONF_RANGE, 1, 4, NULL},
{"quality", &stream_tv_defaults.quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL}, {"quality", &stream_tv_defaults.quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL},
#ifdef CONFIG_ALSA #ifdef CONFIG_ALSA
{"alsa", &stream_tv_defaults.alsa, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"alsa", &stream_tv_defaults.alsa, CONF_TYPE_FLAG, 0, 0, 1, NULL},
#endif /* CONFIG_ALSA */ #endif /* CONFIG_ALSA */
#endif /* defined(CONFIG_TV_V4L) || defined(CONFIG_TV_V4L2) */ #endif /* defined(CONFIG_TV_V4L) || defined(CONFIG_TV_V4L2) */
{"adevice", &stream_tv_defaults.adevice, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"adevice", &stream_tv_defaults.adevice, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"tdevice", &stream_tv_defaults.teletext.device, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"tdevice", &stream_tv_defaults.teletext.device, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"tpage", &stream_tv_defaults.teletext.page, CONF_TYPE_INT, CONF_RANGE, 100, 899, NULL}, {"tpage", &stream_tv_defaults.teletext.page, CONF_TYPE_INT, CONF_RANGE, 100, 899, NULL},
{"tformat", &stream_tv_defaults.teletext.format, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL}, {"tformat", &stream_tv_defaults.teletext.format, CONF_TYPE_INT, CONF_RANGE, 0, 3, NULL},
{"tlang", &stream_tv_defaults.teletext.lang, CONF_TYPE_INT, CONF_RANGE, -1, 0x7f, NULL}, {"tlang", &stream_tv_defaults.teletext.lang, CONF_TYPE_INT, CONF_RANGE, -1, 0x7f, NULL},
{"audioid", &stream_tv_defaults.audio_id, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL}, {"audioid", &stream_tv_defaults.audio_id, CONF_TYPE_INT, CONF_RANGE, 0, 9, NULL},
#ifdef CONFIG_TV_DSHOW #ifdef CONFIG_TV_DSHOW
{"hidden_video_renderer", &stream_tv_defaults.hidden_video_renderer, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"hidden_video_renderer", &stream_tv_defaults.hidden_video_renderer, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nohidden_video_renderer", &stream_tv_defaults.hidden_video_renderer, CONF_TYPE_FLAG, 0, 0, 0, NULL}, {"nohidden_video_renderer", &stream_tv_defaults.hidden_video_renderer, CONF_TYPE_FLAG, 0, 0, 0, NULL},
{"hidden_vp_renderer", &stream_tv_defaults.hidden_vp_renderer, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"hidden_vp_renderer", &stream_tv_defaults.hidden_vp_renderer, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nohidden_vp_renderer", &stream_tv_defaults.hidden_vp_renderer, CONF_TYPE_FLAG, 0, 0, 0, NULL}, {"nohidden_vp_renderer", &stream_tv_defaults.hidden_vp_renderer, CONF_TYPE_FLAG, 0, 0, 0, NULL},
{"system_clock", &stream_tv_defaults.system_clock, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"system_clock", &stream_tv_defaults.system_clock, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nosystem_clock", &stream_tv_defaults.system_clock, CONF_TYPE_FLAG, 0, 0, 0, NULL}, {"nosystem_clock", &stream_tv_defaults.system_clock, CONF_TYPE_FLAG, 0, 0, 0, NULL},
{"normalize_audio_chunks", &stream_tv_defaults.normalize_audio_chunks, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"normalize_audio_chunks", &stream_tv_defaults.normalize_audio_chunks, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nonormalize_audio_chunks", &stream_tv_defaults.normalize_audio_chunks, CONF_TYPE_FLAG, 0, 0, 0, NULL}, {"nonormalize_audio_chunks", &stream_tv_defaults.normalize_audio_chunks, CONF_TYPE_FLAG, 0, 0, 0, NULL},
#endif #endif
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#endif /* CONFIG_TV */ #endif /* CONFIG_TV */
@ -168,16 +168,16 @@ extern char *pvr_param_stream_type;
#ifdef CONFIG_PVR #ifdef CONFIG_PVR
const m_option_t pvropts_conf[]={ const m_option_t pvropts_conf[]={
{"aspect", &pvr_param_aspect_ratio, CONF_TYPE_INT, 0, 1, 4, NULL}, {"aspect", &pvr_param_aspect_ratio, CONF_TYPE_INT, 0, 1, 4, NULL},
{"arate", &pvr_param_sample_rate, CONF_TYPE_INT, 0, 32000, 48000, NULL}, {"arate", &pvr_param_sample_rate, CONF_TYPE_INT, 0, 32000, 48000, NULL},
{"alayer", &pvr_param_audio_layer, CONF_TYPE_INT, 0, 1, 2, NULL}, {"alayer", &pvr_param_audio_layer, CONF_TYPE_INT, 0, 1, 2, NULL},
{"abitrate", &pvr_param_audio_bitrate, CONF_TYPE_INT, 0, 32, 448, NULL}, {"abitrate", &pvr_param_audio_bitrate, CONF_TYPE_INT, 0, 32, 448, NULL},
{"amode", &pvr_param_audio_mode, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"amode", &pvr_param_audio_mode, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"vbitrate", &pvr_param_bitrate, CONF_TYPE_INT, 0, 0, 0, NULL}, {"vbitrate", &pvr_param_bitrate, CONF_TYPE_INT, 0, 0, 0, NULL},
{"vmode", &pvr_param_bitrate_mode, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"vmode", &pvr_param_bitrate_mode, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"vpeak", &pvr_param_bitrate_peak, CONF_TYPE_INT, 0, 0, 0, NULL}, {"vpeak", &pvr_param_bitrate_peak, CONF_TYPE_INT, 0, 0, 0, NULL},
{"fmt", &pvr_param_stream_type, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"fmt", &pvr_param_stream_type, CONF_TYPE_STRING, 0, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#endif /* CONFIG_PVR */ #endif /* CONFIG_PVR */
@ -201,13 +201,13 @@ extern float sws_chr_sharpen;
extern float sws_lum_sharpen; extern float sws_lum_sharpen;
const m_option_t scaler_filter_conf[]={ const m_option_t scaler_filter_conf[]={
{"lgb", &sws_lum_gblur, CONF_TYPE_FLOAT, 0, 0, 100.0, NULL}, {"lgb", &sws_lum_gblur, CONF_TYPE_FLOAT, 0, 0, 100.0, NULL},
{"cgb", &sws_chr_gblur, CONF_TYPE_FLOAT, 0, 0, 100.0, NULL}, {"cgb", &sws_chr_gblur, CONF_TYPE_FLOAT, 0, 0, 100.0, NULL},
{"cvs", &sws_chr_vshift, CONF_TYPE_INT, 0, 0, 0, NULL}, {"cvs", &sws_chr_vshift, CONF_TYPE_INT, 0, 0, 0, NULL},
{"chs", &sws_chr_hshift, CONF_TYPE_INT, 0, 0, 0, NULL}, {"chs", &sws_chr_hshift, CONF_TYPE_INT, 0, 0, 0, NULL},
{"ls", &sws_lum_sharpen, CONF_TYPE_FLOAT, 0, -100.0, 100.0, NULL}, {"ls", &sws_lum_sharpen, CONF_TYPE_FLOAT, 0, -100.0, 100.0, NULL},
{"cs", &sws_chr_sharpen, CONF_TYPE_FLOAT, 0, -100.0, 100.0, NULL}, {"cs", &sws_chr_sharpen, CONF_TYPE_FLOAT, 0, -100.0, 100.0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
/* VIVO demuxer options: */ /* VIVO demuxer options: */
@ -222,17 +222,17 @@ extern int vivo_param_vformat;
extern char *dvd_device, *cdrom_device; extern char *dvd_device, *cdrom_device;
const m_option_t vivoopts_conf[]={ const m_option_t vivoopts_conf[]={
{"version", &vivo_param_version, CONF_TYPE_INT, 0, 0, 0, NULL}, {"version", &vivo_param_version, CONF_TYPE_INT, 0, 0, 0, NULL},
/* audio options */ /* audio options */
{"acodec", &vivo_param_acodec, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"acodec", &vivo_param_acodec, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"abitrate", &vivo_param_abitrate, CONF_TYPE_INT, 0, 0, 0, NULL}, {"abitrate", &vivo_param_abitrate, CONF_TYPE_INT, 0, 0, 0, NULL},
{"samplerate", &vivo_param_samplerate, CONF_TYPE_INT, 0, 0, 0, NULL}, {"samplerate", &vivo_param_samplerate, CONF_TYPE_INT, 0, 0, 0, NULL},
{"bytesperblock", &vivo_param_bytesperblock, CONF_TYPE_INT, 0, 0, 0, NULL}, {"bytesperblock", &vivo_param_bytesperblock, CONF_TYPE_INT, 0, 0, 0, NULL},
/* video options */ /* video options */
{"width", &vivo_param_width, CONF_TYPE_INT, 0, 0, 0, NULL}, {"width", &vivo_param_width, CONF_TYPE_INT, 0, 0, 0, NULL},
{"height", &vivo_param_height, CONF_TYPE_INT, 0, 0, 0, NULL}, {"height", &vivo_param_height, CONF_TYPE_INT, 0, 0, 0, NULL},
{"vformat", &vivo_param_vformat, CONF_TYPE_INT, 0, 0, 0, NULL}, {"vformat", &vivo_param_vformat, CONF_TYPE_INT, 0, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
extern int mf_w; extern int mf_w;
@ -242,118 +242,118 @@ extern char * mf_type;
extern m_obj_list_t vf_obj_list; extern m_obj_list_t vf_obj_list;
const m_option_t mfopts_conf[]={ const m_option_t mfopts_conf[]={
{"on", "-mf on has been removed, use mf:// instead.\n", CONF_TYPE_PRINT, 0, 0, 1, NULL}, {"on", "-mf on has been removed, use mf:// instead.\n", CONF_TYPE_PRINT, 0, 0, 1, NULL},
{"w", &mf_w, CONF_TYPE_INT, 0, 0, 0, NULL}, {"w", &mf_w, CONF_TYPE_INT, 0, 0, 0, NULL},
{"h", &mf_h, CONF_TYPE_INT, 0, 0, 0, NULL}, {"h", &mf_h, CONF_TYPE_INT, 0, 0, 0, NULL},
{"fps", &mf_fps, CONF_TYPE_DOUBLE, 0, 0, 0, NULL}, {"fps", &mf_fps, CONF_TYPE_DOUBLE, 0, 0, 0, NULL},
{"type", &mf_type, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"type", &mf_type, CONF_TYPE_STRING, 0, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#include "libaf/af.h" #include "libaf/af.h"
extern af_cfg_t af_cfg; // Audio filter configuration, defined in libmpcodecs/dec_audio.c extern af_cfg_t af_cfg; // Audio filter configuration, defined in libmpcodecs/dec_audio.c
const m_option_t audio_filter_conf[]={ const m_option_t audio_filter_conf[]={
{"list", &af_cfg.list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"list", &af_cfg.list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"force", &af_cfg.force, CONF_TYPE_INT, CONF_RANGE, 0, 7, NULL}, {"force", &af_cfg.force, CONF_TYPE_INT, CONF_RANGE, 0, 7, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
extern int mp_msg_levels[MSGT_MAX]; extern int mp_msg_levels[MSGT_MAX];
extern int mp_msg_level_all; extern int mp_msg_level_all;
const m_option_t msgl_config[]={ const m_option_t msgl_config[]={
{ "all", &mp_msg_level_all, CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL}, { "all", &mp_msg_level_all, CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL},
{ "global", &mp_msg_levels[MSGT_GLOBAL], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "global", &mp_msg_levels[MSGT_GLOBAL], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "cplayer", &mp_msg_levels[MSGT_CPLAYER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "cplayer", &mp_msg_levels[MSGT_CPLAYER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "vo", &mp_msg_levels[MSGT_VO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "vo", &mp_msg_levels[MSGT_VO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "ao", &mp_msg_levels[MSGT_AO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "ao", &mp_msg_levels[MSGT_AO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "demuxer", &mp_msg_levels[MSGT_DEMUXER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "demuxer", &mp_msg_levels[MSGT_DEMUXER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "ds", &mp_msg_levels[MSGT_DS], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "ds", &mp_msg_levels[MSGT_DS], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "demux", &mp_msg_levels[MSGT_DEMUX], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "demux", &mp_msg_levels[MSGT_DEMUX], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "header", &mp_msg_levels[MSGT_HEADER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "header", &mp_msg_levels[MSGT_HEADER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "avsync", &mp_msg_levels[MSGT_AVSYNC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "avsync", &mp_msg_levels[MSGT_AVSYNC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "autoq", &mp_msg_levels[MSGT_AUTOQ], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "autoq", &mp_msg_levels[MSGT_AUTOQ], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "cfgparser", &mp_msg_levels[MSGT_CFGPARSER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "cfgparser", &mp_msg_levels[MSGT_CFGPARSER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "decaudio", &mp_msg_levels[MSGT_DECAUDIO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "decaudio", &mp_msg_levels[MSGT_DECAUDIO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "decvideo", &mp_msg_levels[MSGT_DECVIDEO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "decvideo", &mp_msg_levels[MSGT_DECVIDEO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "seek", &mp_msg_levels[MSGT_SEEK], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "seek", &mp_msg_levels[MSGT_SEEK], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "win32", &mp_msg_levels[MSGT_WIN32], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "win32", &mp_msg_levels[MSGT_WIN32], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "open", &mp_msg_levels[MSGT_OPEN], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "open", &mp_msg_levels[MSGT_OPEN], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "dvd", &mp_msg_levels[MSGT_DVD], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "dvd", &mp_msg_levels[MSGT_DVD], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "parsees", &mp_msg_levels[MSGT_PARSEES], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "parsees", &mp_msg_levels[MSGT_PARSEES], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "lirc", &mp_msg_levels[MSGT_LIRC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "lirc", &mp_msg_levels[MSGT_LIRC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "stream", &mp_msg_levels[MSGT_STREAM], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "stream", &mp_msg_levels[MSGT_STREAM], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "cache", &mp_msg_levels[MSGT_CACHE], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "cache", &mp_msg_levels[MSGT_CACHE], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "mencoder", &mp_msg_levels[MSGT_MENCODER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "mencoder", &mp_msg_levels[MSGT_MENCODER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "xacodec", &mp_msg_levels[MSGT_XACODEC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "xacodec", &mp_msg_levels[MSGT_XACODEC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "tv", &mp_msg_levels[MSGT_TV], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "tv", &mp_msg_levels[MSGT_TV], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "radio", &mp_msg_levels[MSGT_RADIO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "radio", &mp_msg_levels[MSGT_RADIO], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "osdep", &mp_msg_levels[MSGT_OSDEP], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "osdep", &mp_msg_levels[MSGT_OSDEP], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "spudec", &mp_msg_levels[MSGT_SPUDEC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "spudec", &mp_msg_levels[MSGT_SPUDEC], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "playtree", &mp_msg_levels[MSGT_PLAYTREE], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "playtree", &mp_msg_levels[MSGT_PLAYTREE], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "input", &mp_msg_levels[MSGT_INPUT], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "input", &mp_msg_levels[MSGT_INPUT], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "vfilter", &mp_msg_levels[MSGT_VFILTER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "vfilter", &mp_msg_levels[MSGT_VFILTER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "osd", &mp_msg_levels[MSGT_OSD], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "osd", &mp_msg_levels[MSGT_OSD], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "network", &mp_msg_levels[MSGT_NETWORK], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "network", &mp_msg_levels[MSGT_NETWORK], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "cpudetect", &mp_msg_levels[MSGT_CPUDETECT], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "cpudetect", &mp_msg_levels[MSGT_CPUDETECT], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "codeccfg", &mp_msg_levels[MSGT_CODECCFG], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "codeccfg", &mp_msg_levels[MSGT_CODECCFG], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "sws", &mp_msg_levels[MSGT_SWS], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "sws", &mp_msg_levels[MSGT_SWS], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "vobsub", &mp_msg_levels[MSGT_VOBSUB], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "vobsub", &mp_msg_levels[MSGT_VOBSUB], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "subreader", &mp_msg_levels[MSGT_SUBREADER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "subreader", &mp_msg_levels[MSGT_SUBREADER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "afilter", &mp_msg_levels[MSGT_AFILTER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "afilter", &mp_msg_levels[MSGT_AFILTER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "netst", &mp_msg_levels[MSGT_NETST], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "netst", &mp_msg_levels[MSGT_NETST], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "muxer", &mp_msg_levels[MSGT_MUXER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "muxer", &mp_msg_levels[MSGT_MUXER], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "osd-menu", &mp_msg_levels[MSGT_OSD_MENU], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "osd-menu", &mp_msg_levels[MSGT_OSD_MENU], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "identify", &mp_msg_levels[MSGT_IDENTIFY], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "identify", &mp_msg_levels[MSGT_IDENTIFY], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "ass", &mp_msg_levels[MSGT_ASS], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "ass", &mp_msg_levels[MSGT_ASS], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{ "statusline", &mp_msg_levels[MSGT_STATUSLINE], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL }, { "statusline", &mp_msg_levels[MSGT_STATUSLINE], CONF_TYPE_INT, CONF_RANGE, -1, 9, NULL },
{"help", "Available msg modules:\n" {"help", "Available msg modules:\n"
" global - common player errors/information\n" " global - common player errors/information\n"
" cplayer - console player (mplayer.c)\n" " cplayer - console player (mplayer.c)\n"
" vo - libvo\n" " vo - libvo\n"
" ao - libao\n" " ao - libao\n"
" demuxer - demuxer.c (general stuff)\n" " demuxer - demuxer.c (general stuff)\n"
" ds - demux stream (add/read packet etc)\n" " ds - demux stream (add/read packet etc)\n"
" demux - fileformat-specific stuff (demux_*.c)\n" " demux - fileformat-specific stuff (demux_*.c)\n"
" header - fileformat-specific header (*header.c)\n" " header - fileformat-specific header (*header.c)\n"
" avsync - mplayer.c timer stuff\n" " avsync - mplayer.c timer stuff\n"
" autoq - mplayer.c auto-quality stuff\n" " autoq - mplayer.c auto-quality stuff\n"
" cfgparser - cfgparser.c\n" " cfgparser - cfgparser.c\n"
" decaudio - av decoder\n" " decaudio - av decoder\n"
" decvideo\n" " decvideo\n"
" seek - seeking code\n" " seek - seeking code\n"
" win32 - win32 dll stuff\n" " win32 - win32 dll stuff\n"
" open - open.c (stream opening)\n" " open - open.c (stream opening)\n"
" dvd - open.c (DVD init/read/seek)\n" " dvd - open.c (DVD init/read/seek)\n"
" parsees - parse_es.c (mpeg stream parser)\n" " parsees - parse_es.c (mpeg stream parser)\n"
" lirc - lirc_mp.c and input lirc driver\n" " lirc - lirc_mp.c and input lirc driver\n"
" stream - stream.c\n" " stream - stream.c\n"
" cache - cache2.c\n" " cache - cache2.c\n"
" mencoder\n" " mencoder\n"
" xacodec - XAnim codecs\n" " xacodec - XAnim codecs\n"
" tv - TV input subsystem\n" " tv - TV input subsystem\n"
" osdep - OS-dependent parts\n" " osdep - OS-dependent parts\n"
" spudec - spudec.c\n" " spudec - spudec.c\n"
" playtree - Playtree handling (playtree.c, playtreeparser.c)\n" " playtree - Playtree handling (playtree.c, playtreeparser.c)\n"
" input\n" " input\n"
" vfilter\n" " vfilter\n"
" osd\n" " osd\n"
" network\n" " network\n"
" cpudetect\n" " cpudetect\n"
" codeccfg\n" " codeccfg\n"
" sws\n" " sws\n"
" vobsub\n" " vobsub\n"
" subreader\n" " subreader\n"
" osd-menu - OSD menu messages\n" " osd-menu - OSD menu messages\n"
" afilter - Audio filter messages\n" " afilter - Audio filter messages\n"
" netst - Netstream\n" " netst - Netstream\n"
" muxer - muxer layer\n" " muxer - muxer layer\n"
" identify - identify output\n" " identify - identify output\n"
" ass - libass messages\n" " ass - libass messages\n"
" statusline - playback/encoding status line\n" " statusline - playback/encoding status line\n"
"\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, "\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };

View File

@ -41,243 +41,243 @@ extern const m_option_t vfwopts_conf[];
extern const m_option_t xvidencopts_conf[]; extern const m_option_t xvidencopts_conf[];
const m_option_t ovc_conf[]={ const m_option_t ovc_conf[]={
{"copy", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_COPY, NULL}, {"copy", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_COPY, NULL},
{"frameno", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_FRAMENO, NULL}, {"frameno", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_FRAMENO, NULL},
{"lavc", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_LIBAVCODEC, NULL}, {"lavc", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_LIBAVCODEC, NULL},
// {"null", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_NULL, NULL}, // {"null", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_NULL, NULL},
{"raw", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_RAW, NULL}, {"raw", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_RAW, NULL},
{"vfw", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_VFW, NULL}, {"vfw", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_VFW, NULL},
{"libdv", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_LIBDV, NULL}, {"libdv", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_LIBDV, NULL},
{"xvid", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_XVID, NULL}, {"xvid", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_XVID, NULL},
{"qtvideo", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_QTVIDEO, NULL}, {"qtvideo", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_QTVIDEO, NULL},
{"nuv", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_NUV, NULL}, {"nuv", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_NUV, NULL},
{"x264", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_X264, NULL}, {"x264", &out_video_codec, CONF_TYPE_FLAG, 0, 0, VCODEC_X264, NULL},
{"help", "\nAvailable codecs:\n" {"help", "\nAvailable codecs:\n"
" copy - frame copy, without re-encoding. Doesn't work with filters.\n" " copy - frame copy, without re-encoding. Doesn't work with filters.\n"
" frameno - special audio-only file for 3-pass encoding, see DOCS.\n" " frameno - special audio-only file for 3-pass encoding, see DOCS.\n"
" raw - uncompressed video. Use fourcc option to set format explicitly.\n" " raw - uncompressed video. Use fourcc option to set format explicitly.\n"
#ifdef CONFIG_LIBLZO #ifdef CONFIG_LIBLZO
" nuv - nuppel video\n" " nuv - nuppel video\n"
#endif #endif
#ifdef CONFIG_LIBAVCODEC #ifdef CONFIG_LIBAVCODEC
" lavc - libavcodec codecs - best quality!\n" " lavc - libavcodec codecs - best quality!\n"
#endif #endif
#ifdef CONFIG_WIN32DLL #ifdef CONFIG_WIN32DLL
" vfw - VfW DLLs, read DOCS/HTML/en/encoding-guide.html.\n" " vfw - VfW DLLs, read DOCS/HTML/en/encoding-guide.html.\n"
" qtvideo - QuickTime DLLs, currently only SVQ1/3 are supported.\n" " qtvideo - QuickTime DLLs, currently only SVQ1/3 are supported.\n"
#endif #endif
#ifdef CONFIG_LIBDV095 #ifdef CONFIG_LIBDV095
" libdv - DV encoding with libdv v0.9.5\n" " libdv - DV encoding with libdv v0.9.5\n"
#endif #endif
#ifdef CONFIG_XVID4 #ifdef CONFIG_XVID4
" xvid - XviD encoding\n" " xvid - XviD encoding\n"
#endif #endif
#ifdef CONFIG_X264 #ifdef CONFIG_X264
" x264 - H.264 encoding\n" " x264 - H.264 encoding\n"
#endif #endif
"\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, "\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
const m_option_t oac_conf[]={ const m_option_t oac_conf[]={
{"copy", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_COPY, NULL}, {"copy", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_COPY, NULL},
{"pcm", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_PCM, NULL}, {"pcm", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_PCM, NULL},
#ifdef CONFIG_MP3LAME #ifdef CONFIG_MP3LAME
{"mp3lame", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_VBRMP3, NULL}, {"mp3lame", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_VBRMP3, NULL},
#else #else
{"mp3lame", "MPlayer was compiled without libmp3lame support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"mp3lame", "MPlayer was compiled without libmp3lame support.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_MP3LAME */ #endif /* CONFIG_MP3LAME */
#ifdef CONFIG_LIBAVCODEC #ifdef CONFIG_LIBAVCODEC
{"lavc", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_LAVC, NULL}, {"lavc", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_LAVC, NULL},
#else #else
{"lavc", "MPlayer was compiled without libavcodec. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"lavc", "MPlayer was compiled without libavcodec. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_LIBAVCODEC */ #endif /* CONFIG_LIBAVCODEC */
#ifdef CONFIG_TOOLAME #ifdef CONFIG_TOOLAME
{"toolame", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_TOOLAME, NULL}, {"toolame", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_TOOLAME, NULL},
#else #else
{"toolame", "MPlayer was compiled without libtoolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"toolame", "MPlayer was compiled without libtoolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_TOOLAME */ #endif /* CONFIG_TOOLAME */
#ifdef CONFIG_TWOLAME #ifdef CONFIG_TWOLAME
{"twolame", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_TWOLAME, NULL}, {"twolame", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_TWOLAME, NULL},
#else #else
{"twolame", "MPlayer was compiled without libtwolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"twolame", "MPlayer was compiled without libtwolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_TWOLAME */ #endif /* CONFIG_TWOLAME */
#ifdef CONFIG_FAAC #ifdef CONFIG_FAAC
{"faac", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_FAAC, NULL}, {"faac", &out_audio_codec, CONF_TYPE_FLAG, 0, 0, ACODEC_FAAC, NULL},
#else #else
{"faac", "MPlayer was compiled without libfaac. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"faac", "MPlayer was compiled without libfaac. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_FAAC */ #endif /* CONFIG_FAAC */
{"help", "\nAvailable codecs:\n" {"help", "\nAvailable codecs:\n"
" copy - frame copy, without re-encoding (useful for AC3)\n" " copy - frame copy, without re-encoding (useful for AC3)\n"
" pcm - uncompressed PCM audio\n" " pcm - uncompressed PCM audio\n"
#ifdef CONFIG_MP3LAME #ifdef CONFIG_MP3LAME
" mp3lame - cbr/abr/vbr MP3 using libmp3lame\n" " mp3lame - cbr/abr/vbr MP3 using libmp3lame\n"
#endif #endif
#ifdef CONFIG_LIBAVCODEC #ifdef CONFIG_LIBAVCODEC
" lavc - FFmpeg audio encoder (MP2, AC3, ...)\n" " lavc - FFmpeg audio encoder (MP2, AC3, ...)\n"
#endif #endif
#ifdef CONFIG_TOOLAME #ifdef CONFIG_TOOLAME
" toolame - Toolame MP2 audio encoder\n" " toolame - Toolame MP2 audio encoder\n"
#endif #endif
#ifdef CONFIG_TWOLAME #ifdef CONFIG_TWOLAME
" twolame - Twolame MP2 audio encoder\n" " twolame - Twolame MP2 audio encoder\n"
#endif #endif
#ifdef CONFIG_FAAC #ifdef CONFIG_FAAC
" faac - FAAC AAC audio encoder\n" " faac - FAAC AAC audio encoder\n"
#endif #endif
"\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, "\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
const m_option_t info_conf[]={ const m_option_t info_conf[]={
{"name", &info_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"name", &info_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"artist", &info_artist, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"artist", &info_artist, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"genre", &info_genre, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"genre", &info_genre, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"subject", &info_subject, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"subject", &info_subject, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"copyright", &info_copyright, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"copyright", &info_copyright, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"srcform", &info_sourceform, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"srcform", &info_sourceform, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"comment", &info_comment, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"comment", &info_comment, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"help", "\nAvailable INFO fields:\n" {"help", "\nAvailable INFO fields:\n"
" name - title of the work\n" " name - title of the work\n"
" artist - artist or author of the work\n" " artist - artist or author of the work\n"
" genre - original work category\n" " genre - original work category\n"
" subject - contents of the work\n" " subject - contents of the work\n"
" copyright - copyright information\n" " copyright - copyright information\n"
" srcform - original format of the digitzed material\n" " srcform - original format of the digitzed material\n"
" comment - general comments about the work\n" " comment - general comments about the work\n"
"\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, "\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
const m_option_t of_conf[]={ const m_option_t of_conf[]={
{"avi", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_AVI, NULL}, {"avi", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_AVI, NULL},
{"mpeg", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_MPEG, NULL}, {"mpeg", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_MPEG, NULL},
#ifdef CONFIG_LIBAVFORMAT #ifdef CONFIG_LIBAVFORMAT
{"lavf", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_LAVF, NULL}, {"lavf", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_LAVF, NULL},
#endif #endif
{"rawvideo", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_RAWVIDEO, NULL}, {"rawvideo", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_RAWVIDEO, NULL},
{"rawaudio", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_RAWAUDIO, NULL}, {"rawaudio", &out_file_format, CONF_TYPE_FLAG, 0, 0, MUXER_TYPE_RAWAUDIO, NULL},
{"help", "\nAvailable output formats:\n" {"help", "\nAvailable output formats:\n"
" avi - Microsoft Audio/Video Interleaved\n" " avi - Microsoft Audio/Video Interleaved\n"
" mpeg - MPEG-1/2 system stream format\n" " mpeg - MPEG-1/2 system stream format\n"
#ifdef CONFIG_LIBAVFORMAT #ifdef CONFIG_LIBAVFORMAT
" lavf - FFmpeg libavformat muxers\n" " lavf - FFmpeg libavformat muxers\n"
#endif #endif
" rawvideo - (video only, one stream only) raw stream, no muxing\n" " rawvideo - (video only, one stream only) raw stream, no muxing\n"
" rawaudio - (audio only, one stream only) raw stream, no muxing\n" " rawaudio - (audio only, one stream only) raw stream, no muxing\n"
"\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, "\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
extern float avi_aspect_override; /* defined in libmpdemux/muxer_avi.c */ extern float avi_aspect_override; /* defined in libmpdemux/muxer_avi.c */
extern int write_odml; /* defined in libmpdemux/muxer_avi.c */ extern int write_odml; /* defined in libmpdemux/muxer_avi.c */
const m_option_t mencoder_opts[]={ const m_option_t mencoder_opts[]={
/* name, pointer, type, flags, min, max */ /* name, pointer, type, flags, min, max */
{"frameno-file", &frameno_filename, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"frameno-file", &frameno_filename, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"hr-edl-seek", &edl_seek_type, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"hr-edl-seek", &edl_seek_type, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nohr-edl-seek", &edl_seek_type, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nohr-edl-seek", &edl_seek_type, CONF_TYPE_FLAG, 0, 1, 0, NULL},
// set output framerate - recommended for variable-FPS (ASF etc) files // set output framerate - recommended for variable-FPS (ASF etc) files
// and for 29.97FPS progressive MPEG2 streams // and for 29.97FPS progressive MPEG2 streams
{"ofps", &force_ofps, CONF_TYPE_DOUBLE, CONF_MIN|CONF_GLOBAL, 0, 0, NULL}, {"ofps", &force_ofps, CONF_TYPE_DOUBLE, CONF_MIN|CONF_GLOBAL, 0, 0, NULL},
{"o", &out_filename, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"o", &out_filename, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
// limit number of skippable frames after a non-skipped one // limit number of skippable frames after a non-skipped one
{"skiplimit", &skip_limit, CONF_TYPE_INT, 0, 0, 0, NULL}, {"skiplimit", &skip_limit, CONF_TYPE_INT, 0, 0, 0, NULL},
{"noskiplimit", &skip_limit, CONF_TYPE_FLAG, 0, 0, -1, NULL}, {"noskiplimit", &skip_limit, CONF_TYPE_FLAG, 0, 0, -1, NULL},
{"noskip", &skip_limit, CONF_TYPE_FLAG, 0, 0, 0, NULL}, {"noskip", &skip_limit, CONF_TYPE_FLAG, 0, 0, 0, NULL},
{"audio-density", &audio_density, CONF_TYPE_INT, CONF_RANGE|CONF_GLOBAL, 1, 50, NULL}, {"audio-density", &audio_density, CONF_TYPE_INT, CONF_RANGE|CONF_GLOBAL, 1, 50, NULL},
{"audio-preload", &audio_preload, CONF_TYPE_FLOAT, CONF_RANGE|CONF_GLOBAL, 0, 2, NULL}, {"audio-preload", &audio_preload, CONF_TYPE_FLOAT, CONF_RANGE|CONF_GLOBAL, 0, 2, NULL},
{"audio-delay", &audio_delay_fix, CONF_TYPE_FLOAT, CONF_GLOBAL, 0, 0, NULL}, {"audio-delay", &audio_delay_fix, CONF_TYPE_FLOAT, CONF_GLOBAL, 0, 0, NULL},
{"x", "-x has been removed, use -vf scale=w:h for scaling.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"x", "-x has been removed, use -vf scale=w:h for scaling.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"xsize", "-xsize has been removed, use -vf crop=w:h:x:y for cropping.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"xsize", "-xsize has been removed, use -vf crop=w:h:x:y for cropping.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
// output audio/video codec selection // output audio/video codec selection
{"oac", (void *) oac_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"oac", (void *) oac_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
{"ovc", (void *) ovc_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"ovc", (void *) ovc_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
// output file format // output file format
{"of", (void *) of_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"of", (void *) of_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
// override audio format tag in output file // override audio format tag in output file
{"fafmttag", &force_audiofmttag, CONF_TYPE_INT, CONF_GLOBAL, 0, 0, NULL}, {"fafmttag", &force_audiofmttag, CONF_TYPE_INT, CONF_GLOBAL, 0, 0, NULL},
// override FOURCC in output file // override FOURCC in output file
{"ffourcc", &force_fourcc, CONF_TYPE_STRING, CONF_GLOBAL, 4, 4, NULL}, {"ffourcc", &force_fourcc, CONF_TYPE_STRING, CONF_GLOBAL, 4, 4, NULL},
// override avi aspect autodetection // override avi aspect autodetection
{"force-avi-aspect", &avi_aspect_override, CONF_TYPE_FLOAT, CONF_RANGE|CONF_GLOBAL, 0.2, 3.0, NULL}, {"force-avi-aspect", &avi_aspect_override, CONF_TYPE_FLOAT, CONF_RANGE|CONF_GLOBAL, 0.2, 3.0, NULL},
{"pass", "-pass has been removed, use -lavcopts vpass=n, -xvidencopts pass=n\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"pass", "-pass has been removed, use -lavcopts vpass=n, -xvidencopts pass=n\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"passlogfile", &passtmpfile, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"passlogfile", &passtmpfile, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"vobsubout", &vobsub_out, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"vobsubout", &vobsub_out, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"vobsuboutindex", &vobsub_out_index, CONF_TYPE_INT, CONF_RANGE|CONF_GLOBAL, 0, 31, NULL}, {"vobsuboutindex", &vobsub_out_index, CONF_TYPE_INT, CONF_RANGE|CONF_GLOBAL, 0, 31, NULL},
{"vobsuboutid", &vobsub_out_id, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"vobsuboutid", &vobsub_out_id, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"autoexpand", &auto_expand, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"autoexpand", &auto_expand, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noautoexpand", &auto_expand, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noautoexpand", &auto_expand, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"encodedups", &encode_duplicates, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"encodedups", &encode_duplicates, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noencodedups", &encode_duplicates, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noencodedups", &encode_duplicates, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"odml", &write_odml, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"odml", &write_odml, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"noodml", &write_odml, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"noodml", &write_odml, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
// info header strings // info header strings
{"info", (void *) info_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"info", (void *) info_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#ifdef CONFIG_MP3LAME #ifdef CONFIG_MP3LAME
{"lameopts", lameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"lameopts", lameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_LIBAVCODEC #ifdef CONFIG_LIBAVCODEC
{"lavcopts", lavcopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"lavcopts", lavcopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#else #else
{"lavcopts", "MPlayer was compiled without libavcodec. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"lavcopts", "MPlayer was compiled without libavcodec. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_LIBAVCODEC */ #endif /* CONFIG_LIBAVCODEC */
#ifdef CONFIG_TOOLAME #ifdef CONFIG_TOOLAME
{"toolameopts", toolameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"toolameopts", toolameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#else #else
{"toolameopts", "MPlayer was compiled without libtoolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"toolameopts", "MPlayer was compiled without libtoolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_TOOLAME */ #endif /* CONFIG_TOOLAME */
#ifdef CONFIG_TWOLAME #ifdef CONFIG_TWOLAME
{"twolameopts", twolameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"twolameopts", twolameopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#else #else
{"twolameopts", "MPlayer was compiled without libtwolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"twolameopts", "MPlayer was compiled without libtwolame. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_TWOLAME */ #endif /* CONFIG_TWOLAME */
#ifdef CONFIG_FAAC #ifdef CONFIG_FAAC
{"faacopts", faacopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"faacopts", faacopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#else #else
{"faacopts", "MPlayer was compiled without libfaac. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"faacopts", "MPlayer was compiled without libfaac. See README or DOCS.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
#endif /* CONFIG_FAAC */ #endif /* CONFIG_FAAC */
#ifdef CONFIG_WIN32DLL #ifdef CONFIG_WIN32DLL
{"xvfwopts", vfwopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"xvfwopts", vfwopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_XVID4 #ifdef CONFIG_XVID4
{"xvidencopts", xvidencopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"xvidencopts", xvidencopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#if defined(CONFIG_X264) #if defined(CONFIG_X264)
{"x264encopts", &x264enc_set_param, CONF_TYPE_FUNC_PARAM, CONF_GLOBAL, 0, 0, NULL}, {"x264encopts", &x264enc_set_param, CONF_TYPE_FUNC_PARAM, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_LIBLZO #ifdef CONFIG_LIBLZO
{"nuvopts", nuvopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"nuvopts", nuvopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
{"mpegopts", mpegopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"mpegopts", mpegopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#ifdef CONFIG_LIBAVFORMAT #ifdef CONFIG_LIBAVFORMAT
{"lavfopts", lavfopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL}, {"lavfopts", lavfopts_conf, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
#include "cfg-common-opts.h" #include "cfg-common-opts.h"
// {"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, // {"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
// {"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, // {"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
// {"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, // {"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#endif /* MPLAYER_CFG_MENCODER_H */ #endif /* MPLAYER_CFG_MENCODER_H */

View File

@ -59,16 +59,16 @@ extern int sws_flags;
extern char* pp_help; extern char* pp_help;
const m_option_t vd_conf[]={ const m_option_t vd_conf[]={
{"help", "Use MPlayer with an appropriate video file instead of live partners to avoid vd.\n", CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL}, {"help", "Use MPlayer with an appropriate video file instead of live partners to avoid vd.\n", CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#ifdef CONFIG_TV #ifdef CONFIG_TV
const m_option_t tvscan_conf[]={ const m_option_t tvscan_conf[]={
{"autostart", &stream_tv_defaults.scan, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"autostart", &stream_tv_defaults.scan, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"threshold", &stream_tv_defaults.scan_threshold, CONF_TYPE_INT, CONF_RANGE, 1, 100, NULL}, {"threshold", &stream_tv_defaults.scan_threshold, CONF_TYPE_INT, CONF_RANGE, 1, 100, NULL},
{"period", &stream_tv_defaults.scan_period, CONF_TYPE_FLOAT, CONF_RANGE, 0.1, 2.0, NULL}, {"period", &stream_tv_defaults.scan_period, CONF_TYPE_FLOAT, CONF_RANGE, 0.1, 2.0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#endif #endif
/* /*
@ -85,289 +85,289 @@ const m_option_t tvscan_conf[]={
*/ */
const m_option_t mplayer_opts[]={ const m_option_t mplayer_opts[]={
/* name, pointer, type, flags, min, max */ /* name, pointer, type, flags, min, max */
//---------------------- libao/libvo options ------------------------ //---------------------- libao/libvo options ------------------------
{"o", "Option -o has been renamed to -vo (video-out), use -vo.\n", {"o", "Option -o has been renamed to -vo (video-out), use -vo.\n",
CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
OPT_STRINGLIST("vo", video_driver_list, 0), OPT_STRINGLIST("vo", video_driver_list, 0),
OPT_STRINGLIST("ao", audio_driver_list, 0), OPT_STRINGLIST("ao", audio_driver_list, 0),
OPT_FLAG_ON("fixed-vo", fixed_vo, CONF_GLOBAL), OPT_FLAG_ON("fixed-vo", fixed_vo, CONF_GLOBAL),
OPT_FLAG_OFF("nofixed-vo", fixed_vo, CONF_GLOBAL), OPT_FLAG_OFF("nofixed-vo", fixed_vo, CONF_GLOBAL),
OPT_FLAG_ON("ontop", vo_ontop, 0), OPT_FLAG_ON("ontop", vo_ontop, 0),
OPT_FLAG_OFF("noontop", vo_ontop, 0), OPT_FLAG_OFF("noontop", vo_ontop, 0),
{"rootwin", &vo_rootwin, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"rootwin", &vo_rootwin, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"border", &vo_border, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"border", &vo_border, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noborder", &vo_border, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noborder", &vo_border, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"aop", "-aop has been removed, use -af instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"aop", "-aop has been removed, use -af instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"dsp", "-dsp has been removed. Use -ao oss:dsp_path instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"dsp", "-dsp has been removed. Use -ao oss:dsp_path instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
{"mixer", &mixer_device, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"mixer", &mixer_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"mixer-channel", &mixer_channel, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"mixer-channel", &mixer_channel, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nosoftvol", &soft_vol, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nosoftvol", &soft_vol, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"softvol-max", &soft_vol_max, CONF_TYPE_FLOAT, CONF_RANGE, 10, 10000, NULL}, {"softvol-max", &soft_vol_max, CONF_TYPE_FLOAT, CONF_RANGE, 10, 10000, NULL},
{"volstep", &volstep, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL}, {"volstep", &volstep, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL},
{"volume", &start_volume, CONF_TYPE_FLOAT, CONF_RANGE, -1, 10000, NULL}, {"volume", &start_volume, CONF_TYPE_FLOAT, CONF_RANGE, -1, 10000, NULL},
{"master", "Option -master has been removed, use -af volume instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"master", "Option -master has been removed, use -af volume instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
// override audio buffer size (used only by -ao oss, anyway obsolete...) // override audio buffer size (used only by -ao oss, anyway obsolete...)
{"abs", &ao_data.buffersize, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL}, {"abs", &ao_data.buffersize, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
// -ao pcm options: // -ao pcm options:
{"aofile", "-aofile has been removed. Use -ao pcm:file=<filename> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"aofile", "-aofile has been removed. Use -ao pcm:file=<filename> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"waveheader", "-waveheader has been removed. Use -ao pcm:waveheader instead.\n", CONF_TYPE_PRINT, 0, 0, 1, NULL}, {"waveheader", "-waveheader has been removed. Use -ao pcm:waveheader instead.\n", CONF_TYPE_PRINT, 0, 0, 1, NULL},
{"nowaveheader", "-nowaveheader has been removed. Use -ao pcm:nowaveheader instead.\n", CONF_TYPE_PRINT, 0, 1, 0, NULL}, {"nowaveheader", "-nowaveheader has been removed. Use -ao pcm:nowaveheader instead.\n", CONF_TYPE_PRINT, 0, 1, 0, NULL},
{"alsa", "-alsa has been removed. Remove it from your config file.\n", {"alsa", "-alsa has been removed. Remove it from your config file.\n",
CONF_TYPE_PRINT, 0, 0, 0, NULL}, CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"noalsa", "-noalsa has been removed. Remove it from your config file.\n", {"noalsa", "-noalsa has been removed. Remove it from your config file.\n",
CONF_TYPE_PRINT, 0, 0, 0, NULL}, CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"edlout", &edl_output_filename, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"edlout", &edl_output_filename, CONF_TYPE_STRING, 0, 0, 0, NULL},
#ifdef CONFIG_X11 #ifdef CONFIG_X11
{"display", &mDisplayName, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"display", &mDisplayName, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
// -vo png only: // -vo png only:
#ifdef CONFIG_PNG #ifdef CONFIG_PNG
{"z", "-z has been removed. Use -vo png:z=<0-9> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"z", "-z has been removed. Use -vo png:z=<0-9> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif #endif
// -vo jpeg only: // -vo jpeg only:
#ifdef CONFIG_JPEG #ifdef CONFIG_JPEG
{"jpeg", "-jpeg has been removed. Use -vo jpeg:<options> instead.\n", {"jpeg", "-jpeg has been removed. Use -vo jpeg:<options> instead.\n",
CONF_TYPE_PRINT, 0, 0, 0, NULL}, CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif #endif
// -vo sdl only: // -vo sdl only:
{"sdl", "Use -vo sdl:driver=<driver> instead of -vo sdl -sdl driver.\n", {"sdl", "Use -vo sdl:driver=<driver> instead of -vo sdl -sdl driver.\n",
CONF_TYPE_PRINT, 0, 0, 0, NULL}, CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"noxv", "-noxv has been removed. Use -vo sdl:nohwaccel instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"noxv", "-noxv has been removed. Use -vo sdl:nohwaccel instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"forcexv", "-forcexv has been removed. Use -vo sdl:forcexv instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"forcexv", "-forcexv has been removed. Use -vo sdl:forcexv instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
// -ao sdl only: // -ao sdl only:
{"sdla", "Use -ao sdl:driver instead of -ao sdl -sdla driver.\n", {"sdla", "Use -ao sdl:driver instead of -ao sdl -sdla driver.\n",
CONF_TYPE_PRINT, 0, 0, 0, NULL}, CONF_TYPE_PRINT, 0, 0, 0, NULL},
#if defined(CONFIG_FBDEV) || defined(CONFIG_VESA) #if defined(CONFIG_FBDEV) || defined(CONFIG_VESA)
{"monitor-hfreq", &monitor_hfreq_str, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"monitor-hfreq", &monitor_hfreq_str, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"monitor-vfreq", &monitor_vfreq_str, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"monitor-vfreq", &monitor_vfreq_str, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"monitor-dotclock", &monitor_dotclock_str, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"monitor-dotclock", &monitor_dotclock_str, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_FBDEV #ifdef CONFIG_FBDEV
{"fbmode", &fb_mode_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"fbmode", &fb_mode_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"fbmodeconfig", &fb_mode_cfgfile, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"fbmodeconfig", &fb_mode_cfgfile, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_DIRECTFB #ifdef CONFIG_DIRECTFB
#if DIRECTFBVERSION > 912 #if DIRECTFBVERSION > 912
{"dfbopts", "-dfbopts has been removed. Use -vf directfb:dfbopts=... instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"dfbopts", "-dfbopts has been removed. Use -vf directfb:dfbopts=... instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif #endif
#endif #endif
// force window width/height or resolution (with -vm) // force window width/height or resolution (with -vm)
OPT_INTRANGE("x", screen_size_x, 0, 0, 4096), OPT_INTRANGE("x", screen_size_x, 0, 0, 4096),
OPT_INTRANGE("y", screen_size_y, 0, 0, 4096), OPT_INTRANGE("y", screen_size_y, 0, 0, 4096),
// set screen dimensions (when not detectable or virtual!=visible) // set screen dimensions (when not detectable or virtual!=visible)
OPT_INTRANGE("screenw", vo_screenwidth, CONF_OLD, 0, 4096), OPT_INTRANGE("screenw", vo_screenwidth, CONF_OLD, 0, 4096),
OPT_INTRANGE("screenh", vo_screenheight, CONF_OLD, 0, 4096), OPT_INTRANGE("screenh", vo_screenheight, CONF_OLD, 0, 4096),
// Geometry string // Geometry string
{"geometry", &vo_geometry, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"geometry", &vo_geometry, CONF_TYPE_STRING, 0, 0, 0, NULL},
OPT_FLAG_ON("force-window-position", force_window_position, 0), OPT_FLAG_ON("force-window-position", force_window_position, 0),
OPT_FLAG_OFF("noforce-window-position", force_window_position, 0), OPT_FLAG_OFF("noforce-window-position", force_window_position, 0),
// vo name (X classname) and window title strings // vo name (X classname) and window title strings
{"name", &vo_winname, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"name", &vo_winname, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"title", &vo_wintitle, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"title", &vo_wintitle, CONF_TYPE_STRING, 0, 0, 0, NULL},
// set aspect ratio of monitor - useful for 16:9 TV-out // set aspect ratio of monitor - useful for 16:9 TV-out
OPT_FLOATRANGE("monitoraspect", force_monitor_aspect, 0, 0.0, 9.0), OPT_FLOATRANGE("monitoraspect", force_monitor_aspect, 0, 0.0, 9.0),
OPT_FLOATRANGE("monitorpixelaspect", monitor_pixel_aspect, 0, 0.2, 9.0), OPT_FLOATRANGE("monitorpixelaspect", monitor_pixel_aspect, 0, 0.2, 9.0),
// video mode switching: (x11,xv,dga) // video mode switching: (x11,xv,dga)
OPT_FLAG_ON("vm", vidmode, 0), OPT_FLAG_ON("vm", vidmode, 0),
OPT_FLAG_OFF("novm", vidmode, 0), OPT_FLAG_OFF("novm", vidmode, 0),
// start in fullscreen mode: // start in fullscreen mode:
OPT_FLAG_ON("fs", fullscreen, 0), OPT_FLAG_ON("fs", fullscreen, 0),
OPT_FLAG_OFF("nofs", fullscreen, 0), OPT_FLAG_OFF("nofs", fullscreen, 0),
// set fullscreen switch method (workaround for buggy WMs) // set fullscreen switch method (workaround for buggy WMs)
{"fsmode", "-fsmode is obsolete, avoid it and use -fstype instead.\nIf you really want it, try -fsmode-dontuse, but don't report bugs!\n", CONF_TYPE_PRINT, CONF_RANGE, 0, 31, NULL}, {"fsmode", "-fsmode is obsolete, avoid it and use -fstype instead.\nIf you really want it, try -fsmode-dontuse, but don't report bugs!\n", CONF_TYPE_PRINT, CONF_RANGE, 0, 31, NULL},
{"fsmode-dontuse", &vo_fsmode, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL}, {"fsmode-dontuse", &vo_fsmode, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
// set bpp (x11+vm, dga, fbdev, vesa, svga?) // set bpp (x11+vm, dga, fbdev, vesa, svga?)
OPT_INTRANGE("bpp", vo_dbpp, 0, 0, 32), OPT_INTRANGE("bpp", vo_dbpp, 0, 0, 32),
{"colorkey", &vo_colorkey, CONF_TYPE_INT, 0, 0, 0, NULL}, {"colorkey", &vo_colorkey, CONF_TYPE_INT, 0, 0, 0, NULL},
{"nocolorkey", &vo_colorkey, CONF_TYPE_FLAG, 0, 0, 0x1000000, NULL}, {"nocolorkey", &vo_colorkey, CONF_TYPE_FLAG, 0, 0, 0x1000000, NULL},
{"double", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"double", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nodouble", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nodouble", &vo_doublebuffering, CONF_TYPE_FLAG, 0, 1, 0, NULL},
// wait for v-sync (vesa) // wait for v-sync (vesa)
{"vsync", &vo_vsync, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"vsync", &vo_vsync, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"novsync", &vo_vsync, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"novsync", &vo_vsync, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"panscan", &vo_panscan, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL}, {"panscan", &vo_panscan, CONF_TYPE_FLOAT, CONF_RANGE, -1.0, 1.0, NULL},
OPT_FLOATRANGE("panscanrange", vo_panscanrange, 0, -19.0, 99.0), OPT_FLOATRANGE("panscanrange", vo_panscanrange, 0, -19.0, 99.0),
{"grabpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"grabpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nograbpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nograbpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"adapter", &vo_adapter_num, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL}, {"adapter", &vo_adapter_num, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL},
{"refreshrate",&vo_refresh_rate,CONF_TYPE_INT,CONF_RANGE, 0,100, NULL}, {"refreshrate",&vo_refresh_rate,CONF_TYPE_INT,CONF_RANGE, 0,100, NULL},
{"wid", &WinID, CONF_TYPE_INT64, 0, 0, 0, NULL}, {"wid", &WinID, CONF_TYPE_INT64, 0, 0, 0, NULL},
#ifdef CONFIG_X11 #ifdef CONFIG_X11
// x11,xv,xmga,xvidix // x11,xv,xmga,xvidix
{"icelayer", "-icelayer has been removed. Use -fstype layer:<number> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"icelayer", "-icelayer has been removed. Use -fstype layer:<number> instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"stop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"stop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nostop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nostop-xscreensaver", &stop_xscreensaver, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"stop_xscreensaver", "Use -stop-xscreensaver instead, options with _ have been obsoleted.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"stop_xscreensaver", "Use -stop-xscreensaver instead, options with _ have been obsoleted.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"fstype", &vo_fstype_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"fstype", &vo_fstype_list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
#endif #endif
{"heartbeat-cmd", &heartbeat_cmd, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"heartbeat-cmd", &heartbeat_cmd, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"mouseinput", &vo_nomouse_input, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"mouseinput", &vo_nomouse_input, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"nomouseinput", &vo_nomouse_input, CONF_TYPE_FLAG,0, 0, 1, NULL}, {"nomouseinput", &vo_nomouse_input, CONF_TYPE_FLAG,0, 0, 1, NULL},
{"xineramascreen", &xinerama_screen, CONF_TYPE_INT, CONF_RANGE, -2, 32, NULL}, {"xineramascreen", &xinerama_screen, CONF_TYPE_INT, CONF_RANGE, -2, 32, NULL},
OPT_INTRANGE("brightness", vo_gamma_brightness, 0, -100, 100), OPT_INTRANGE("brightness", vo_gamma_brightness, 0, -100, 100),
OPT_INTRANGE("saturation", vo_gamma_saturation, 0, -100, 100), OPT_INTRANGE("saturation", vo_gamma_saturation, 0, -100, 100),
OPT_INTRANGE("contrast", vo_gamma_contrast, 0, -100, 100), OPT_INTRANGE("contrast", vo_gamma_contrast, 0, -100, 100),
OPT_INTRANGE("hue", vo_gamma_hue, 0, -100, 100), OPT_INTRANGE("hue", vo_gamma_hue, 0, -100, 100),
{"keepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"keepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nokeepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nokeepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 1, 0, NULL},
// direct rendering (decoding to video out buffer) // direct rendering (decoding to video out buffer)
{"dr", &vo_directrendering, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"dr", &vo_directrendering, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nodr", &vo_directrendering, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"nodr", &vo_directrendering, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"vaa_dr", "-vaa_dr has been removed, use -dr.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"vaa_dr", "-vaa_dr has been removed, use -dr.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"vaa_nodr", "-vaa_nodr has been removed, use -nodr.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"vaa_nodr", "-vaa_nodr has been removed, use -nodr.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#ifdef CONFIG_AA #ifdef CONFIG_AA
// -vo aa // -vo aa
{"aa*", "-aa* has been removed. Use -vo aa:suboption instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"aa*", "-aa* has been removed. Use -vo aa:suboption instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif #endif
#ifdef CONFIG_ZR #ifdef CONFIG_ZR
// -vo zr // -vo zr
{"zr*", vo_zr_parseoption, CONF_TYPE_FUNC_FULL, 0, 0, 0, &vo_zr_revertoption }, {"zr*", vo_zr_parseoption, CONF_TYPE_FUNC_FULL, 0, 0, 0, &vo_zr_revertoption },
#endif #endif
#ifdef CONFIG_DXR2 #ifdef CONFIG_DXR2
{"dxr2", &dxr2_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"dxr2", &dxr2_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#endif #endif
//---------------------- mplayer-only options ------------------------ //---------------------- mplayer-only options ------------------------
{"use-filedir-conf", &use_filedir_conf, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"use-filedir-conf", &use_filedir_conf, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nouse-filedir-conf", &use_filedir_conf, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nouse-filedir-conf", &use_filedir_conf, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
{"use-filename-title", &use_filename_title, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"use-filename-title", &use_filename_title, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nouse-filename-title", &use_filename_title, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nouse-filename-title", &use_filename_title, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
#ifdef CONFIG_CRASH_DEBUG #ifdef CONFIG_CRASH_DEBUG
{"crash-debug", &crash_debug, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"crash-debug", &crash_debug, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nocrash-debug", &crash_debug, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nocrash-debug", &crash_debug, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
#endif #endif
OPT_INTRANGE("osdlevel", osd_level, 0, 0, 3), OPT_INTRANGE("osdlevel", osd_level, 0, 0, 3),
OPT_INTRANGE("osd-duration", osd_duration, 0, 0, 3600000), OPT_INTRANGE("osd-duration", osd_duration, 0, 0, 3600000),
#ifdef CONFIG_MENU #ifdef CONFIG_MENU
{"menu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"menu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nomenu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nomenu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
{"menu-root", &menu_root, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"menu-root", &menu_root, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"menu-cfg", &menu_cfg, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"menu-cfg", &menu_cfg, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
{"menu-startup", &menu_startup, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"menu-startup", &menu_startup, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"menu-keepdir", &menu_keepdir, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"menu-keepdir", &menu_keepdir, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"menu-chroot", &menu_chroot, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"menu-chroot", &menu_chroot, CONF_TYPE_STRING, 0, 0, 0, NULL},
#ifdef CONFIG_FRIBIDI #ifdef CONFIG_FRIBIDI
{"menu-fribidi-charset", &menu_fribidi_charset, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"menu-fribidi-charset", &menu_fribidi_charset, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"menu-flip-hebrew", &menu_flip_hebrew, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"menu-flip-hebrew", &menu_flip_hebrew, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"menu-noflip-hebrew", &menu_flip_hebrew, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"menu-noflip-hebrew", &menu_flip_hebrew, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"menu-flip-hebrew-commas", &menu_fribidi_flip_commas, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"menu-flip-hebrew-commas", &menu_fribidi_flip_commas, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"menu-noflip-hebrew-commas", &menu_fribidi_flip_commas, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"menu-noflip-hebrew-commas", &menu_fribidi_flip_commas, CONF_TYPE_FLAG, 0, 0, 1, NULL},
#endif /* CONFIG_FRIBIDI */ #endif /* CONFIG_FRIBIDI */
#else #else
{"menu", "OSD menu support was not compiled in.\n", CONF_TYPE_PRINT,0, 0, 0, NULL}, {"menu", "OSD menu support was not compiled in.\n", CONF_TYPE_PRINT,0, 0, 0, NULL},
#endif /* CONFIG_MENU */ #endif /* CONFIG_MENU */
// these should be moved to -common, and supported in MEncoder // these should be moved to -common, and supported in MEncoder
{"vobsub", &vobsub_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"vobsub", &vobsub_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"vobsubid", &vobsub_id, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL}, {"vobsubid", &vobsub_id, CONF_TYPE_INT, CONF_RANGE, 0, 31, NULL},
#ifdef CONFIG_UNRAR_EXEC #ifdef CONFIG_UNRAR_EXEC
{"unrarexec", &unrar_executable, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"unrarexec", &unrar_executable, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
{"sstep", &step_sec, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL}, {"sstep", &step_sec, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
{"framedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"framedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"hardframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 2, NULL}, {"hardframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 0, 2, NULL},
{"noframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noframedrop", &frame_dropping, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"autoq", &auto_quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL}, {"autoq", &auto_quality, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL},
{"benchmark", &benchmark, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"benchmark", &benchmark, CONF_TYPE_FLAG, 0, 0, 1, NULL},
// dump some stream out instead of playing the file // dump some stream out instead of playing the file
// this really should be in MEncoder instead of MPlayer... -> TODO // this really should be in MEncoder instead of MPlayer... -> TODO
{"dumpfile", &stream_dump_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"dumpfile", &stream_dump_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"dumpaudio", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"dumpaudio", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"dumpvideo", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 2, NULL}, {"dumpvideo", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 2, NULL},
{"dumpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 3, NULL}, {"dumpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 3, NULL},
{"dumpmpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 4, NULL}, {"dumpmpsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 4, NULL},
{"dumpstream", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 5, NULL}, {"dumpstream", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 5, NULL},
{"dumpsrtsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 6, NULL}, {"dumpsrtsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 6, NULL},
{"dumpmicrodvdsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 7, NULL}, {"dumpmicrodvdsub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 7, NULL},
{"dumpjacosub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 8, NULL}, {"dumpjacosub", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 8, NULL},
{"dumpsami", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 9, NULL}, {"dumpsami", &stream_dump_type, CONF_TYPE_FLAG, 0, 0, 9, NULL},
#ifdef CONFIG_LIRC #ifdef CONFIG_LIRC
{"lircconf", &lirc_configfile, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, {"lircconf", &lirc_configfile, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
#endif #endif
// these should be removed when gmplayer is forgotten // these should be removed when gmplayer is forgotten
{"gui", "Internal GUI was removed. Use some other frontend instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"gui", "Internal GUI was removed. Use some other frontend instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
{"nogui", "Internal GUI was removed, -nogui is no longer valid.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"nogui", "Internal GUI was removed, -nogui is no longer valid.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
OPT_FLAG_CONSTANTS("noloop", loop_times, 0, 0, -1), OPT_FLAG_CONSTANTS("noloop", loop_times, 0, 0, -1),
OPT_INTRANGE("loop", loop_times, 0, -1, 10000), OPT_INTRANGE("loop", loop_times, 0, -1, 10000),
{"playlist", NULL, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"playlist", NULL, CONF_TYPE_STRING, 0, 0, 0, NULL},
OPT_FLAG_ON("ordered-chapters", ordered_chapters, 0), OPT_FLAG_ON("ordered-chapters", ordered_chapters, 0),
OPT_FLAG_OFF("noordered-chapters", ordered_chapters, 0), OPT_FLAG_OFF("noordered-chapters", ordered_chapters, 0),
// a-v sync stuff: // a-v sync stuff:
OPT_FLAG_ON("correct-pts", user_correct_pts, 0), OPT_FLAG_ON("correct-pts", user_correct_pts, 0),
OPT_FLAG_OFF("nocorrect-pts", user_correct_pts, 0), OPT_FLAG_OFF("nocorrect-pts", user_correct_pts, 0),
OPT_INTRANGE("pts-association-mode", user_pts_assoc_mode, 0, 0, 2), OPT_INTRANGE("pts-association-mode", user_pts_assoc_mode, 0, 0, 2),
{"noautosync", &autosync, CONF_TYPE_FLAG, 0, 0, -1, NULL}, {"noautosync", &autosync, CONF_TYPE_FLAG, 0, 0, -1, NULL},
{"autosync", &autosync, CONF_TYPE_INT, CONF_RANGE, 0, 10000, NULL}, {"autosync", &autosync, CONF_TYPE_INT, CONF_RANGE, 0, 10000, NULL},
{"softsleep", &softsleep, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"softsleep", &softsleep, CONF_TYPE_FLAG, 0, 0, 1, NULL},
#ifdef HAVE_RTC #ifdef HAVE_RTC
{"nortc", &nortc, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"nortc", &nortc, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"rtc", &nortc, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"rtc", &nortc, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"rtc-device", &rtc_device, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"rtc-device", &rtc_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif #endif
{"term-osd", &term_osd, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"term-osd", &term_osd, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"noterm-osd", &term_osd, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"noterm-osd", &term_osd, CONF_TYPE_FLAG, 0, 1, 0, NULL},
{"term-osd-esc", &term_osd_esc, CONF_TYPE_STRING, 0, 0, 1, NULL}, {"term-osd-esc", &term_osd_esc, CONF_TYPE_STRING, 0, 0, 1, NULL},
{"playing-msg", &playing_msg, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"playing-msg", &playing_msg, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"slave", &slave_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL}, {"slave", &slave_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
{"idle", &player_idle_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL}, {"idle", &player_idle_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 0, 1, NULL},
{"noidle", &player_idle_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 1, 0, NULL}, {"noidle", &player_idle_mode, CONF_TYPE_FLAG,CONF_GLOBAL , 1, 0, NULL},
{"use-stdin", "-use-stdin has been renamed to -noconsolecontrols, use that instead.", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"use-stdin", "-use-stdin has been renamed to -noconsolecontrols, use that instead.", CONF_TYPE_PRINT, 0, 0, 0, NULL},
OPT_INTRANGE("key-fifo-size", key_fifo_size, CONF_GLOBAL, 2, 65000), OPT_INTRANGE("key-fifo-size", key_fifo_size, CONF_GLOBAL, 2, 65000),
{"noconsolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"noconsolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"consolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"consolecontrols", &noconsolecontrols, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
{"mouse-movements", &enable_mouse_movements, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"mouse-movements", &enable_mouse_movements, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nomouse-movements", &enable_mouse_movements, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, {"nomouse-movements", &enable_mouse_movements, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
OPT_INTRANGE("doubleclick-time", doubleclick_time, 0, 0, 1000), OPT_INTRANGE("doubleclick-time", doubleclick_time, 0, 0, 1000),
#ifdef CONFIG_TV #ifdef CONFIG_TV
{"tvscan", (void *) tvscan_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"tvscan", (void *) tvscan_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
#else #else
{"tvscan", "MPlayer was compiled without TV interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL}, {"tvscan", "MPlayer was compiled without TV interface support.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
#endif /* CONFIG_TV */ #endif /* CONFIG_TV */
#include "cfg-common-opts.h" #include "cfg-common-opts.h"
{"list-properties", &list_properties, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"list-properties", &list_properties, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"identify", &mp_msg_levels[MSGT_IDENTIFY], CONF_TYPE_FLAG, CONF_GLOBAL, 0, MSGL_V, NULL}, {"identify", &mp_msg_levels[MSGT_IDENTIFY], CONF_TYPE_FLAG, CONF_GLOBAL, 0, MSGL_V, NULL},
{"-help", (void *) help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL}, {"-help", (void *) help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
{"help", (void *) help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL}, {"help", (void *) help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
{"h", (void *) help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL}, {"h", (void *) help_text, CONF_TYPE_PRINT, CONF_NOCFG|CONF_GLOBAL, 0, 0, NULL},
{"vd", (void *) vd_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, {"vd", (void *) vd_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
{NULL, NULL, 0, 0, 0, 0, NULL} {NULL, NULL, 0, 0, 0, 0, NULL}
}; };
#endif /* MPLAYER_CFG_MPLAYER_H */ #endif /* MPLAYER_CFG_MPLAYER_H */

File diff suppressed because it is too large Load Diff

View File

@ -19,60 +19,60 @@
#ifndef MPLAYER_CODEC_CFG_H #ifndef MPLAYER_CODEC_CFG_H
#define MPLAYER_CODEC_CFG_H #define MPLAYER_CODEC_CFG_H
#define CODEC_CFG_MIN 20070407 #define CODEC_CFG_MIN 20070407
#define CODECS_MAX_FOURCC 92 #define CODECS_MAX_FOURCC 92
#define CODECS_MAX_OUTFMT 16 #define CODECS_MAX_OUTFMT 16
#define CODECS_MAX_INFMT 16 #define CODECS_MAX_INFMT 16
// Global flags: // Global flags:
#define CODECS_FLAG_SEEKABLE (1<<0) #define CODECS_FLAG_SEEKABLE (1<<0)
#define CODECS_FLAG_ALIGN16 (1<<1) #define CODECS_FLAG_ALIGN16 (1<<1)
// Outfmt flags: // Outfmt flags:
#define CODECS_FLAG_FLIP (1<<0) #define CODECS_FLAG_FLIP (1<<0)
#define CODECS_FLAG_NOFLIP (1<<1) #define CODECS_FLAG_NOFLIP (1<<1)
#define CODECS_FLAG_YUVHACK (1<<2) #define CODECS_FLAG_YUVHACK (1<<2)
#define CODECS_FLAG_QUERY (1<<3) #define CODECS_FLAG_QUERY (1<<3)
#define CODECS_FLAG_STATIC (1<<4) #define CODECS_FLAG_STATIC (1<<4)
#define CODECS_STATUS__MIN 0 #define CODECS_STATUS__MIN 0
#define CODECS_STATUS_NOT_WORKING -1 #define CODECS_STATUS_NOT_WORKING -1
#define CODECS_STATUS_PROBLEMS 0 #define CODECS_STATUS_PROBLEMS 0
#define CODECS_STATUS_WORKING 1 #define CODECS_STATUS_WORKING 1
#define CODECS_STATUS_UNTESTED 2 #define CODECS_STATUS_UNTESTED 2
#define CODECS_STATUS__MAX 2 #define CODECS_STATUS__MAX 2
#if !defined(GUID_TYPE) && !defined(GUID_DEFINED) #if !defined(GUID_TYPE) && !defined(GUID_DEFINED)
#define GUID_TYPE 1 #define GUID_TYPE 1
#define GUID_DEFINED 1 #define GUID_DEFINED 1
typedef struct { typedef struct {
unsigned long f1; unsigned long f1;
unsigned short f2; unsigned short f2;
unsigned short f3; unsigned short f3;
unsigned char f4[8]; unsigned char f4[8];
} GUID; } GUID;
#endif #endif
typedef struct codecs { typedef struct codecs {
unsigned int fourcc[CODECS_MAX_FOURCC]; unsigned int fourcc[CODECS_MAX_FOURCC];
unsigned int fourccmap[CODECS_MAX_FOURCC]; unsigned int fourccmap[CODECS_MAX_FOURCC];
unsigned int outfmt[CODECS_MAX_OUTFMT]; unsigned int outfmt[CODECS_MAX_OUTFMT];
unsigned char outflags[CODECS_MAX_OUTFMT]; unsigned char outflags[CODECS_MAX_OUTFMT];
unsigned int infmt[CODECS_MAX_INFMT]; unsigned int infmt[CODECS_MAX_INFMT];
unsigned char inflags[CODECS_MAX_INFMT]; unsigned char inflags[CODECS_MAX_INFMT];
char *name; char *name;
char *info; char *info;
char *comment; char *comment;
char *dll; char *dll;
char* drv; char* drv;
GUID guid; GUID guid;
// short driver; // short driver;
short flags; short flags;
short status; short status;
short cpuflags; short cpuflags;
} codecs_t; } codecs_t;
int parse_codec_cfg(const char *cfgfile); int parse_codec_cfg(const char *cfgfile);

2514
command.c

File diff suppressed because it is too large Load Diff

View File

@ -63,29 +63,29 @@ static int has_cpuid(void)
#if ARCH_X86_64 #if ARCH_X86_64
return 1; return 1;
#else #else
long a, c; long a, c;
__asm__ volatile ( __asm__ volatile (
/* See if CPUID instruction is supported ... */ /* See if CPUID instruction is supported ... */
/* ... Get copies of EFLAGS into eax and ecx */ /* ... Get copies of EFLAGS into eax and ecx */
"pushfl\n\t" "pushfl\n\t"
"pop %0\n\t" "pop %0\n\t"
"mov %0, %1\n\t" "mov %0, %1\n\t"
/* ... Toggle the ID bit in one copy and store */ /* ... Toggle the ID bit in one copy and store */
/* to the EFLAGS reg */ /* to the EFLAGS reg */
"xor $0x200000, %0\n\t" "xor $0x200000, %0\n\t"
"push %0\n\t" "push %0\n\t"
"popfl\n\t" "popfl\n\t"
/* ... Get the (hopefully modified) EFLAGS */ /* ... Get the (hopefully modified) EFLAGS */
"pushfl\n\t" "pushfl\n\t"
"pop %0\n\t" "pop %0\n\t"
: "=a" (a), "=c" (c) : "=a" (a), "=c" (c)
: :
: "cc" : "cc"
); );
return a != c; return a != c;
#endif #endif
} }
@ -93,168 +93,167 @@ static void
do_cpuid(unsigned int ax, unsigned int *p) do_cpuid(unsigned int ax, unsigned int *p)
{ {
#if 0 #if 0
__asm__ volatile( __asm__ volatile(
"cpuid;" "cpuid;"
: "=a" (p[0]), "=b" (p[1]), "=c" (p[2]), "=d" (p[3]) : "=a" (p[0]), "=b" (p[1]), "=c" (p[2]), "=d" (p[3])
: "0" (ax) : "0" (ax)
); );
#else #else
// code from libavcodec: // code from libavcodec:
__asm__ volatile __asm__ volatile
("mov %%"REG_b", %%"REG_S"\n\t" ("mov %%"REG_b", %%"REG_S"\n\t"
"cpuid\n\t" "cpuid\n\t"
"xchg %%"REG_b", %%"REG_S "xchg %%"REG_b", %%"REG_S
: "=a" (p[0]), "=S" (p[1]), : "=a" (p[0]), "=S" (p[1]),
"=c" (p[2]), "=d" (p[3]) "=c" (p[2]), "=d" (p[3])
: "0" (ax)); : "0" (ax));
#endif #endif
} }
void GetCpuCaps( CpuCaps *caps) void GetCpuCaps( CpuCaps *caps)
{ {
unsigned int regs[4]; unsigned int regs[4];
unsigned int regs2[4]; unsigned int regs2[4];
memset(caps, 0, sizeof(*caps)); memset(caps, 0, sizeof(*caps));
caps->isX86=1; caps->isX86=1;
caps->cl_size=32; /* default */ caps->cl_size=32; /* default */
if (!has_cpuid()) { if (!has_cpuid()) {
mp_msg(MSGT_CPUDETECT,MSGL_WARN,"CPUID not supported!??? (maybe an old 486?)\n"); mp_msg(MSGT_CPUDETECT,MSGL_WARN,"CPUID not supported!??? (maybe an old 486?)\n");
return; return;
} }
do_cpuid(0x00000000, regs); // get _max_ cpuid level and vendor name do_cpuid(0x00000000, regs); // get _max_ cpuid level and vendor name
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU vendor name: %.4s%.4s%.4s max cpuid level: %d\n", mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU vendor name: %.4s%.4s%.4s max cpuid level: %d\n",
(char*) (regs+1),(char*) (regs+3),(char*) (regs+2), regs[0]); (char*) (regs+1),(char*) (regs+3),(char*) (regs+2), regs[0]);
if (regs[0]>=0x00000001) if (regs[0]>=0x00000001)
{ {
char *tmpstr, *ptmpstr; char *tmpstr, *ptmpstr;
unsigned cl_size; unsigned cl_size;
do_cpuid(0x00000001, regs2); do_cpuid(0x00000001, regs2);
caps->cpuType=(regs2[0] >> 8)&0xf; caps->cpuType=(regs2[0] >> 8)&0xf;
caps->cpuModel=(regs2[0] >> 4)&0xf; caps->cpuModel=(regs2[0] >> 4)&0xf;
// see AMD64 Architecture Programmer's Manual, Volume 3: General-purpose and // see AMD64 Architecture Programmer's Manual, Volume 3: General-purpose and
// System Instructions, Table 3-2: Effective family computation, page 120. // System Instructions, Table 3-2: Effective family computation, page 120.
if(caps->cpuType==0xf){ if(caps->cpuType==0xf){
// use extended family (P4, IA64, K8) // use extended family (P4, IA64, K8)
caps->cpuType=0xf+((regs2[0]>>20)&255); caps->cpuType=0xf+((regs2[0]>>20)&255);
} }
if(caps->cpuType==0xf || caps->cpuType==6) if(caps->cpuType==0xf || caps->cpuType==6)
caps->cpuModel |= ((regs2[0]>>16)&0xf) << 4; caps->cpuModel |= ((regs2[0]>>16)&0xf) << 4;
caps->cpuStepping=regs2[0] & 0xf; caps->cpuStepping=regs2[0] & 0xf;
// general feature flags: // general feature flags:
caps->hasTSC = (regs2[3] & (1 << 8 )) >> 8; // 0x0000010 caps->hasTSC = (regs2[3] & (1 << 8 )) >> 8; // 0x0000010
caps->hasMMX = (regs2[3] & (1 << 23 )) >> 23; // 0x0800000 caps->hasMMX = (regs2[3] & (1 << 23 )) >> 23; // 0x0800000
caps->hasSSE = (regs2[3] & (1 << 25 )) >> 25; // 0x2000000 caps->hasSSE = (regs2[3] & (1 << 25 )) >> 25; // 0x2000000
caps->hasSSE2 = (regs2[3] & (1 << 26 )) >> 26; // 0x4000000 caps->hasSSE2 = (regs2[3] & (1 << 26 )) >> 26; // 0x4000000
caps->hasSSE3 = (regs2[2] & 1); // 0x0000001 caps->hasSSE3 = (regs2[2] & 1); // 0x0000001
caps->hasSSSE3 = (regs2[2] & (1 << 9 )) >> 9; // 0x0000200 caps->hasSSSE3 = (regs2[2] & (1 << 9 )) >> 9; // 0x0000200
caps->hasMMX2 = caps->hasSSE; // SSE cpus supports mmxext too caps->hasMMX2 = caps->hasSSE; // SSE cpus supports mmxext too
cl_size = ((regs2[1] >> 8) & 0xFF)*8; cl_size = ((regs2[1] >> 8) & 0xFF)*8;
if(cl_size) caps->cl_size = cl_size; if(cl_size) caps->cl_size = cl_size;
ptmpstr=tmpstr=GetCpuFriendlyName(regs, regs2); ptmpstr=tmpstr=GetCpuFriendlyName(regs, regs2);
while(*ptmpstr == ' ') // strip leading spaces while(*ptmpstr == ' ') // strip leading spaces
ptmpstr++; ptmpstr++;
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: %s ", ptmpstr); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: %s ", ptmpstr);
free(tmpstr); free(tmpstr);
mp_msg(MSGT_CPUDETECT,MSGL_V,"(Family: %d, Model: %d, Stepping: %d)\n", mp_msg(MSGT_CPUDETECT,MSGL_V,"(Family: %d, Model: %d, Stepping: %d)\n",
caps->cpuType, caps->cpuModel, caps->cpuStepping); caps->cpuType, caps->cpuModel, caps->cpuStepping);
} }
do_cpuid(0x80000000, regs); do_cpuid(0x80000000, regs);
if (regs[0]>=0x80000001) { if (regs[0]>=0x80000001) {
mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cpuid-level: %d\n",regs[0]&0x7FFFFFFF); mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cpuid-level: %d\n",regs[0]&0x7FFFFFFF);
do_cpuid(0x80000001, regs2); do_cpuid(0x80000001, regs2);
caps->hasMMX |= (regs2[3] & (1 << 23 )) >> 23; // 0x0800000 caps->hasMMX |= (regs2[3] & (1 << 23 )) >> 23; // 0x0800000
caps->hasMMX2 |= (regs2[3] & (1 << 22 )) >> 22; // 0x400000 caps->hasMMX2 |= (regs2[3] & (1 << 22 )) >> 22; // 0x400000
caps->has3DNow = (regs2[3] & (1 << 31 )) >> 31; //0x80000000 caps->has3DNow = (regs2[3] & (1 << 31 )) >> 31; //0x80000000
caps->has3DNowExt = (regs2[3] & (1 << 30 )) >> 30; caps->has3DNowExt = (regs2[3] & (1 << 30 )) >> 30;
caps->hasSSE4a = (regs2[2] & (1 << 6 )) >> 6; // 0x0000040 caps->hasSSE4a = (regs2[2] & (1 << 6 )) >> 6; // 0x0000040
} }
if(regs[0]>=0x80000006) if(regs[0]>=0x80000006)
{ {
do_cpuid(0x80000006, regs2); do_cpuid(0x80000006, regs2);
mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cache-info: %d\n",regs2[2]&0x7FFFFFFF); mp_msg(MSGT_CPUDETECT,MSGL_V,"extended cache-info: %d\n",regs2[2]&0x7FFFFFFF);
caps->cl_size = regs2[2] & 0xFF; caps->cl_size = regs2[2] & 0xFF;
} }
mp_msg(MSGT_CPUDETECT,MSGL_V,"Detected cache-line size is %u bytes\n",caps->cl_size); mp_msg(MSGT_CPUDETECT,MSGL_V,"Detected cache-line size is %u bytes\n",caps->cl_size);
#if 0 #if 0
mp_msg(MSGT_CPUDETECT,MSGL_INFO,"cpudetect: MMX=%d MMX2=%d SSE=%d SSE2=%d 3DNow=%d 3DNowExt=%d\n", mp_msg(MSGT_CPUDETECT,MSGL_INFO,"cpudetect: MMX=%d MMX2=%d SSE=%d SSE2=%d 3DNow=%d 3DNowExt=%d\n",
gCpuCaps.hasMMX, gCpuCaps.hasMMX,
gCpuCaps.hasMMX2, gCpuCaps.hasMMX2,
gCpuCaps.hasSSE, gCpuCaps.hasSSE,
gCpuCaps.hasSSE2, gCpuCaps.hasSSE2,
gCpuCaps.has3DNow, gCpuCaps.has3DNow,
gCpuCaps.has3DNowExt ); gCpuCaps.has3DNowExt);
#endif #endif
/* FIXME: Does SSE2 need more OS support, too? */ /* FIXME: Does SSE2 need more OS support, too? */
if (caps->hasSSE) if (caps->hasSSE)
check_os_katmai_support(); check_os_katmai_support();
if (!caps->hasSSE) if (!caps->hasSSE)
caps->hasSSE2 = 0; caps->hasSSE2 = 0;
// caps->has3DNow=1; // caps->has3DNow=1;
// caps->hasMMX2 = 0; // caps->hasMMX2 = 0;
// caps->hasMMX = 0; // caps->hasMMX = 0;
#if !CONFIG_RUNTIME_CPUDETECT #if !CONFIG_RUNTIME_CPUDETECT
#if !HAVE_MMX #if !HAVE_MMX
if(caps->hasMMX) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"MMX supported but disabled\n"); if(caps->hasMMX) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"MMX supported but disabled\n");
caps->hasMMX=0; caps->hasMMX=0;
#endif #endif
#if !HAVE_MMX2 #if !HAVE_MMX2
if(caps->hasMMX2) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"MMX2 supported but disabled\n"); if(caps->hasMMX2) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"MMX2 supported but disabled\n");
caps->hasMMX2=0; caps->hasMMX2=0;
#endif #endif
#if !HAVE_SSE #if !HAVE_SSE
if(caps->hasSSE) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"SSE supported but disabled\n"); if(caps->hasSSE) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"SSE supported but disabled\n");
caps->hasSSE=0; caps->hasSSE=0;
#endif #endif
#if !HAVE_SSE2 #if !HAVE_SSE2
if(caps->hasSSE2) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"SSE2 supported but disabled\n"); if(caps->hasSSE2) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"SSE2 supported but disabled\n");
caps->hasSSE2=0; caps->hasSSE2=0;
#endif #endif
#if !HAVE_AMD3DNOW #if !HAVE_AMD3DNOW
if(caps->has3DNow) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"3DNow supported but disabled\n"); if(caps->has3DNow) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"3DNow supported but disabled\n");
caps->has3DNow=0; caps->has3DNow=0;
#endif #endif
#if !HAVE_AMD3DNOWEXT #if !HAVE_AMD3DNOWEXT
if(caps->has3DNowExt) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"3DNowExt supported but disabled\n"); if(caps->has3DNowExt) mp_msg(MSGT_CPUDETECT,MSGL_WARN,"3DNowExt supported but disabled\n");
caps->has3DNowExt=0; caps->has3DNowExt=0;
#endif #endif
#endif // CONFIG_RUNTIME_CPUDETECT #endif // CONFIG_RUNTIME_CPUDETECT
} }
char *GetCpuFriendlyName(unsigned int regs[], unsigned int regs2[]){ char *GetCpuFriendlyName(unsigned int regs[], unsigned int regs2[]){
char vendor[13]; char vendor[13];
char *retname; char *retname;
int i; int i;
if (NULL==(retname=malloc(256))) { if (NULL==(retname=malloc(256))) {
mp_msg(MSGT_CPUDETECT,MSGL_FATAL,"Error: GetCpuFriendlyName() not enough memory\n"); mp_msg(MSGT_CPUDETECT,MSGL_FATAL,"Error: GetCpuFriendlyName() not enough memory\n");
exit(1); exit(1);
} }
retname[0] = '\0'; retname[0] = '\0';
sprintf(vendor,"%.4s%.4s%.4s",(char*)(regs+1),(char*)(regs+3),(char*)(regs+2)); sprintf(vendor,"%.4s%.4s%.4s",(char*)(regs+1),(char*)(regs+3),(char*)(regs+2));
do_cpuid(0x80000000,regs); do_cpuid(0x80000000,regs);
if (regs[0] >= 0x80000004) if (regs[0] >= 0x80000004)
{ {
// CPU has built-in namestring // CPU has built-in namestring
for (i = 0x80000002; i <= 0x80000004; i++) for (i = 0x80000002; i <= 0x80000004; i++)
{ {
do_cpuid(i, regs); do_cpuid(i, regs);
strncat(retname, (char*)regs, 16); strncat(retname, (char*)regs, 16);
} }
} }
return retname; return retname;
} }
#if defined(__linux__) && defined(_POSIX_SOURCE) && !ARCH_X86_64 #if defined(__linux__) && defined(_POSIX_SOURCE) && !ARCH_X86_64
@ -281,31 +280,31 @@ static void sigill_handler_sse( int signal, struct sigcontext sc )
#if (defined(__MINGW32__) || defined(__CYGWIN__)) && !ARCH_X86_64 #if (defined(__MINGW32__) || defined(__CYGWIN__)) && !ARCH_X86_64
LONG CALLBACK win32_sig_handler_sse(EXCEPTION_POINTERS* ep) LONG CALLBACK win32_sig_handler_sse(EXCEPTION_POINTERS* ep)
{ {
if(ep->ExceptionRecord->ExceptionCode==EXCEPTION_ILLEGAL_INSTRUCTION){ if(ep->ExceptionRecord->ExceptionCode==EXCEPTION_ILLEGAL_INSTRUCTION){
mp_msg(MSGT_CPUDETECT,MSGL_V, "SIGILL, " ); mp_msg(MSGT_CPUDETECT,MSGL_V, "SIGILL, " );
ep->ContextRecord->Eip +=3; ep->ContextRecord->Eip +=3;
gCpuCaps.hasSSE=0; gCpuCaps.hasSSE=0;
return EXCEPTION_CONTINUE_EXECUTION; return EXCEPTION_CONTINUE_EXECUTION;
} }
return EXCEPTION_CONTINUE_SEARCH; return EXCEPTION_CONTINUE_SEARCH;
} }
#endif /* defined(__MINGW32__) || defined(__CYGWIN__) */ #endif /* defined(__MINGW32__) || defined(__CYGWIN__) */
#ifdef __OS2__ #ifdef __OS2__
ULONG _System os2_sig_handler_sse( PEXCEPTIONREPORTRECORD p1, ULONG _System os2_sig_handler_sse(PEXCEPTIONREPORTRECORD p1,
PEXCEPTIONREGISTRATIONRECORD p2, PEXCEPTIONREGISTRATIONRECORD p2,
PCONTEXTRECORD p3, PCONTEXTRECORD p3,
PVOID p4 ) PVOID p4)
{ {
if(p1->ExceptionNum == XCPT_ILLEGAL_INSTRUCTION){ if(p1->ExceptionNum == XCPT_ILLEGAL_INSTRUCTION){
mp_msg(MSGT_CPUDETECT, MSGL_V, "SIGILL, "); mp_msg(MSGT_CPUDETECT, MSGL_V, "SIGILL, ");
p3->ctx_RegEip += 3; p3->ctx_RegEip += 3;
gCpuCaps.hasSSE = 0; gCpuCaps.hasSSE = 0;
return XCPT_CONTINUE_EXECUTION; return XCPT_CONTINUE_EXECUTION;
} }
return XCPT_CONTINUE_SEARCH; return XCPT_CONTINUE_SEARCH;
} }
#endif #endif
@ -325,103 +324,103 @@ ULONG _System os2_sig_handler_sse( PEXCEPTIONREPORTRECORD p1,
static void check_os_katmai_support( void ) static void check_os_katmai_support( void )
{ {
#if ARCH_X86_64 #if ARCH_X86_64
gCpuCaps.hasSSE=1; gCpuCaps.hasSSE=1;
gCpuCaps.hasSSE2=1; gCpuCaps.hasSSE2=1;
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__) #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
int has_sse=0, ret; int has_sse=0, ret;
size_t len=sizeof(has_sse); size_t len=sizeof(has_sse);
ret = sysctlbyname(SSE_SYSCTL_NAME, &has_sse, &len, NULL, 0); ret = sysctlbyname(SSE_SYSCTL_NAME, &has_sse, &len, NULL, 0);
if (ret || !has_sse) if (ret || !has_sse)
gCpuCaps.hasSSE=0; gCpuCaps.hasSSE=0;
#elif defined(__NetBSD__) || defined (__OpenBSD__) #elif defined(__NetBSD__) || defined (__OpenBSD__)
#if __NetBSD_Version__ >= 105250000 || (defined __OpenBSD__) #if __NetBSD_Version__ >= 105250000 || (defined __OpenBSD__)
int has_sse, has_sse2, ret, mib[2]; int has_sse, has_sse2, ret, mib[2];
size_t varlen; size_t varlen;
mib[0] = CTL_MACHDEP; mib[0] = CTL_MACHDEP;
mib[1] = CPU_SSE; mib[1] = CPU_SSE;
varlen = sizeof(has_sse); varlen = sizeof(has_sse);
mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " );
ret = sysctl(mib, 2, &has_sse, &varlen, NULL, 0); ret = sysctl(mib, 2, &has_sse, &varlen, NULL, 0);
gCpuCaps.hasSSE = ret >= 0 && has_sse; gCpuCaps.hasSSE = ret >= 0 && has_sse;
mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" );
mib[1] = CPU_SSE2; mib[1] = CPU_SSE2;
varlen = sizeof(has_sse2); varlen = sizeof(has_sse2);
mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE2... " ); mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE2... " );
ret = sysctl(mib, 2, &has_sse2, &varlen, NULL, 0); ret = sysctl(mib, 2, &has_sse2, &varlen, NULL, 0);
gCpuCaps.hasSSE2 = ret >= 0 && has_sse2; gCpuCaps.hasSSE2 = ret >= 0 && has_sse2;
mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE2 ? "yes.\n" : "no!\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE2 ? "yes.\n" : "no!\n" );
#else #else
gCpuCaps.hasSSE = 0; gCpuCaps.hasSSE = 0;
mp_msg(MSGT_CPUDETECT,MSGL_WARN, "No OS support for SSE, disabling to be safe.\n" ); mp_msg(MSGT_CPUDETECT,MSGL_WARN, "No OS support for SSE, disabling to be safe.\n" );
#endif #endif
#elif defined(__MINGW32__) || defined(__CYGWIN__) #elif defined(__MINGW32__) || defined(__CYGWIN__)
LPTOP_LEVEL_EXCEPTION_FILTER exc_fil; LPTOP_LEVEL_EXCEPTION_FILTER exc_fil;
if ( gCpuCaps.hasSSE ) { if ( gCpuCaps.hasSSE ) {
mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " );
exc_fil = SetUnhandledExceptionFilter(win32_sig_handler_sse); exc_fil = SetUnhandledExceptionFilter(win32_sig_handler_sse);
__asm__ volatile ("xorps %xmm0, %xmm0"); __asm__ volatile ("xorps %xmm0, %xmm0");
SetUnhandledExceptionFilter(exc_fil); SetUnhandledExceptionFilter(exc_fil);
mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" );
} }
#elif defined(__OS2__) #elif defined(__OS2__)
EXCEPTIONREGISTRATIONRECORD RegRec = { 0, &os2_sig_handler_sse }; EXCEPTIONREGISTRATIONRECORD RegRec = { 0, &os2_sig_handler_sse };
if ( gCpuCaps.hasSSE ) { if ( gCpuCaps.hasSSE ) {
mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " );
DosSetExceptionHandler( &RegRec ); DosSetExceptionHandler( &RegRec );
__asm__ volatile ("xorps %xmm0, %xmm0"); __asm__ volatile ("xorps %xmm0, %xmm0");
DosUnsetExceptionHandler( &RegRec ); DosUnsetExceptionHandler( &RegRec );
mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" );
} }
#elif defined(__linux__) #elif defined(__linux__)
#if defined(_POSIX_SOURCE) #if defined(_POSIX_SOURCE)
struct sigaction saved_sigill; struct sigaction saved_sigill;
/* Save the original signal handlers. /* Save the original signal handlers.
*/ */
sigaction( SIGILL, NULL, &saved_sigill ); sigaction( SIGILL, NULL, &saved_sigill );
signal( SIGILL, (void (*)(int))sigill_handler_sse ); signal( SIGILL, (void (*)(int))sigill_handler_sse );
/* Emulate test for OSFXSR in CR4. The OS will set this bit if it /* Emulate test for OSFXSR in CR4. The OS will set this bit if it
* supports the extended FPU save and restore required for SSE. If * supports the extended FPU save and restore required for SSE. If
* we execute an SSE instruction on a PIII and get a SIGILL, the OS * we execute an SSE instruction on a PIII and get a SIGILL, the OS
* doesn't support Streaming SIMD Exceptions, even if the processor * doesn't support Streaming SIMD Exceptions, even if the processor
* does. * does.
*/ */
if ( gCpuCaps.hasSSE ) { if ( gCpuCaps.hasSSE ) {
mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " );
// __asm__ volatile ("xorps %%xmm0, %%xmm0"); // __asm__ volatile ("xorps %%xmm0, %%xmm0");
__asm__ volatile ("xorps %xmm0, %xmm0"); __asm__ volatile ("xorps %xmm0, %xmm0");
mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, gCpuCaps.hasSSE ? "yes.\n" : "no!\n" );
} }
/* Restore the original signal handlers. /* Restore the original signal handlers.
*/ */
sigaction( SIGILL, &saved_sigill, NULL ); sigaction( SIGILL, &saved_sigill, NULL );
/* If we've gotten to here and the XMM CPUID bit is still set, we're /* If we've gotten to here and the XMM CPUID bit is still set, we're
* safe to go ahead and hook out the SSE code throughout Mesa. * safe to go ahead and hook out the SSE code throughout Mesa.
*/ */
mp_msg(MSGT_CPUDETECT,MSGL_V, "Tests of OS support for SSE %s\n", gCpuCaps.hasSSE ? "passed." : "failed!" ); mp_msg(MSGT_CPUDETECT,MSGL_V, "Tests of OS support for SSE %s\n", gCpuCaps.hasSSE ? "passed." : "failed!" );
#else #else
/* We can't use POSIX signal handling to test the availability of /* We can't use POSIX signal handling to test the availability of
* SSE, so we disable it by default. * SSE, so we disable it by default.
*/ */
mp_msg(MSGT_CPUDETECT,MSGL_WARN, "Cannot test OS support for SSE, disabling to be safe.\n" ); mp_msg(MSGT_CPUDETECT,MSGL_WARN, "Cannot test OS support for SSE, disabling to be safe.\n" );
gCpuCaps.hasSSE=0; gCpuCaps.hasSSE=0;
#endif /* _POSIX_SOURCE */ #endif /* _POSIX_SOURCE */
#else #else
/* Do nothing on other platforms for now. /* Do nothing on other platforms for now.
*/ */
mp_msg(MSGT_CPUDETECT,MSGL_WARN, "Cannot test OS support for SSE, leaving disabled.\n" ); mp_msg(MSGT_CPUDETECT,MSGL_WARN, "Cannot test OS support for SSE, leaving disabled.\n" );
gCpuCaps.hasSSE=0; gCpuCaps.hasSSE=0;
#endif /* __linux__ */ #endif /* __linux__ */
} }
#else /* ARCH_X86 */ #else /* ARCH_X86 */
@ -451,98 +450,98 @@ static void sigill_handler (int sig)
void GetCpuCaps( CpuCaps *caps) void GetCpuCaps( CpuCaps *caps)
{ {
caps->cpuType=0; caps->cpuType=0;
caps->cpuModel=0; caps->cpuModel=0;
caps->cpuStepping=0; caps->cpuStepping=0;
caps->hasMMX=0; caps->hasMMX=0;
caps->hasMMX2=0; caps->hasMMX2=0;
caps->has3DNow=0; caps->has3DNow=0;
caps->has3DNowExt=0; caps->has3DNowExt=0;
caps->hasSSE=0; caps->hasSSE=0;
caps->hasSSE2=0; caps->hasSSE2=0;
caps->hasSSE3=0; caps->hasSSE3=0;
caps->hasSSSE3=0; caps->hasSSSE3=0;
caps->hasSSE4a=0; caps->hasSSE4a=0;
caps->isX86=0; caps->isX86=0;
caps->hasAltiVec = 0; caps->hasAltiVec = 0;
#if HAVE_ALTIVEC #if HAVE_ALTIVEC
#ifdef __APPLE__ #ifdef __APPLE__
/* /*
rip-off from ffmpeg altivec detection code. rip-off from ffmpeg altivec detection code.
this code also appears on Apple's AltiVec pages. this code also appears on Apple's AltiVec pages.
*/ */
{ {
int sels[2] = {CTL_HW, HW_VECTORUNIT}; int sels[2] = {CTL_HW, HW_VECTORUNIT};
int has_vu = 0; int has_vu = 0;
size_t len = sizeof(has_vu); size_t len = sizeof(has_vu);
int err; int err;
err = sysctl(sels, 2, &has_vu, &len, NULL, 0); err = sysctl(sels, 2, &has_vu, &len, NULL, 0);
if (err == 0) if (err == 0)
if (has_vu != 0) if (has_vu != 0)
caps->hasAltiVec = 1; caps->hasAltiVec = 1;
} }
#elif defined(__AMIGAOS4__) #elif defined(__AMIGAOS4__)
ULONG result = 0; ULONG result = 0;
GetCPUInfoTags(GCIT_VectorUnit, &result, TAG_DONE); GetCPUInfoTags(GCIT_VectorUnit, &result, TAG_DONE);
if (result == VECTORTYPE_ALTIVEC) if (result == VECTORTYPE_ALTIVEC)
caps->hasAltiVec = 1; caps->hasAltiVec = 1;
#else #else
/* no Darwin, do it the brute-force way */ /* no Darwin, do it the brute-force way */
/* this is borrowed from the libmpeg2 library */ /* this is borrowed from the libmpeg2 library */
{ {
signal (SIGILL, sigill_handler); signal (SIGILL, sigill_handler);
if (sigsetjmp (jmpbuf, 1)) { if (sigsetjmp (jmpbuf, 1)) {
signal (SIGILL, SIG_DFL); signal (SIGILL, SIG_DFL);
} else { } else {
canjump = 1; canjump = 1;
__asm__ volatile ("mtspr 256, %0\n\t" __asm__ volatile ("mtspr 256, %0\n\t"
"vand %%v0, %%v0, %%v0" "vand %%v0, %%v0, %%v0"
: :
: "r" (-1)); : "r" (-1));
signal (SIGILL, SIG_DFL); signal (SIGILL, SIG_DFL);
caps->hasAltiVec = 1; caps->hasAltiVec = 1;
}
} }
}
#endif /* __APPLE__ */ #endif /* __APPLE__ */
mp_msg(MSGT_CPUDETECT,MSGL_V,"AltiVec %sfound\n", (caps->hasAltiVec ? "" : "not ")); mp_msg(MSGT_CPUDETECT,MSGL_V,"AltiVec %sfound\n", (caps->hasAltiVec ? "" : "not "));
#endif /* HAVE_ALTIVEC */ #endif /* HAVE_ALTIVEC */
if (ARCH_IA64) if (ARCH_IA64)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Intel Itanium\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Intel Itanium\n");
if (ARCH_SPARC) if (ARCH_SPARC)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Sun Sparc\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Sun Sparc\n");
if (ARCH_ARM) if (ARCH_ARM)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: ARM\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: ARM\n");
if (ARCH_PPC) if (ARCH_PPC)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: PowerPC\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: PowerPC\n");
if (ARCH_ALPHA) if (ARCH_ALPHA)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Digital Alpha\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Digital Alpha\n");
if (ARCH_MIPS) if (ARCH_MIPS)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: MIPS\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: MIPS\n");
if (ARCH_PA_RISC) if (ARCH_PA_RISC)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Hewlett-Packard PA-RISC\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: Hewlett-Packard PA-RISC\n");
if (ARCH_S390) if (ARCH_S390)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: IBM S/390\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: IBM S/390\n");
if (ARCH_S390X) if (ARCH_S390X)
mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: IBM S/390X\n"); mp_msg(MSGT_CPUDETECT,MSGL_V,"CPU: IBM S/390X\n");
if (ARCH_VAX) if (ARCH_VAX)
mp_msg(MSGT_CPUDETECT,MSGL_V, "CPU: Digital VAX\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, "CPU: Digital VAX\n" );
if (ARCH_XTENSA) if (ARCH_XTENSA)
mp_msg(MSGT_CPUDETECT,MSGL_V, "CPU: Tensilica Xtensa\n" ); mp_msg(MSGT_CPUDETECT,MSGL_V, "CPU: Tensilica Xtensa\n" );
} }
#endif /* !ARCH_X86 */ #endif /* !ARCH_X86 */

View File

@ -21,30 +21,30 @@
#include "config.h" #include "config.h"
#define CPUTYPE_I386 3 #define CPUTYPE_I386 3
#define CPUTYPE_I486 4 #define CPUTYPE_I486 4
#define CPUTYPE_I586 5 #define CPUTYPE_I586 5
#define CPUTYPE_I686 6 #define CPUTYPE_I686 6
#include "ffmpeg_files/x86_cpu.h" #include "ffmpeg_files/x86_cpu.h"
typedef struct cpucaps_s { typedef struct cpucaps_s {
int cpuType; int cpuType;
int cpuModel; int cpuModel;
int cpuStepping; int cpuStepping;
int hasMMX; int hasMMX;
int hasMMX2; int hasMMX2;
int has3DNow; int has3DNow;
int has3DNowExt; int has3DNowExt;
int hasSSE; int hasSSE;
int hasSSE2; int hasSSE2;
int hasSSE3; int hasSSE3;
int hasSSSE3; int hasSSSE3;
int hasSSE4a; int hasSSE4a;
int isX86; int isX86;
unsigned cl_size; /* size of cache line */ unsigned cl_size; /* size of cache line */
int hasAltiVec; int hasAltiVec;
int hasTSC; int hasTSC;
} CpuCaps; } CpuCaps;
extern CpuCaps gCpuCaps; extern CpuCaps gCpuCaps;

524
cpuinfo.c
View File

@ -44,319 +44,319 @@ typedef long long int64_t;
#endif #endif
#define CPUID_FEATURE_DEF(bit, desc, description) \ #define CPUID_FEATURE_DEF(bit, desc, description) \
{ bit, desc } { bit, desc }
typedef struct cpuid_regs { typedef struct cpuid_regs {
unsigned int eax; unsigned int eax;
unsigned int ebx; unsigned int ebx;
unsigned int ecx; unsigned int ecx;
unsigned int edx; unsigned int edx;
} cpuid_regs_t; } cpuid_regs_t;
static cpuid_regs_t static cpuid_regs_t
cpuid(int func) { cpuid(int func) {
cpuid_regs_t regs; cpuid_regs_t regs;
#define CPUID ".byte 0x0f, 0xa2; " #define CPUID ".byte 0x0f, 0xa2; "
#ifdef __x86_64__ #ifdef __x86_64__
__asm__("mov %%rbx, %%rsi\n\t" __asm__("mov %%rbx, %%rsi\n\t"
#else #else
__asm__("mov %%ebx, %%esi\n\t" __asm__("mov %%ebx, %%esi\n\t"
#endif #endif
CPUID"\n\t" CPUID"\n\t"
#ifdef __x86_64__ #ifdef __x86_64__
"xchg %%rsi, %%rbx\n\t" "xchg %%rsi, %%rbx\n\t"
#else #else
"xchg %%esi, %%ebx\n\t" "xchg %%esi, %%ebx\n\t"
#endif #endif
: "=a" (regs.eax), "=S" (regs.ebx), "=c" (regs.ecx), "=d" (regs.edx) : "=a" (regs.eax), "=S" (regs.ebx), "=c" (regs.ecx), "=d" (regs.edx)
: "0" (func)); : "0" (func));
return regs; return regs;
} }
static int64_t static int64_t
rdtsc(void) rdtsc(void)
{ {
uint32_t hi, lo; uint32_t hi, lo;
#define RDTSC ".byte 0x0f, 0x31; " #define RDTSC ".byte 0x0f, 0x31; "
__asm__ volatile (RDTSC : "=a"(lo), "=d"(hi) : ); __asm__ volatile (RDTSC : "=a"(lo), "=d"(hi) : );
return (uint64_t) hi << 32 | lo; return (uint64_t) hi << 32 | lo;
} }
static const char* static const char*
brandname(int i) brandname(int i)
{ {
static const char* brandmap[] = { static const char* brandmap[] = {
NULL, NULL,
"Intel(R) Celeron(R) processor", "Intel(R) Celeron(R) processor",
"Intel(R) Pentium(R) III processor", "Intel(R) Pentium(R) III processor",
"Intel(R) Pentium(R) III Xeon(tm) processor", "Intel(R) Pentium(R) III Xeon(tm) processor",
"Intel(R) Pentium(R) III processor", "Intel(R) Pentium(R) III processor",
NULL, NULL,
"Mobile Intel(R) Pentium(R) III processor-M", "Mobile Intel(R) Pentium(R) III processor-M",
"Mobile Intel(R) Celeron(R) processor" "Mobile Intel(R) Celeron(R) processor"
}; };
if (i >= sizeof(brandmap)) if (i >= sizeof(brandmap))
return NULL; return NULL;
else else
return brandmap[i]; return brandmap[i];
} }
static void static void
store32(char *d, unsigned int v) store32(char *d, unsigned int v)
{ {
d[0] = v & 0xff; d[0] = v & 0xff;
d[1] = (v >> 8) & 0xff; d[1] = (v >> 8) & 0xff;
d[2] = (v >> 16) & 0xff; d[2] = (v >> 16) & 0xff;
d[3] = (v >> 24) & 0xff; d[3] = (v >> 24) & 0xff;
} }
int int
main(void) main(void)
{ {
cpuid_regs_t regs, regs_ext; cpuid_regs_t regs, regs_ext;
char idstr[13]; char idstr[13];
unsigned max_cpuid; unsigned max_cpuid;
unsigned max_ext_cpuid; unsigned max_ext_cpuid;
unsigned int amd_flags; unsigned int amd_flags;
unsigned int amd_flags2; unsigned int amd_flags2;
const char *model_name = NULL; const char *model_name = NULL;
int i; int i;
char processor_name[49]; char processor_name[49];
regs = cpuid(0); regs = cpuid(0);
max_cpuid = regs.eax; max_cpuid = regs.eax;
/* printf("%d CPUID function codes\n", max_cpuid+1); */ /* printf("%d CPUID function codes\n", max_cpuid+1); */
store32(idstr+0, regs.ebx); store32(idstr+0, regs.ebx);
store32(idstr+4, regs.edx); store32(idstr+4, regs.edx);
store32(idstr+8, regs.ecx); store32(idstr+8, regs.ecx);
idstr[12] = 0; idstr[12] = 0;
printf("vendor_id\t: %s\n", idstr); printf("vendor_id\t: %s\n", idstr);
regs_ext = cpuid((1<<31) + 0); regs_ext = cpuid((1<<31) + 0);
max_ext_cpuid = regs_ext.eax; max_ext_cpuid = regs_ext.eax;
if (max_ext_cpuid >= (1<<31) + 1) { if (max_ext_cpuid >= (1<<31) + 1) {
regs_ext = cpuid((1<<31) + 1); regs_ext = cpuid((1<<31) + 1);
amd_flags = regs_ext.edx; amd_flags = regs_ext.edx;
amd_flags2 = regs_ext.ecx; amd_flags2 = regs_ext.ecx;
if (max_ext_cpuid >= (1<<31) + 4) { if (max_ext_cpuid >= (1<<31) + 4) {
for (i = 2; i <= 4; i++) { for (i = 2; i <= 4; i++) {
regs_ext = cpuid((1<<31) + i); regs_ext = cpuid((1<<31) + i);
store32(processor_name + (i-2)*16, regs_ext.eax); store32(processor_name + (i-2)*16, regs_ext.eax);
store32(processor_name + (i-2)*16 + 4, regs_ext.ebx); store32(processor_name + (i-2)*16 + 4, regs_ext.ebx);
store32(processor_name + (i-2)*16 + 8, regs_ext.ecx); store32(processor_name + (i-2)*16 + 8, regs_ext.ecx);
store32(processor_name + (i-2)*16 + 12, regs_ext.edx); store32(processor_name + (i-2)*16 + 12, regs_ext.edx);
} }
processor_name[48] = 0; processor_name[48] = 0;
model_name = processor_name; model_name = processor_name;
while (*model_name == ' ') { while (*model_name == ' ') {
model_name++; model_name++;
} }
} }
} else { } else {
amd_flags = 0; amd_flags = 0;
amd_flags2 = 0; amd_flags2 = 0;
}
if (max_cpuid >= 1) {
static struct {
int bit;
char *desc;
} cap[] = {
CPUID_FEATURE_DEF(0, "fpu", "Floating-point unit on-chip"),
CPUID_FEATURE_DEF(1, "vme", "Virtual Mode Enhancements"),
CPUID_FEATURE_DEF(2, "de", "Debugging Extension"),
CPUID_FEATURE_DEF(3, "pse", "Page Size Extension"),
CPUID_FEATURE_DEF(4, "tsc", "Time Stamp Counter"),
CPUID_FEATURE_DEF(5, "msr", "Pentium Processor MSR"),
CPUID_FEATURE_DEF(6, "pae", "Physical Address Extension"),
CPUID_FEATURE_DEF(7, "mce", "Machine Check Exception"),
CPUID_FEATURE_DEF(8, "cx8", "CMPXCHG8B Instruction Supported"),
CPUID_FEATURE_DEF(9, "apic", "On-chip APIC Hardware Enabled"),
CPUID_FEATURE_DEF(11, "sep", "SYSENTER and SYSEXIT"),
CPUID_FEATURE_DEF(12, "mtrr", "Memory Type Range Registers"),
CPUID_FEATURE_DEF(13, "pge", "PTE Global Bit"),
CPUID_FEATURE_DEF(14, "mca", "Machine Check Architecture"),
CPUID_FEATURE_DEF(15, "cmov", "Conditional Move/Compare Instruction"),
CPUID_FEATURE_DEF(16, "pat", "Page Attribute Table"),
CPUID_FEATURE_DEF(17, "pse36", "Page Size Extension 36-bit"),
CPUID_FEATURE_DEF(18, "pn", "Processor Serial Number"),
CPUID_FEATURE_DEF(19, "clflush", "CFLUSH instruction"),
CPUID_FEATURE_DEF(21, "dts", "Debug Store"),
CPUID_FEATURE_DEF(22, "acpi", "Thermal Monitor and Clock Ctrl"),
CPUID_FEATURE_DEF(23, "mmx", "MMX Technology"),
CPUID_FEATURE_DEF(24, "fxsr", "FXSAVE/FXRSTOR"),
CPUID_FEATURE_DEF(25, "sse", "SSE Extensions"),
CPUID_FEATURE_DEF(26, "sse2", "SSE2 Extensions"),
CPUID_FEATURE_DEF(27, "ss", "Self Snoop"),
CPUID_FEATURE_DEF(28, "ht", "Multi-threading"),
CPUID_FEATURE_DEF(29, "tm", "Therm. Monitor"),
CPUID_FEATURE_DEF(30, "ia64", "IA-64 Processor"),
CPUID_FEATURE_DEF(31, "pbe", "Pend. Brk. EN."),
{ -1 }
};
static struct {
int bit;
char *desc;
} cap2[] = {
CPUID_FEATURE_DEF(0, "pni", "SSE3 Extensions"),
CPUID_FEATURE_DEF(1, "pclmulqdq", "Carryless Multiplication"),
CPUID_FEATURE_DEF(2, "dtes64", "64-bit Debug Store"),
CPUID_FEATURE_DEF(3, "monitor", "MONITOR/MWAIT"),
CPUID_FEATURE_DEF(4, "ds_cpl", "CPL Qualified Debug Store"),
CPUID_FEATURE_DEF(5, "vmx", "Virtual Machine Extensions"),
CPUID_FEATURE_DEF(6, "smx", "Safer Mode Extensions"),
CPUID_FEATURE_DEF(7, "est", "Enhanced Intel SpeedStep Technology"),
CPUID_FEATURE_DEF(8, "tm2", "Thermal Monitor 2"),
CPUID_FEATURE_DEF(9, "ssse3", "Supplemental SSE3"),
CPUID_FEATURE_DEF(10, "cid", "L1 Context ID"),
CPUID_FEATURE_DEF(12, "fma", "Fused Multiply Add"),
CPUID_FEATURE_DEF(13, "cx16", "CMPXCHG16B Available"),
CPUID_FEATURE_DEF(14, "xtpr", "xTPR Disable"),
CPUID_FEATURE_DEF(15, "pdcm", "Perf/Debug Capability MSR"),
CPUID_FEATURE_DEF(18, "dca", "Direct Cache Access"),
CPUID_FEATURE_DEF(19, "sse4_1", "SSE4.1 Extensions"),
CPUID_FEATURE_DEF(20, "sse4_2", "SSE4.2 Extensions"),
CPUID_FEATURE_DEF(21, "x2apic", "x2APIC Feature"),
CPUID_FEATURE_DEF(22, "movbe", "MOVBE Instruction"),
CPUID_FEATURE_DEF(23, "popcnt", "Pop Count Instruction"),
CPUID_FEATURE_DEF(25, "aes", "AES Instruction"),
CPUID_FEATURE_DEF(26, "xsave", "XSAVE/XRSTOR Extensions"),
CPUID_FEATURE_DEF(27, "osxsave", "XSAVE/XRSTOR Enabled in the OS"),
CPUID_FEATURE_DEF(28, "avx", "Advanced Vector Extension"),
{ -1 }
};
static struct {
int bit;
char *desc;
} cap_amd[] = {
CPUID_FEATURE_DEF(11, "syscall", "SYSCALL and SYSRET"),
CPUID_FEATURE_DEF(19, "mp", "MP Capable"),
CPUID_FEATURE_DEF(20, "nx", "No-Execute Page Protection"),
CPUID_FEATURE_DEF(22, "mmxext", "MMX Technology (AMD Extensions)"),
CPUID_FEATURE_DEF(25, "fxsr_opt", "Fast FXSAVE/FXRSTOR"),
CPUID_FEATURE_DEF(26, "pdpe1gb", "PDP Entry for 1GiB Page"),
CPUID_FEATURE_DEF(27, "rdtscp", "RDTSCP Instruction"),
CPUID_FEATURE_DEF(29, "lm", "Long Mode Capable"),
CPUID_FEATURE_DEF(30, "3dnowext", "3DNow! Extensions"),
CPUID_FEATURE_DEF(31, "3dnow", "3DNow!"),
{ -1 }
};
static struct {
int bit;
char *desc;
} cap_amd2[] = {
CPUID_FEATURE_DEF(0, "lahf_lm", "LAHF/SAHF Supported in 64-bit Mode"),
CPUID_FEATURE_DEF(1, "cmp_legacy", "Chip Multi-Core"),
CPUID_FEATURE_DEF(2, "svm", "Secure Virtual Machine"),
CPUID_FEATURE_DEF(3, "extapic", "Extended APIC Space"),
CPUID_FEATURE_DEF(4, "cr8_legacy", "CR8 Available in Legacy Mode"),
CPUID_FEATURE_DEF(5, "abm", "Advanced Bit Manipulation"),
CPUID_FEATURE_DEF(6, "sse4a", "SSE4A Extensions"),
CPUID_FEATURE_DEF(7, "misalignsse", "Misaligned SSE Mode"),
CPUID_FEATURE_DEF(8, "3dnowprefetch", "3DNow! Prefetch/PrefetchW"),
CPUID_FEATURE_DEF(9, "osvw", "OS Visible Workaround"),
CPUID_FEATURE_DEF(10, "ibs", "Instruction Based Sampling"),
CPUID_FEATURE_DEF(11, "sse5", "SSE5 Extensions"),
CPUID_FEATURE_DEF(12, "skinit", "SKINIT, STGI, and DEV Support"),
CPUID_FEATURE_DEF(13, "wdt", "Watchdog Timer Support"),
{ -1 }
};
unsigned int family, model, stepping;
regs = cpuid(1);
family = (regs.eax >> 8) & 0xf;
model = (regs.eax >> 4) & 0xf;
stepping = regs.eax & 0xf;
if (family == 0xf)
family += (regs.eax >> 20) & 0xff;
if (family == 0xf || family == 6)
model += ((regs.eax >> 16) & 0xf) << 4;
printf("cpu family\t: %d\n"
"model\t\t: %d\n"
"stepping\t: %d\n" ,
family,
model,
stepping);
if (strstr(idstr, "Intel") && !model_name) {
if (family == 6 && model == 0xb && stepping == 1)
model_name = "Intel (R) Celeron (R) processor";
else
model_name = brandname(regs.ebx & 0xf);
} }
printf("flags\t\t:"); if (max_cpuid >= 1) {
for (i = 0; cap[i].bit >= 0; i++) { static struct {
if (regs.edx & (1 << cap[i].bit)) { int bit;
printf(" %s", cap[i].desc); char *desc;
} } cap[] = {
} CPUID_FEATURE_DEF(0, "fpu", "Floating-point unit on-chip"),
for (i = 0; cap2[i].bit >= 0; i++) { CPUID_FEATURE_DEF(1, "vme", "Virtual Mode Enhancements"),
if (regs.ecx & (1 << cap2[i].bit)) { CPUID_FEATURE_DEF(2, "de", "Debugging Extension"),
printf(" %s", cap2[i].desc); CPUID_FEATURE_DEF(3, "pse", "Page Size Extension"),
} CPUID_FEATURE_DEF(4, "tsc", "Time Stamp Counter"),
} CPUID_FEATURE_DEF(5, "msr", "Pentium Processor MSR"),
/* k6_mtrr is supported by some AMD K6-2/K6-III CPUs but CPUID_FEATURE_DEF(6, "pae", "Physical Address Extension"),
it is not indicated by a CPUID feature bit, so we CPUID_FEATURE_DEF(7, "mce", "Machine Check Exception"),
have to check the family, model and stepping instead. */ CPUID_FEATURE_DEF(8, "cx8", "CMPXCHG8B Instruction Supported"),
if (strstr(idstr, "AMD") && CPUID_FEATURE_DEF(9, "apic", "On-chip APIC Hardware Enabled"),
family == 5 && CPUID_FEATURE_DEF(11, "sep", "SYSENTER and SYSEXIT"),
(model >= 9 || (model == 8 && stepping >= 8))) CPUID_FEATURE_DEF(12, "mtrr", "Memory Type Range Registers"),
printf(" %s", "k6_mtrr"); CPUID_FEATURE_DEF(13, "pge", "PTE Global Bit"),
/* similar for cyrix_arr. */ CPUID_FEATURE_DEF(14, "mca", "Machine Check Architecture"),
if (strstr(idstr, "Cyrix") && CPUID_FEATURE_DEF(15, "cmov", "Conditional Move/Compare Instruction"),
(family == 5 && (model < 4 || family == 6))) CPUID_FEATURE_DEF(16, "pat", "Page Attribute Table"),
printf(" %s", "cyrix_arr"); CPUID_FEATURE_DEF(17, "pse36", "Page Size Extension 36-bit"),
/* as well as centaur_mcr. */ CPUID_FEATURE_DEF(18, "pn", "Processor Serial Number"),
if (strstr(idstr, "Centaur") && CPUID_FEATURE_DEF(19, "clflush", "CFLUSH instruction"),
family == 5) CPUID_FEATURE_DEF(21, "dts", "Debug Store"),
printf(" %s", "centaur_mcr"); CPUID_FEATURE_DEF(22, "acpi", "Thermal Monitor and Clock Ctrl"),
CPUID_FEATURE_DEF(23, "mmx", "MMX Technology"),
CPUID_FEATURE_DEF(24, "fxsr", "FXSAVE/FXRSTOR"),
CPUID_FEATURE_DEF(25, "sse", "SSE Extensions"),
CPUID_FEATURE_DEF(26, "sse2", "SSE2 Extensions"),
CPUID_FEATURE_DEF(27, "ss", "Self Snoop"),
CPUID_FEATURE_DEF(28, "ht", "Multi-threading"),
CPUID_FEATURE_DEF(29, "tm", "Therm. Monitor"),
CPUID_FEATURE_DEF(30, "ia64", "IA-64 Processor"),
CPUID_FEATURE_DEF(31, "pbe", "Pend. Brk. EN."),
{ -1 }
};
static struct {
int bit;
char *desc;
} cap2[] = {
CPUID_FEATURE_DEF(0, "pni", "SSE3 Extensions"),
CPUID_FEATURE_DEF(1, "pclmulqdq", "Carryless Multiplication"),
CPUID_FEATURE_DEF(2, "dtes64", "64-bit Debug Store"),
CPUID_FEATURE_DEF(3, "monitor", "MONITOR/MWAIT"),
CPUID_FEATURE_DEF(4, "ds_cpl", "CPL Qualified Debug Store"),
CPUID_FEATURE_DEF(5, "vmx", "Virtual Machine Extensions"),
CPUID_FEATURE_DEF(6, "smx", "Safer Mode Extensions"),
CPUID_FEATURE_DEF(7, "est", "Enhanced Intel SpeedStep Technology"),
CPUID_FEATURE_DEF(8, "tm2", "Thermal Monitor 2"),
CPUID_FEATURE_DEF(9, "ssse3", "Supplemental SSE3"),
CPUID_FEATURE_DEF(10, "cid", "L1 Context ID"),
CPUID_FEATURE_DEF(12, "fma", "Fused Multiply Add"),
CPUID_FEATURE_DEF(13, "cx16", "CMPXCHG16B Available"),
CPUID_FEATURE_DEF(14, "xtpr", "xTPR Disable"),
CPUID_FEATURE_DEF(15, "pdcm", "Perf/Debug Capability MSR"),
CPUID_FEATURE_DEF(18, "dca", "Direct Cache Access"),
CPUID_FEATURE_DEF(19, "sse4_1", "SSE4.1 Extensions"),
CPUID_FEATURE_DEF(20, "sse4_2", "SSE4.2 Extensions"),
CPUID_FEATURE_DEF(21, "x2apic", "x2APIC Feature"),
CPUID_FEATURE_DEF(22, "movbe", "MOVBE Instruction"),
CPUID_FEATURE_DEF(23, "popcnt", "Pop Count Instruction"),
CPUID_FEATURE_DEF(25, "aes", "AES Instruction"),
CPUID_FEATURE_DEF(26, "xsave", "XSAVE/XRSTOR Extensions"),
CPUID_FEATURE_DEF(27, "osxsave", "XSAVE/XRSTOR Enabled in the OS"),
CPUID_FEATURE_DEF(28, "avx", "Advanced Vector Extension"),
{ -1 }
};
static struct {
int bit;
char *desc;
} cap_amd[] = {
CPUID_FEATURE_DEF(11, "syscall", "SYSCALL and SYSRET"),
CPUID_FEATURE_DEF(19, "mp", "MP Capable"),
CPUID_FEATURE_DEF(20, "nx", "No-Execute Page Protection"),
CPUID_FEATURE_DEF(22, "mmxext", "MMX Technology (AMD Extensions)"),
CPUID_FEATURE_DEF(25, "fxsr_opt", "Fast FXSAVE/FXRSTOR"),
CPUID_FEATURE_DEF(26, "pdpe1gb", "PDP Entry for 1GiB Page"),
CPUID_FEATURE_DEF(27, "rdtscp", "RDTSCP Instruction"),
CPUID_FEATURE_DEF(29, "lm", "Long Mode Capable"),
CPUID_FEATURE_DEF(30, "3dnowext", "3DNow! Extensions"),
CPUID_FEATURE_DEF(31, "3dnow", "3DNow!"),
{ -1 }
};
static struct {
int bit;
char *desc;
} cap_amd2[] = {
CPUID_FEATURE_DEF(0, "lahf_lm", "LAHF/SAHF Supported in 64-bit Mode"),
CPUID_FEATURE_DEF(1, "cmp_legacy", "Chip Multi-Core"),
CPUID_FEATURE_DEF(2, "svm", "Secure Virtual Machine"),
CPUID_FEATURE_DEF(3, "extapic", "Extended APIC Space"),
CPUID_FEATURE_DEF(4, "cr8_legacy", "CR8 Available in Legacy Mode"),
CPUID_FEATURE_DEF(5, "abm", "Advanced Bit Manipulation"),
CPUID_FEATURE_DEF(6, "sse4a", "SSE4A Extensions"),
CPUID_FEATURE_DEF(7, "misalignsse", "Misaligned SSE Mode"),
CPUID_FEATURE_DEF(8, "3dnowprefetch", "3DNow! Prefetch/PrefetchW"),
CPUID_FEATURE_DEF(9, "osvw", "OS Visible Workaround"),
CPUID_FEATURE_DEF(10, "ibs", "Instruction Based Sampling"),
CPUID_FEATURE_DEF(11, "sse5", "SSE5 Extensions"),
CPUID_FEATURE_DEF(12, "skinit", "SKINIT, STGI, and DEV Support"),
CPUID_FEATURE_DEF(13, "wdt", "Watchdog Timer Support"),
{ -1 }
};
unsigned int family, model, stepping;
for (i = 0; cap_amd[i].bit >= 0; i++) { regs = cpuid(1);
if (amd_flags & (1 << cap_amd[i].bit)) { family = (regs.eax >> 8) & 0xf;
printf(" %s", cap_amd[i].desc); model = (regs.eax >> 4) & 0xf;
} stepping = regs.eax & 0xf;
}
for (i = 0; cap_amd2[i].bit >= 0; i++) {
if (amd_flags2 & (1 << cap_amd2[i].bit)) {
printf(" %s", cap_amd2[i].desc);
}
}
printf("\n");
if (regs.edx & (1 << 4)) { if (family == 0xf)
int64_t tsc_start, tsc_end; family += (regs.eax >> 20) & 0xff;
struct timeval tv_start, tv_end; if (family == 0xf || family == 6)
int usec_delay; model += ((regs.eax >> 16) & 0xf) << 4;
tsc_start = rdtsc(); printf("cpu family\t: %d\n"
gettimeofday(&tv_start, NULL); "model\t\t: %d\n"
"stepping\t: %d\n" ,
family,
model,
stepping);
if (strstr(idstr, "Intel") && !model_name) {
if (family == 6 && model == 0xb && stepping == 1)
model_name = "Intel (R) Celeron (R) processor";
else
model_name = brandname(regs.ebx & 0xf);
}
printf("flags\t\t:");
for (i = 0; cap[i].bit >= 0; i++) {
if (regs.edx & (1 << cap[i].bit)) {
printf(" %s", cap[i].desc);
}
}
for (i = 0; cap2[i].bit >= 0; i++) {
if (regs.ecx & (1 << cap2[i].bit)) {
printf(" %s", cap2[i].desc);
}
}
/* k6_mtrr is supported by some AMD K6-2/K6-III CPUs but
it is not indicated by a CPUID feature bit, so we
have to check the family, model and stepping instead. */
if (strstr(idstr, "AMD") &&
family == 5 &&
(model >= 9 || (model == 8 && stepping >= 8)))
printf(" %s", "k6_mtrr");
/* similar for cyrix_arr. */
if (strstr(idstr, "Cyrix") &&
(family == 5 && (model < 4 || family == 6)))
printf(" %s", "cyrix_arr");
/* as well as centaur_mcr. */
if (strstr(idstr, "Centaur") &&
family == 5)
printf(" %s", "centaur_mcr");
for (i = 0; cap_amd[i].bit >= 0; i++) {
if (amd_flags & (1 << cap_amd[i].bit)) {
printf(" %s", cap_amd[i].desc);
}
}
for (i = 0; cap_amd2[i].bit >= 0; i++) {
if (amd_flags2 & (1 << cap_amd2[i].bit)) {
printf(" %s", cap_amd2[i].desc);
}
}
printf("\n");
if (regs.edx & (1 << 4)) {
int64_t tsc_start, tsc_end;
struct timeval tv_start, tv_end;
int usec_delay;
tsc_start = rdtsc();
gettimeofday(&tv_start, NULL);
#ifdef MISSING_USLEEP #ifdef MISSING_USLEEP
sleep(1); sleep(1);
#else #else
usleep(100000); usleep(100000);
#endif #endif
tsc_end = rdtsc(); tsc_end = rdtsc();
gettimeofday(&tv_end, NULL); gettimeofday(&tv_end, NULL);
usec_delay = 1000000 * (tv_end.tv_sec - tv_start.tv_sec) usec_delay = 1000000 * (tv_end.tv_sec - tv_start.tv_sec)
+ (tv_end.tv_usec - tv_start.tv_usec); + (tv_end.tv_usec - tv_start.tv_usec);
printf("cpu MHz\t\t: %.3f\n", printf("cpu MHz\t\t: %.3f\n",
(double)(tsc_end-tsc_start) / usec_delay); (double)(tsc_end-tsc_start) / usec_delay);
}
} }
}
printf("model name\t: "); printf("model name\t: ");
if (model_name) if (model_name)
printf("%s\n", model_name); printf("%s\n", model_name);
else else
printf("Unknown %s CPU\n", idstr); printf("Unknown %s CPU\n", idstr);
} }

12
edl.h
View File

@ -28,12 +28,12 @@
#define EDL_MUTE_END 0 #define EDL_MUTE_END 0
struct edl_record { struct edl_record {
float start_sec; float start_sec;
float stop_sec; float stop_sec;
float length_sec; float length_sec;
short action; short action;
struct edl_record* next; struct edl_record* next;
struct edl_record* prev; struct edl_record* prev;
}; };
typedef struct edl_record* edl_record_ptr; typedef struct edl_record* edl_record_ptr;