~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/cmdutils.c

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc
  • Date: 2008-12-26 00:10:06 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20081226001006-wd8cuqn8d81smkdp
Tags: upstream-1.1.7
ImportĀ upstreamĀ versionĀ 1.1.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 * License along with FFmpeg; if not, write to the Free Software
19
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
20
 */
21
 
#define HAVE_AV_CONFIG_H
 
21
 
 
22
#include <string.h>
 
23
#include <stdlib.h>
 
24
#include <errno.h>
 
25
#include <math.h>
 
26
 
 
27
#include "config.h"
22
28
#include "avformat.h"
23
 
#include "common.h"
24
 
 
 
29
#include "avfilter.h"
 
30
#include "avdevice.h"
25
31
#include "cmdutils.h"
 
32
#include "avstring.h"
 
33
#include "version.h"
 
34
#include "network.h"
 
35
 
 
36
#undef exit
 
37
 
 
38
 
 
39
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max)
 
40
{
 
41
    char *tail;
 
42
    const char *error;
 
43
    double d = strtod(numstr, &tail);
 
44
    if (*tail)
 
45
        error= "Expected number for %s but found: %s\n";
 
46
    else if (d < min || d > max)
 
47
        error= "The value for %s was %s which is not within %f - %f\n";
 
48
    else if(type == OPT_INT64 && (int64_t)d != d)
 
49
        error= "Expected int64 for %s but found %s\n";
 
50
    else
 
51
        return d;
 
52
    fprintf(stderr, error, context, numstr, min, max);
 
53
    exit(1);
 
54
}
 
55
 
 
56
int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration)
 
57
{
 
58
    int64_t us = parse_date(timestr, is_duration);
 
59
    if (us == INT64_MIN) {
 
60
        fprintf(stderr, "Invalid %s specification for %s: %s\n",
 
61
                is_duration ? "duration" : "date", context, timestr);
 
62
        exit(1);
 
63
    }
 
64
    return us;
 
65
}
26
66
 
27
67
void show_help_options(const OptionDef *options, const char *msg, int mask, int value)
28
68
{
37
77
                printf("%s", msg);
38
78
                first = 0;
39
79
            }
40
 
            pstrcpy(buf, sizeof(buf), po->name);
 
80
            av_strlcpy(buf, po->name, sizeof(buf));
41
81
            if (po->flags & HAS_ARG) {
42
 
                pstrcat(buf, sizeof(buf), " ");
43
 
                pstrcat(buf, sizeof(buf), po->argname);
 
82
                av_strlcat(buf, " ", sizeof(buf));
 
83
                av_strlcat(buf, po->argname, sizeof(buf));
44
84
            }
45
85
            printf("-%-17s  %s\n", buf, po->help);
46
86
        }
56
96
    return po;
57
97
}
58
98
 
59
 
void parse_options(int argc, char **argv, const OptionDef *options)
 
99
void parse_options(int argc, char **argv, const OptionDef *options,
 
100
                   void (* parse_arg_function)(const char*))
60
101
{
61
102
    const char *opt, *arg;
62
103
    int optindex, handleoptions=1;
95
136
            } else if (po->flags & OPT_BOOL) {
96
137
                *po->u.int_arg = 1;
97
138
            } else if (po->flags & OPT_INT) {
98
 
                *po->u.int_arg = atoi(arg);
 
139
                *po->u.int_arg = parse_number_or_die(opt+1, arg, OPT_INT64, INT_MIN, INT_MAX);
 
140
            } else if (po->flags & OPT_INT64) {
 
141
                *po->u.int64_arg = parse_number_or_die(opt+1, arg, OPT_INT64, INT64_MIN, INT64_MAX);
99
142
            } else if (po->flags & OPT_FLOAT) {
100
 
                *po->u.float_arg = atof(arg);
 
143
                *po->u.float_arg = parse_number_or_die(opt+1, arg, OPT_FLOAT, -1.0/0.0, 1.0/0.0);
101
144
            } else if (po->flags & OPT_FUNC2) {
102
145
                if(po->u.func2_arg(opt+1, arg)<0)
103
146
                    goto unknown_opt;
105
148
                po->u.func_arg(arg);
106
149
            }
107
150
        } else {
108
 
            parse_arg_file(opt);
 
151
            if (parse_arg_function)
 
152
                parse_arg_function(opt);
109
153
        }
110
154
    }
111
155
}
126
170
    case AVERROR_NOFMT:
127
171
        fprintf(stderr, "%s: Unknown format\n", filename);
128
172
        break;
129
 
    case AVERROR_IO:
