Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 305 lines (264 sloc) 9.31 kb
01789be Add missing license headers.
diego authored
1 /*
2 * Various utilities for command line tools
3 * copyright (c) 2003 Fabrice Bellard
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
26ed136 Add FFMPEG_ prefix to all multiple inclusion guards.
diego authored
22 #ifndef FFMPEG_CMDUTILS_H
23 #define FFMPEG_CMDUTILS_H
c6141f3 added ffplay utility
bellard authored
24
ccf1f61 Add missing #includes to fix 'make checkheaders'.
diego authored
25 #include <inttypes.h>
2ebb39f Fix 'make checkheaders', based on a patch by Diego Pettenò, flameeyes gm...
diego authored
26 #include "libavcodec/avcodec.h"
27 #include "libavformat/avformat.h"
28 #include "libswscale/swscale.h"
ccf1f61 Add missing #includes to fix 'make checkheaders'.
diego authored
29
0e1a1de Export and document in cmdutils.h the function parse_number_or_die().
benoit authored
30 /**
99bc41e Do not pass program_name as argument to show_version(), this allows some
michael authored
31 * program name, defined by the program for show_version().
32 */
33 extern const char program_name[];
34
35 /**
d79977a Simplify show_banner() so that it does not require arguments, similar
diego authored
36 * program birth year, defined by the program for show_banner()
37 */
38 extern const int program_birth_year;
39
8791f32 Implement a var for containing the current year number rather than
stefano authored
40 extern const int this_year;
41
55b5d41 Move opt_default() and set_context_opts() to cmdutils so it can be used ...
michael authored
42 extern const char **opt_names;
ae0b14d Define AVMediaType enum, and use it instead of enum CodecType, which
stefano authored
43 extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
55b5d41 Move opt_default() and set_context_opts() to cmdutils so it can be used ...
michael authored
44 extern AVFormatContext *avformat_opts;
45 extern struct SwsContext *sws_opts;
46
47 /**
9f43969 Add init and uninit functions to cmdutils, reduces code duplication
reimar authored
48 * Initialize the cmdutils option system, in particular
49 * allocate the *_opts contexts.
50 */
51 void init_opts(void);
52 /**
53 * Uninitialize the cmdutils option system, in particular
54 * free the *_opts contexts and their contents.
55 */
56 void uninit_opts(void);
57
58 /**
35ce15b Move log_callback_help to cmdutils.[hc], for allowing sharing.
stefano authored
59 * Trivial log callback.
60 * Only suitable for show_help and similar since it lacks prefix handling.
61 */
62 void log_callback_help(void* ptr, int level, const char* fmt, va_list vl);
63
64 /**
1578bba Fix typo: explixitly -> explicitly.
stefano authored
65 * Fallback for options that are not explicitly handled, these will be
55b5d41 Move opt_default() and set_context_opts() to cmdutils so it can be used ...
michael authored
66 * parsed through AVOptions.
67 */
68 int opt_default(const char *opt, const char *arg);
69
d79977a Simplify show_banner() so that it does not require arguments, similar
diego authored
70 /**
e337c71 Fix grammar errors in documentation
mru authored
71 * Set the libav* libraries log level.
10703c7 Move opt_loglevel() from ffmpeg.c to cmdutils.c.
stefano authored
72 */
73 int opt_loglevel(const char *opt, const char *arg);
74
75 /**
1aa041f Add -timelimit option
mru authored
76 * Limit the execution time.
77 */
78 int opt_timelimit(const char *opt, const char *arg);
79
80 /**
e337c71 Fix grammar errors in documentation
mru authored
81 * Parse a string and return its corresponding value as a double.
82 * Exit from the application if the string cannot be correctly
532a936 Improve wording/grammar of Doxygen comments.
diego authored
83 * parsed or the corresponding value is invalid.
0e1a1de Export and document in cmdutils.h the function parse_number_or_die().
benoit authored
84 *
85 * @param context the context of the value to be set (e.g. the
86 * corresponding commandline option name)
87 * @param numstr the string to be parsed
88 * @param type the type (OPT_INT64 or OPT_FLOAT) as which the
89 * string should be parsed
532a936 Improve wording/grammar of Doxygen comments.
diego authored
90 * @param min the minimum valid accepted value
91 * @param max the maximum valid accepted value
0e1a1de Export and document in cmdutils.h the function parse_number_or_die().
benoit authored
92 */
93 double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max);
94
426bf79 Export parse_time_or_die from ffmpeg.c to cmdutils.c
superdump authored
95 /**
e337c71 Fix grammar errors in documentation
mru authored
96 * Parse a string specifying a time and return its corresponding
97 * value as a number of microseconds. Exit from the application if
426bf79 Export parse_time_or_die from ffmpeg.c to cmdutils.c
superdump authored
98 * the string cannot be correctly parsed.
99 *
100 * @param context the context of the value to be set (e.g. the
101 * corresponding commandline option name)
102 * @param timestr the string to be parsed
5a44d18 Remove '\p', '\c' and '\e' doxygen markup from doxy, as it should
stefano authored
103 * @param is_duration a flag which tells how to interpret timestr, if
104 * not zero timestr is interpreted as a duration, otherwise as a
426bf79 Export parse_time_or_die from ffmpeg.c to cmdutils.c
superdump authored
105 * date
106 *
7752a74 Typo
benoit authored
107 * @see parse_date()
426bf79 Export parse_time_or_die from ffmpeg.c to cmdutils.c
superdump authored
108 */
109 int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration);
110
c6141f3 added ffplay utility
bellard authored
111 typedef struct {
112 const char *name;
113 int flags;
114 #define HAS_ARG 0x0001
115 #define OPT_BOOL 0x0002
116 #define OPT_EXPERT 0x0004
117 #define OPT_STRING 0x0008
8c50b14 more sections in help - copyright fixes
bellard authored
118 #define OPT_VIDEO 0x0010
119 #define OPT_AUDIO 0x0020
120 #define OPT_GRAB 0x0040
b383eef OPT_INT
michael authored
121 #define OPT_INT 0x0080
c940b5f 1000l (copy & paste)
michael authored
122 #define OPT_FLOAT 0x0100
19fc5da subtitle option
bellard authored
123 #define OPT_SUBTITLE 0x0200
0aaffc4 AVOption API improvments
michael authored
124 #define OPT_FUNC2 0x0400
9ee38da add OPT_INT64 option
bcoudurier authored
125 #define OPT_INT64 0x0800
e78c048 OPT_EXIT
michael authored
126 #define OPT_EXIT 0x1000
19fc5da subtitle option
bellard authored
127 union {
0aaffc4 AVOption API improvments
michael authored
128 void (*func_arg)(const char *); //FIXME passing error code as int return would be nicer then exit() in the func
c6141f3 added ffplay utility
bellard authored
129 int *int_arg;
130 char **str_arg;
c99f6dc OPT_FLOAT
michael authored
131 float *float_arg;
0aaffc4 AVOption API improvments
michael authored
132 int (*func2_arg)(const char *, const char *);
9ee38da add OPT_INT64 option
bcoudurier authored
133 int64_t *int64_arg;
c6141f3 added ffplay utility
bellard authored
134 } u;
135 const char *help;
136 const char *argname;
137 } OptionDef;
138
8c50b14 more sections in help - copyright fixes
bellard authored
139 void show_help_options(const OptionDef *options, const char *msg, int mask, int value);
13e5863 Make cmdutils.c:parse_options accept as argument a function to parse
diego authored
140
141 /**
e337c71 Fix grammar errors in documentation
mru authored
142 * Parse the command line arguments.
13e5863 Make cmdutils.c:parse_options accept as argument a function to parse
diego authored
143 * @param options Array with the definitions required to interpret every
38bc845 Remove angular brackets from Doxygen comments; Doxygen confuses them for...
diego authored
144 * option of the form: -option_name [argument]
13e5863 Make cmdutils.c:parse_options accept as argument a function to parse
diego authored
145 * @param parse_arg_function Name of the function called to process every
146 * argument without a leading option name flag. NULL if such arguments do
147 * not have to be processed.
148 */
149 void parse_options(int argc, char **argv, const OptionDef *options,
150 void (* parse_arg_function)(const char*));
151
5849ed9 User application side of Codec specific parameters.
michael authored
152 void set_context_opts(void *ctx, void *opts_ctx, int flags, AVCodec *codec);
55b5d41 Move opt_default() and set_context_opts() to cmdutils so it can be used ...
michael authored
153
e6ac82d Document cmdutils.c:print_error().
stefano authored
154 /**
e337c71 Fix grammar errors in documentation
mru authored
155 * Print an error message to stderr, indicating filename and a human
e6ac82d Document cmdutils.c:print_error().
stefano authored
156 * readable description of the error code err.
157 *
158 * If strerror_r() is not available the use of this function in a
159 * multithreaded application may be unsafe.
160 *
161 * @see av_strerror()
162 */
c6141f3 added ffplay utility
bellard authored
163 void print_error(const char *filename, int err);
164
fbb0de7 Move list_fmts() from ffmpeg.c to cmdutils.{h,c}, so that it can be
stefano authored
165 void list_fmts(void (*get_fmt_string)(char *buf, int buf_size, int fmt), int nb_fmts);
166
af99c1a Implement the cmdutils.c show_license function.
benoit authored
167 /**
e337c71 Fix grammar errors in documentation
mru authored
168 * Print the program banner to stderr. The banner contents depend on the
532a936 Improve wording/grammar of Doxygen comments.
diego authored
169 * current version of the repository and of the libav* libraries used by
170 * the program.
65a3a9a Implement common show version and banner.
benoit authored
171 */
d79977a Simplify show_banner() so that it does not require arguments, similar
diego authored
172 void show_banner(void);
65a3a9a Implement common show version and banner.
benoit authored
173
174 /**
e337c71 Fix grammar errors in documentation
mru authored
175 * Print the version of the program to stdout. The version message
65a3a9a Implement common show version and banner.
benoit authored
176 * depends on the current versions of the repository and of the libav*
177 * libraries.
178 */
99bc41e Do not pass program_name as argument to show_version(), this allows some
michael authored
179 void show_version(void);
65a3a9a Implement common show version and banner.
benoit authored
180
181 /**
e337c71 Fix grammar errors in documentation
mru authored
182 * Print the license of the program to stdout. The license depends on
532a936 Improve wording/grammar of Doxygen comments.
diego authored
183 * the license of the libraries compiled into the program.
af99c1a Implement the cmdutils.c show_license function.
benoit authored
184 */
185 void show_license(void);
186
f82e840 Move show_formats() to cmdutils.c.
takis authored
187 /**
e337c71 Fix grammar errors in documentation
mru authored
188 * Print a listing containing all the formats supported by the
f82e840 Move show_formats() to cmdutils.c.
takis authored
189 * program.
190 */
191 void show_formats(void);
192
ba515dd Implement read_yesno().
stefano authored
193 /**
e337c71 Fix grammar errors in documentation
mru authored
194 * Print a listing containing all the codecs supported by the
38ba66e Split show_formats().
michael authored
195 * program.
196 */
197 void show_codecs(void);
198
199 /**
e337c71 Fix grammar errors in documentation
mru authored
200 * Print a listing containing all the filters supported by the
1fdf08f Implement a -filters option, listing all the available libavfilter
stefano authored
201 * program.
202 */
203 void show_filters(void);
204
205 /**
e337c71 Fix grammar errors in documentation
mru authored
206 * Print a listing containing all the bit stream filters supported by the
38ba66e Split show_formats().
michael authored
207 * program.
208 */
209 void show_bsfs(void);
210
211 /**
e337c71 Fix grammar errors in documentation
mru authored
212 * Print a listing containing all the protocols supported by the
38ba66e Split show_formats().
michael authored
213 * program.
214 */
215 void show_protocols(void);
216
217 /**
e337c71 Fix grammar errors in documentation
mru authored
218 * Print a listing containing all the pixel formats supported by the
78111c2 Implement a -pix_fmts foption or listing all the supported pixel
stefano authored
219 * program.
220 */
221 void show_pix_fmts(void);
222
223 /**
ef25b9c Grammar fixes
mru authored
224 * Return a positive value if a line read from standard input
225 * starts with [yY], otherwise return 0.
ba515dd Implement read_yesno().
stefano authored
226 */
227 int read_yesno(void);
228
42a2ed8 Implement cmdutils.c:read_file(), and use it in ffmpeg.c for reading
stefano authored
229 /**
e337c71 Fix grammar errors in documentation
mru authored
230 * Read the file with name filename, and put its content in a newly
42a2ed8 Implement cmdutils.c:read_file(), and use it in ffmpeg.c for reading
stefano authored
231 * allocated 0-terminated buffer.
232 *
e337c71 Fix grammar errors in documentation
mru authored
233 * @param bufptr location where pointer to buffer is returned
234 * @param size location where size of buffer is returned
42a2ed8 Implement cmdutils.c:read_file(), and use it in ffmpeg.c for reading
stefano authored
235 * @return 0 in case of success, a negative value corresponding to an
236 * AVERROR error code in case of failure.
237 */
238 int read_file(const char *filename, char **bufptr, size_t *size);
239
983c2f5 Extract timestamp correction code from ffplay.c to cmdutils.c
astrange authored
240 typedef struct {
241 int64_t num_faulty_pts; /// Number of incorrect PTS values so far
242 int64_t num_faulty_dts; /// Number of incorrect DTS values so far
243 int64_t last_pts; /// PTS of the last frame
244 int64_t last_dts; /// DTS of the last frame
245 } PtsCorrectionContext;
246
247 /**
7d65d4d Make new doxy follows the agreed upon style and grammatical
stefano authored
248 * Reset the state of the PtsCorrectionContext.
983c2f5 Extract timestamp correction code from ffplay.c to cmdutils.c
astrange authored
249 */
250 void init_pts_correction(PtsCorrectionContext *ctx);
251
252 /**
7d65d4d Make new doxy follows the agreed upon style and grammatical
stefano authored
253 * Attempt to guess proper monotonic timestamps for decoded video frames
983c2f5 Extract timestamp correction code from ffplay.c to cmdutils.c
astrange authored
254 * which might have incorrect times. Input timestamps may wrap around, in
255 * which case the output will as well.
256 *
7d65d4d Make new doxy follows the agreed upon style and grammatical
stefano authored
257 * @param pts the pts field of the decoded AVPacket, as passed through
983c2f5 Extract timestamp correction code from ffplay.c to cmdutils.c
astrange authored
258 * AVCodecContext.reordered_opaque
7d65d4d Make new doxy follows the agreed upon style and grammatical
stefano authored
259 * @param dts the dts field of the decoded AVPacket
260 * @return one of the input values, may be AV_NOPTS_VALUE
983c2f5 Extract timestamp correction code from ffplay.c to cmdutils.c
astrange authored
261 */
262 int64_t guess_correct_pts(PtsCorrectionContext *ctx, int64_t pts, int64_t dts);
263
86c828f Implement get_preset_file() in cmdutils.h and use it to factorize code
stefano authored
264 /**
265 * Get a file corresponding to a preset file.
266 *
267 * If is_path is non-zero, look for the file in the path preset_name.
268 * Otherwise search for a file named arg.ffpreset in the directories
269 * $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined
270 * at configuration time, in that order. If no such file is found and
271 * codec_name is defined, then search for a file named
272 * codec_name-preset_name.ffpreset in the above-mentioned directories.
273 *
274 * @param filename buffer where the name of the found filename is written
275 * @param filename_size size in bytes of the filename buffer
276 * @param preset_name name of the preset to search
277 * @param is_path tell if preset_name is a filename path
278 * @param codec_name name of the codec for which to look for the
279 * preset, may be NULL
280 */
281 FILE *get_preset_file(char *filename, size_t filename_size,
282 const char *preset_name, int is_path, const char *codec_name);
283
a0d7bd1 Factorize definition of the output_filter defined in both ffplay.c and
stefano authored
284 #if CONFIG_AVFILTER
285 #include "libavfilter/avfilter.h"
286
287 typedef struct {
288 enum PixelFormat pix_fmt;
289 } FFSinkContext;
290
291 extern AVFilter ffsink;
292
99aaabc Implement a common get_filtered_video_frame(), shared between ffplay.c
stefano authored
293 /**
294 * Extract a frame from sink.
295 *
296 * @return a negative error in case of failure, 1 if one frame has
297 * been extracted successfully.
298 */
299 int get_filtered_video_frame(AVFilterContext *sink, AVFrame *frame,
300 AVFilterBufferRef **picref, AVRational *pts_tb);
301
a0d7bd1 Factorize definition of the output_filter defined in both ffplay.c and
stefano authored
302 #endif /* CONFIG_AVFILTER */
303
26ed136 Add FFMPEG_ prefix to all multiple inclusion guards.
diego authored
304 #endif /* FFMPEG_CMDUTILS_H */
Something went wrong with that request. Please try again.