int width, height, xleft, ytop;
} VideoState;
-void show_help(void);
+static void show_help(void);
static int audio_write_get_buf_size(VideoState *is);
/* options specified by the user */
aspect_ratio = 0;
else
aspect_ratio = av_q2d(is->video_st->codec->sample_aspect_ratio)
- * is->video_st->codec->width / is->video_st->codec->height;;
+ * is->video_st->codec->width / is->video_st->codec->height;
if (aspect_ratio <= 0.0)
aspect_ratio = (float)is->video_st->codec->width /
(float)is->video_st->codec->height;
/* prepare a new audio buffer */
-void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
+static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
{
VideoState *is = opaque;
int audio_size, len1;
}
}
-static void opt_width(const char *arg)
+static int opt_width(const char *opt, const char *arg)
{
- screen_width = atoi(arg);
- if(screen_width<=0){
- fprintf(stderr, "invalid width\n");
- exit(1);
- }
+ screen_width = parse_number_or_die(opt, arg, OPT_INT64, 1, INT_MAX);
+ return 0;
}
-static void opt_height(const char *arg)
+static int opt_height(const char *opt, const char *arg)
{
- screen_height = atoi(arg);
- if(screen_height<=0){
- fprintf(stderr, "invalid height\n");
- exit(1);
- }
+ screen_height = parse_number_or_die(opt, arg, OPT_INT64, 1, INT_MAX);
+ return 0;
}
static void opt_format(const char *arg)
}
}
-static void opt_seek(const char *arg)
+static int opt_seek(const char *opt, const char *arg)
{
- start_time = parse_date(arg, 1);
- if (start_time == INT64_MIN) {
- fprintf(stderr, "Invalid duration specification: %s\n", arg);
- exit(1);
- }
+ start_time = parse_time_or_die(opt, arg, 1);
+ return 0;
}
-static void opt_debug(const char *arg)
+static int opt_debug(const char *opt, const char *arg)
{
av_log_set_level(99);
- debug = atoi(arg);
+ debug = parse_number_or_die(opt, arg, OPT_INT64, 0, INT_MAX);
+ return 0;
}
-static void opt_vismv(const char *arg)
+static int opt_vismv(const char *opt, const char *arg)
{
- debug_mv = atoi(arg);
+ debug_mv = parse_number_or_die(opt, arg, OPT_INT64, INT_MIN, INT_MAX);
+ return 0;
}
-static void opt_thread_count(const char *arg)
+static int opt_thread_count(const char *opt, const char *arg)
{
- thread_count= atoi(arg);
+ thread_count= parse_number_or_die(opt, arg, OPT_INT64, 0, INT_MAX);
#if !defined(HAVE_THREADS)
fprintf(stderr, "Warning: not compiled with thread support, using thread emulation\n");
#endif
+ return 0;
}
static void opt_show_help(void)
exit(0);
}
-const OptionDef options[] = {
+static const OptionDef options[] = {
{ "h", 0, {(void*)opt_show_help}, "show help" },
- { "x", HAS_ARG, {(void*)opt_width}, "force displayed width", "width" },
- { "y", HAS_ARG, {(void*)opt_height}, "force displayed height", "height" },
+ { "x", HAS_ARG | OPT_FUNC2, {(void*)opt_width}, "force displayed width", "width" },
+ { "y", HAS_ARG | OPT_FUNC2, {(void*)opt_height}, "force displayed height", "height" },
{ "s", HAS_ARG | OPT_VIDEO, {(void*)opt_frame_size}, "set frame size (WxH or abbreviation)", "size" },
{ "fs", OPT_BOOL, {(void*)&is_full_screen}, "force full screen" },
{ "an", OPT_BOOL, {(void*)&audio_disable}, "disable audio" },
{ "vn", OPT_BOOL, {(void*)&video_disable}, "disable video" },
{ "ast", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&wanted_audio_stream}, "", "" },
{ "vst", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&wanted_video_stream}, "", "" },
- { "ss", HAS_ARG, {(void*)&opt_seek}, "seek to a given position in seconds", "pos" },
+ { "ss", HAS_ARG | OPT_FUNC2, {(void*)&opt_seek}, "seek to a given position in seconds", "pos" },
{ "bytes", OPT_BOOL, {(void*)&seek_by_bytes}, "seek by bytes" },
{ "nodisp", OPT_BOOL, {(void*)&display_disable}, "disable graphical display" },
{ "f", HAS_ARG, {(void*)opt_format}, "force format", "fmt" },
{ "pix_fmt", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_frame_pix_fmt}, "set pixel format", "format" },
{ "stats", OPT_BOOL | OPT_EXPERT, {(void*)&show_status}, "show status", "" },
- { "debug", HAS_ARG | OPT_EXPERT, {(void*)opt_debug}, "print specific debug info", "" },
+ { "debug", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_debug}, "print specific debug info", "" },
{ "bug", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&workaround_bugs}, "workaround bugs", "" },
- { "vismv", HAS_ARG | OPT_EXPERT, {(void*)opt_vismv}, "visualize motion vectors", "" },
+ { "vismv", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_vismv}, "visualize motion vectors", "" },
{ "fast", OPT_BOOL | OPT_EXPERT, {(void*)&fast}, "non spec compliant optimizations", "" },
{ "genpts", OPT_BOOL | OPT_EXPERT, {(void*)&genpts}, "generate pts", "" },
{ "drp", OPT_BOOL |OPT_EXPERT, {(void*)&decoder_reorder_pts}, "let decoder reorder pts", ""},
{ "er", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_resilience}, "set error detection threshold (0-4)", "threshold" },
{ "ec", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_concealment}, "set error concealment options", "bit_mask" },
{ "sync", HAS_ARG | OPT_EXPERT, {(void*)opt_sync}, "set audio-video sync. type (type=audio/video/ext)", "type" },
- { "threads", HAS_ARG | OPT_EXPERT, {(void*)opt_thread_count}, "thread count", "count" },
+ { "threads", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_thread_count}, "thread count", "count" },
{ NULL, },
};
-void show_help(void)
+static void show_help(void)
{
printf("usage: ffplay [options] input_file\n"
"Simple media player\n");
);
}
-void opt_input_file(const char *filename)
+static void opt_input_file(const char *filename)
{
if (!strcmp(filename, "-"))
filename = "pipe:";