annotate parser-mecmd.c @ 10252:d275152390ee

I've found some time to implement the encoding support for the new DivX API. Now it's possible to play and encode movies with the latest DivX release. One thing that doesn't work is the new Video Buffer Verifier (VBV) multipass encoding. The encoder segfaults. Maybe it just isn't supported with the standard profile of the released binary encoder. Andreas Hess <jaska@gmx.net>
author arpi
date Fri, 06 Jun 2003 19:57:37 +0000
parents 4c34dc17e43d
children 57bdcdb061d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
2 #include "config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
3
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
4 #ifdef NEW_CONFIG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
5
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
6 #include <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
7 #include <stdlib.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
8 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
9 #include <errno.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
10
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 #include <assert.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
14
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
15 #include "mp_msg.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
17 #include "m_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
18 #include "parser-mecmd.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
19
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
20
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
21 void
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22 m_entry_list_free(m_entry_t* lst) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
23 int i,j;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
24
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
25 for(i = 0 ; lst[i].name != NULL ; i++){
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
26 free(lst[i].name);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
27 for(j = 0 ; lst[i].opts[2*j] != NULL ; j++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
28 free(lst[i].opts[2*j]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
29 free(lst[i].opts[2*j+1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
30 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
31 free(lst[i].opts);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
32 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
33 free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
34 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
35
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36 int
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37 m_entry_set_options(m_config_t *config, m_entry_t* entry) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
38 int i,r;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
39
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
40 for(i = 0 ; entry->opts[2*i] != NULL ; i++){
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41 r = m_config_set_option(config,entry->opts[2*i],entry->opts[2*i+1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42 if(r < 0)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
44 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
45 return 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
47
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
48
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
50
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
51 m_entry_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
52 m_config_parse_me_command_line(m_config_t *config, int argc, char **argv)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
53 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54 int i,nf = 0,no = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55 int tmp;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
56 char *opt;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
57 int no_more_opts = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
58 m_entry_t *lst = NULL, *entry = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
59
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
60 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
61 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
62 assert(argv != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
63 assert(argc >= 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
64 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
65
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
66 config->mode = M_COMMAND_LINE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
67
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
68 lst = calloc(1,sizeof(m_entry_t));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
69
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
70 for (i = 1; i < argc; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
71 //next:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
72 opt = argv[i];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
73 /* check for -- (no more options id.) except --help! */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
74 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) != 'h'))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
75 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
76 no_more_opts = 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
77 if (i+1 >= argc)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
78 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
79 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "You added '--' but no filenames presented!\n");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
80 goto err_out;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
81 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
82 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
83 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
84
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 m_option_t* mp_opt = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
88 /* remove trailing '-' */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
89 opt++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
90 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "this_opt = option: %s\n", opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
91 mp_opt = m_config_get_option(config,opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 if(!mp_opt) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 tmp = M_OPT_UNKNOW;
9096
a5eb26ca31d0 fix a typo
colin
parents: 8893
diff changeset
94 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "%s is not an MEncoder option\n",opt);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
95 goto err_out;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
96 }
8893
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
97 if(!entry || (mp_opt->flags & M_OPT_GLOBAL)){
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
98 tmp = m_config_set_option(config, opt, argv[i + 1]);
8893
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
99 if(tmp < 0){
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
100 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp);
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
101 goto err_out;
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
102 }
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
103 } else {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 tmp = m_config_check_option(config, opt, argv[i + 1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105 if(tmp >= 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
106 entry->opts = realloc(entry->opts,(no+2)*2*sizeof(char*));
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
107 entry->opts[2*no] = strdup(opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
108 entry->opts[2*no+1] = argv[i + 1] ? strdup(argv[i + 1]) : NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 entry->opts[2*no+2] = entry->opts[2*no+3] = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110 no++;
8893
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
111 } else {
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
112 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp);
9792
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
113 if(tmp == M_OPT_EXIT)
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
114 exit(0);
8893
268b3fbc35b7 cosmetics
arpi
parents: 8164
diff changeset
115 goto err_out;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118 i += tmp;
9747
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
119 } else {/* filename */
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
120 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Adding file %s\n",argv[i]);
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
121 lst = realloc(lst,(nf+2)*sizeof(m_entry_t));
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
122 lst[nf].name = strdup(argv[i]);
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
123 lst[nf].opts = calloc(2,sizeof(char*));
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
124 entry = &lst[nf];
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
125 no = 0;
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
126 memset(&lst[nf+1],0,sizeof(m_entry_t));
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
127 nf++;
264cb5f03131 Remove the hack used to pass -dvd, etc into the playlist
albeu
parents: 9096
diff changeset
128 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131 if(nf == 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
132 m_entry_list_free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "No file given\n");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136 return lst;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138 err_out:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 m_entry_list_free(lst);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 #endif