130
 
        fprintf(stderr, "%s: I/O error occured\n"
 
173
    case AVERROR(EIO):
 
174
        fprintf(stderr, "%s: I/O error occurred\n"
131
175
                "Usually that means that input file is truncated and/or corrupted.\n",
132
176
                filename);
133
177
        break;
134
 
    case AVERROR_NOMEM:
135
 
        fprintf(stderr, "%s: memory allocation error occured\n", filename);
 
178
    case AVERROR(ENOMEM):
 
179
        fprintf(stderr, "%s: memory allocation error occurred\n", filename);
 
180
        break;
 
181
    case AVERROR(ENOENT):
 
182
        fprintf(stderr, "%s: no such file or directory\n", filename);
 
183
        break;
 
184
    case AVERROR(FF_NETERROR(EPROTONOSUPPORT)):
 
185
        fprintf(stderr, "%s: Unsupported network protocol\n", filename);
136
186
        break;
137
187
    default:
138
188
        fprintf(stderr, "%s: Error while opening file\n", filename);
139
189
        break;
140
190
    }
141
191
}
 
192
 
 
193
void show_banner(const char *program_name, int program_birth_year)
 
194
{
 
195
    fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-2008 Fabrice Bellard, et al.\n",
 
196
            program_name, program_birth_year);
 
197
    fprintf(stderr, "  configuration: " FFMPEG_CONFIGURATION "\n");
 
198
    fprintf(stderr, "  libavutil version: " AV_STRINGIFY(LIBAVUTIL_VERSION) "\n");
 
199
    fprintf(stderr, "  libavcodec version: " AV_STRINGIFY(LIBAVCODEC_VERSION) "\n");
 
200
    fprintf(stderr, "  libavformat version: " AV_STRINGIFY(LIBAVFORMAT_VERSION) "\n");
 
201
    fprintf(stderr, "  libavdevice version: " AV_STRINGIFY(LIBAVDEVICE_VERSION) "\n");
 
202
#if ENABLE_AVFILTER
 
203
    fprintf(stderr, "  libavfilter version: " AV_STRINGIFY(LIBAVFILTER_VERSION) "\n");
 
204
#endif
 
205
    fprintf(stderr, "  built on " __DATE__ " " __TIME__);
 
206
#ifdef __GNUC__
 
207
    fprintf(stderr, ", gcc: " __VERSION__ "\n");
 
208
#else
 
209
    fprintf(stderr, ", using a non-gcc compiler\n");
 
210
#endif
 
211
}
 
212
 
 
213
void show_version(const char *program_name) {
 
214
     /* TODO: add function interface to avutil and avformat avdevice*/
 
215
    printf("%s " FFMPEG_VERSION "\n", program_name);
 
216
    printf("libavutil   %d\n"
 
217
           "libavcodec  %d\n"
 
218
           "libavformat %d\n"
 
219
           "libavdevice %d\n",
 
220
           LIBAVUTIL_BUILD, avcodec_build(), LIBAVFORMAT_BUILD, LIBAVDEVICE_BUILD);
 
221
}
 
222
 
 
223
void show_license(void)
 
224
{
 
225
#ifdef CONFIG_NONFREE
 
226
    printf(
 
227
    "This version of FFmpeg has nonfree parts compiled in.\n"
 
228
    "Therefore it is not legally redistributable.\n"
 
229
    );
 
230
#elif CONFIG_GPL
 
231
    printf(
 
232
    "FFmpeg is free software; you can redistribute it and/or modify\n"
 
233
    "it under the terms of the GNU General Public License as published by\n"
 
234
    "the Free Software Foundation; either version 2 of the License, or\n"
 
235
    "(at your option) any later version.\n"
 
236
    "\n"
 
237
    "FFmpeg is distributed in the hope that it will be useful,\n"
 
238
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
 
239
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
 
240
    "GNU General Public License for more details.\n"
 
241
    "\n"
 
242
    "You should have received a copy of the GNU General Public License\n"
 
243
    "along with FFmpeg; if not, write to the Free Software\n"
 
244
    "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
 
245
    );
 
246
#else
 
247
    printf(
 
248
    "FFmpeg is free software; you can redistribute it and/or\n"
 
249
    "modify it under the terms of the GNU Lesser General Public\n"
 
250
    "License as published by the Free Software Foundation; either\n"
 
251
    "version 2.1 of the License, or (at your option) any later version.\n"
 
252
    "\n"
 
253
    "FFmpeg is distributed in the hope that it will be useful,\n"
 
254
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
 
255
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
 
256
    "Lesser General Public License for more details.\n"
 
257
    "\n"
 
258
    "You should have received a copy of the GNU Lesser General Public\n"
 
259
    "License along with FFmpeg; if not, write to the Free Software\n"
 
260
    "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
 
261
    );
 
262
#endif
 
263
}