#include "config.h"
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/dict.h"
#include "libavdevice/avdevice.h"
#include "cmdutils.h"
#include "cmdutils_common_opts.h"
Go to the source code of this file.
Data Structures | |
struct | unit_value |
struct | Writer |
struct | WriterContext |
struct | print_buf |
struct | CompactContext |
struct | JSONContext |
Defines | |
#define | WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS 1 |
#define | MAX_REGISTERED_WRITERS_NB 64 |
#define | ESCAPE_INIT_BUF_SIZE 256 |
#define | ESCAPE_CHECK_SIZE(src, size, max_size) |
#define | ESCAPE_REALLOC_BUF(dst_size_p, dst_p, src, size) |
#define | OFFSET(x) offsetof(CompactContext, x) |
#define | INDENT " " |
#define | print_fmt(k, f,...) |
#define | print_fmt_opt(k, f,...) |
#define | print_int(k, v) writer_print_integer(w, k, v) |
#define | print_str(k, v) writer_print_string(w, k, v, 0) |
#define | print_str_opt(k, v) writer_print_string(w, k, v, 1) |
#define | print_time(k, v, tb) writer_print_time(w, k, v, tb) |
#define | print_ts(k, v) writer_print_ts(w, k, v) |
#define | print_val(k, v, u) |
#define | print_section_header(s) writer_print_section_header(w, s) |
#define | print_section_footer(s) writer_print_section_footer(w, s) |
#define | show_tags(metadata) writer_show_tags(w, metadata) |
#define | PRINT_CHAPTER(name) |
Typedefs | |
typedef struct WriterContext | WriterContext |
Functions | |
void av_noreturn | exit_program (int ret) |
Do all the necessary cleanup and abort. | |
static char * | value_string (char *buf, int buf_size, struct unit_value uv) |
static const char * | writer_get_name (void *p) |
static void | writer_close (WriterContext **wctx) |
static int | writer_open (WriterContext **wctx, const Writer *writer, const char *args, void *opaque) |
static void | writer_print_header (WriterContext *wctx) |
static void | writer_print_footer (WriterContext *wctx) |
static void | writer_print_chapter_header (WriterContext *wctx, const char *header) |
static void | writer_print_chapter_footer (WriterContext *wctx, const char *footer) |
static void | writer_print_section_header (WriterContext *wctx, const char *header) |
static void | writer_print_section_footer (WriterContext *wctx, const char *footer) |
static void | writer_print_integer (WriterContext *wctx, const char *key, long long int val) |
static void | writer_print_string (WriterContext *wctx, const char *key, const char *val, int opt) |
static void | writer_print_time (WriterContext *wctx, const char *key, int64_t ts, const AVRational *time_base) |
static void | writer_print_ts (WriterContext *wctx, const char *key, int64_t ts) |
static void | writer_show_tags (WriterContext *wctx, AVDictionary *dict) |
static int | writer_register (const Writer *writer) |
static const Writer * | writer_get_by_name (const char *name) |
static char * | fast_asprintf (struct print_buf *pbuf, const char *fmt,...) |
static void | default_print_footer (WriterContext *wctx) |
static void | default_print_chapter_header (WriterContext *wctx, const char *chapter) |
static char * | upcase_string (char *dst, size_t dst_size, const char *src) |
static void | default_print_section_header (WriterContext *wctx, const char *section) |
static void | default_print_section_footer (WriterContext *wctx, const char *section) |
static void | default_print_str (WriterContext *wctx, const char *key, const char *value) |
static void | default_print_int (WriterContext *wctx, const char *key, long long int value) |
static void | default_show_tags (WriterContext *wctx, AVDictionary *dict) |
static const char * | c_escape_str (char **dst, size_t *dst_size, const char *src, const char sep, void *log_ctx) |
Escape , , \ and sep characters contained in s, and print the resulting string. | |
static const char * | csv_escape_str (char **dst, size_t *dst_size, const char *src, const char sep, void *log_ctx) |
Quote fields containing special characters, check RFC4180. | |
static const char * | none_escape_str (char **dst, size_t *dst_size, const char *src, const char sep, void *log_ctx) |
static const char * | compact_get_name (void *ctx) |
static av_cold int | compact_init (WriterContext *wctx, const char *args, void *opaque) |
static av_cold void | compact_uninit (WriterContext *wctx) |
static void | compact_print_section_header (WriterContext *wctx, const char *section) |
static void | compact_print_section_footer (WriterContext *wctx, const char *section) |
static void | compact_print_str (WriterContext *wctx, const char *key, const char *value) |
static void | compact_print_int (WriterContext *wctx, const char *key, long long int value) |
static void | compact_show_tags (WriterContext *wctx, AVDictionary *dict) |
static av_cold int | csv_init (WriterContext *wctx, const char *args, void *opaque) |
static av_cold int | json_init (WriterContext *wctx, const char *args, void *opaque) |
static av_cold void | json_uninit (WriterContext *wctx) |
static const char * | json_escape_str (char **dst, size_t *dst_size, const char *src, void *log_ctx) |
static void | json_print_header (WriterContext *wctx) |
static void | json_print_footer (WriterContext *wctx) |
static void | json_print_chapter_header (WriterContext *wctx, const char *chapter) |
static void | json_print_chapter_footer (WriterContext *wctx, const char *chapter) |
static void | json_print_section_header (WriterContext *wctx, const char *section) |
static void | json_print_section_footer (WriterContext *wctx, const char *section) |
static void | json_print_item_str (WriterContext *wctx, const char *key, const char *value, const char *indent) |
static void | json_print_str (WriterContext *wctx, const char *key, const char *value) |
static void | json_print_int (WriterContext *wctx, const char *key, long long int value) |
static void | json_show_tags (WriterContext *wctx, AVDictionary *dict) |
static void | writer_register_all (void) |
static void | show_packet (WriterContext *w, AVFormatContext *fmt_ctx, AVPacket *pkt, int packet_idx) |
static void | show_packets (WriterContext *w, AVFormatContext *fmt_ctx) |
static void | show_stream (WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx) |
static void | show_streams (WriterContext *w, AVFormatContext *fmt_ctx) |
static void | show_format (WriterContext *w, AVFormatContext *fmt_ctx) |
static int | open_input_file (AVFormatContext **fmt_ctx_ptr, const char *filename) |
static int | probe_file (const char *filename) |
static void | show_usage (void) |
static int | opt_format (const char *opt, const char *arg) |
static void | opt_input_file (void *optctx, const char *arg) |
static int | opt_help (const char *opt, const char *arg) |
static int | opt_pretty (const char *opt, const char *arg) |
int | main (int argc, char **argv) |
Variables | |
const char | program_name [] = "ffprobe" |
program name, defined by the program for show_version(). | |
const int | program_birth_year = 2007 |
program birth year, defined by the program for show_banner() | |
static int | do_show_format = 0 |
static int | do_show_packets = 0 |
static int | do_show_streams = 0 |
static int | show_value_unit = 0 |
static int | use_value_prefix = 0 |
static int | use_byte_value_binary_prefix = 0 |
static int | use_value_sexagesimal_format = 0 |
static char * | print_format |
static const OptionDef | options [] |
static const char * | input_filename |
static AVInputFormat * | iformat = NULL |
static const char * | binary_unit_prefixes [] = { "", "Ki", "Mi", "Gi", "Ti", "Pi" } |
static const char * | decimal_unit_prefixes [] = { "", "K" , "M" , "G" , "T" , "P" } |
static const char * | unit_second_str = "s" |
static const char * | unit_hertz_str = "Hz" |
static const char * | unit_byte_str = "byte" |
static const char * | unit_bit_per_second_str = "bit/s" |
static const AVClass | writer_class |
static const Writer * | registered_writers [MAX_REGISTERED_WRITERS_NB+1] |
static const Writer | default_writer |
static const AVOption | compact_options [] |
static const AVClass | compact_class |
static const Writer | compact_writer |
static const Writer | csv_writer |
static const Writer | json_writer |
#define ESCAPE_CHECK_SIZE | ( | src, | |||
size, | |||||
max_size | ) |
Value:
if (size > max_size) { \ char buf[64]; \ snprintf(buf, sizeof(buf), "%s", src); \ av_log(log_ctx, AV_LOG_WARNING, \ "String '%s...' with is too big\n", buf); \ return "FFPROBE_TOO_BIG_STRING"; \ }
Definition at line 367 of file ffprobe.c.
Referenced by c_escape_str(), csv_escape_str(), and json_escape_str().
#define ESCAPE_INIT_BUF_SIZE 256 |
#define ESCAPE_REALLOC_BUF | ( | dst_size_p, | |||
dst_p, | |||||
src, | |||||
size | ) |
Value:
if (*dst_size_p < size) { \ char *q = av_realloc(*dst_p, size); \ if (!q) { \ char buf[64]; \ snprintf(buf, sizeof(buf), "%s", src); \ av_log(log_ctx, AV_LOG_WARNING, \ "String '%s...' could not be escaped\n", buf); \ return "FFPROBE_THIS_STRING_COULD_NOT_BE_ESCAPED"; \ } \ *dst_size_p = size; \ *dst = q; \ }
Definition at line 376 of file ffprobe.c.
Referenced by c_escape_str(), csv_escape_str(), and json_escape_str().
#define MAX_REGISTERED_WRITERS_NB 64 |
#define OFFSET | ( | x | ) | offsetof(CompactContext, x) |
#define PRINT_CHAPTER | ( | name | ) |
Value:
do { \ if (do_show_ ## name) { \ writer_print_chapter_header(wctx, #name); \ show_ ## name (wctx, fmt_ctx); \ writer_print_chapter_footer(wctx, #name); \ } \ } while (0)
Definition at line 1121 of file ffprobe.c.
Referenced by probe_file().
#define print_fmt | ( | k, | |||
f, | |||||
... | ) |
Value:
do { \ if (fast_asprintf(&pbuf, f, __VA_ARGS__)) \ writer_print_string(w, k, pbuf.s, 0); \ } while (0)
Definition at line 879 of file ffprobe.c.
Referenced by show_packet(), and show_stream().
#define print_fmt_opt | ( | k, | |||
f, | |||||
... | ) |
Value:
do { \ if (fast_asprintf(&pbuf, f, __VA_ARGS__)) \ writer_print_string(w, k, pbuf.s, 1); \ } while (0)
#define print_int | ( | k, | |||
v | ) | writer_print_integer(w, k, v) |
Definition at line 889 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define print_section_footer | ( | s | ) | writer_print_section_footer(w, s) |
Definition at line 897 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define print_section_header | ( | s | ) | writer_print_section_header(w, s) |
Definition at line 896 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define print_str | ( | k, | |||
v | ) | writer_print_string(w, k, v, 0) |
Definition at line 890 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define print_str_opt | ( | k, | |||
v | ) | writer_print_string(w, k, v, 1) |
Definition at line 891 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define print_time | ( | k, | |||
v, | |||||
tb | ) | writer_print_time(w, k, v, tb) |
Definition at line 892 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define print_ts | ( | k, | |||
v | ) | writer_print_ts(w, k, v) |
#define print_val | ( | k, | |||
v, | |||||
u | ) |
Value:
writer_print_string(w, k, \ value_string(val_str, sizeof(val_str), (struct unit_value){.val.i = v, .unit=u}), 0)
Definition at line 894 of file ffprobe.c.
Referenced by show_format(), show_packet(), and show_stream().
#define show_tags | ( | metadata | ) | writer_show_tags(w, metadata) |
#define WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS 1 |
typedef struct WriterContext WriterContext |
static const char* c_escape_str | ( | char ** | dst, | |
size_t * | dst_size, | |||
const char * | src, | |||
const char | sep, | |||
void * | log_ctx | |||
) | [static] |
Escape
, , \ and sep characters contained in s, and print the resulting string.
Definition at line 468 of file ffprobe.c.
Referenced by compact_init().
static const char* compact_get_name | ( | void * | ctx | ) | [static] |
static av_cold int compact_init | ( | WriterContext * | wctx, | |
const char * | args, | |||
void * | opaque | |||
) | [static] |
static void compact_print_int | ( | WriterContext * | wctx, | |
const char * | key, | |||
long long int | value | |||
) | [static] |
static void compact_print_section_footer | ( | WriterContext * | wctx, | |
const char * | section | |||
) | [static] |
static void compact_print_section_header | ( | WriterContext * | wctx, | |
const char * | section | |||
) | [static] |
static void compact_print_str | ( | WriterContext * | wctx, | |
const char * | key, | |||
const char * | value | |||
) | [static] |
static void compact_show_tags | ( | WriterContext * | wctx, | |
AVDictionary * | dict | |||
) | [static] |
static av_cold void compact_uninit | ( | WriterContext * | wctx | ) | [static] |
static const char* csv_escape_str | ( | char ** | dst, | |
size_t * | dst_size, | |||
const char * | src, | |||
const char | sep, | |||
void * | log_ctx | |||
) | [static] |
Quote fields containing special characters, check RFC4180.
Definition at line 503 of file ffprobe.c.
Referenced by compact_init().
static av_cold int csv_init | ( | WriterContext * | wctx, | |
const char * | args, | |||
void * | opaque | |||
) | [static] |
static void default_print_chapter_header | ( | WriterContext * | wctx, | |
const char * | chapter | |||
) | [static] |
static void default_print_footer | ( | WriterContext * | wctx | ) | [static] |
static void default_print_int | ( | WriterContext * | wctx, | |
const char * | key, | |||
long long int | value | |||
) | [static] |
static void default_print_section_footer | ( | WriterContext * | wctx, | |
const char * | section | |||
) | [static] |
static void default_print_section_header | ( | WriterContext * | wctx, | |
const char * | section | |||
) | [static] |
static void default_print_str | ( | WriterContext * | wctx, | |
const char * | key, | |||
const char * | value | |||
) | [static] |
static void default_show_tags | ( | WriterContext * | wctx, | |
AVDictionary * | dict | |||
) | [static] |
void av_noreturn exit_program | ( | int | ret | ) |
static char* fast_asprintf | ( | struct print_buf * | pbuf, | |
const char * | fmt, | |||
... | ||||
) | [static] |
static const char* json_escape_str | ( | char ** | dst, | |
size_t * | dst_size, | |||
const char * | src, | |||
void * | log_ctx | |||
) | [static] |
Definition at line 732 of file ffprobe.c.
Referenced by json_print_chapter_header(), json_print_int(), and json_print_item_str().
static av_cold int json_init | ( | WriterContext * | wctx, | |
const char * | args, | |||
void * | opaque | |||
) | [static] |
static void json_print_chapter_footer | ( | WriterContext * | wctx, | |
const char * | chapter | |||
) | [static] |
static void json_print_chapter_header | ( | WriterContext * | wctx, | |
const char * | chapter | |||
) | [static] |
static void json_print_footer | ( | WriterContext * | wctx | ) | [static] |
static void json_print_header | ( | WriterContext * | wctx | ) | [static] |
static void json_print_int | ( | WriterContext * | wctx, | |
const char * | key, | |||
long long int | value | |||
) | [static] |
static void json_print_item_str | ( | WriterContext * | wctx, | |
const char * | key, | |||
const char * | value, | |||
const char * | indent | |||
) | [inline, static] |
static void json_print_section_footer | ( | WriterContext * | wctx, | |
const char * | section | |||
) | [static] |
static void json_print_section_header | ( | WriterContext * | wctx, | |
const char * | section | |||
) | [static] |
static void json_print_str | ( | WriterContext * | wctx, | |
const char * | key, | |||
const char * | value | |||
) | [static] |
static void json_show_tags | ( | WriterContext * | wctx, | |
AVDictionary * | dict | |||
) | [static] |
static av_cold void json_uninit | ( | WriterContext * | wctx | ) | [static] |
static const char* none_escape_str | ( | char ** | dst, | |
size_t * | dst_size, | |||
const char * | src, | |||
const char | sep, | |||
void * | log_ctx | |||
) | [static] |
static int open_input_file | ( | AVFormatContext ** | fmt_ctx_ptr, | |
const char * | filename | |||
) | [static] |
static int opt_format | ( | const char * | opt, | |
const char * | arg | |||
) | [static] |
static int opt_help | ( | const char * | opt, | |
const char * | arg | |||
) | [static] |
static void opt_input_file | ( | void * | optctx, | |
const char * | arg | |||
) | [static] |
static int opt_pretty | ( | const char * | opt, | |
const char * | arg | |||
) | [static] |
static int probe_file | ( | const char * | filename | ) | [static] |
static void show_format | ( | WriterContext * | w, | |
AVFormatContext * | fmt_ctx | |||
) | [static] |
static void show_packet | ( | WriterContext * | w, | |
AVFormatContext * | fmt_ctx, | |||
AVPacket * | pkt, | |||
int | packet_idx | |||
) | [static] |
static void show_packets | ( | WriterContext * | w, | |
AVFormatContext * | fmt_ctx | |||
) | [static] |
static void show_stream | ( | WriterContext * | w, | |
AVFormatContext * | fmt_ctx, | |||
int | stream_idx | |||
) | [static] |
static void show_streams | ( | WriterContext * | w, | |
AVFormatContext * | fmt_ctx | |||
) | [static] |
static char* upcase_string | ( | char * | dst, | |
size_t | dst_size, | |||
const char * | src | |||
) | [inline, static] |
Definition at line 406 of file ffprobe.c.
Referenced by default_print_section_footer(), and default_print_section_header().
static char* value_string | ( | char * | buf, | |
int | buf_size, | |||
struct unit_value | uv | |||
) | [static] |
static void writer_close | ( | WriterContext ** | wctx | ) | [static] |
static const Writer* writer_get_by_name | ( | const char * | name | ) | [static] |
static int writer_open | ( | WriterContext ** | wctx, | |
const Writer * | writer, | |||
const char * | args, | |||
void * | opaque | |||
) | [static] |
static void writer_print_chapter_footer | ( | WriterContext * | wctx, | |
const char * | footer | |||
) | [inline, static] |
static void writer_print_chapter_header | ( | WriterContext * | wctx, | |
const char * | header | |||
) | [inline, static] |
static void writer_print_footer | ( | WriterContext * | wctx | ) | [inline, static] |
static void writer_print_header | ( | WriterContext * | wctx | ) | [inline, static] |
static void writer_print_integer | ( | WriterContext * | wctx, | |
const char * | key, | |||
long long int | val | |||
) | [inline, static] |
static void writer_print_section_footer | ( | WriterContext * | wctx, | |
const char * | footer | |||
) | [inline, static] |
static void writer_print_section_header | ( | WriterContext * | wctx, | |
const char * | header | |||
) | [inline, static] |
static void writer_print_string | ( | WriterContext * | wctx, | |
const char * | key, | |||
const char * | val, | |||
int | opt | |||
) | [inline, static] |
Definition at line 263 of file ffprobe.c.
Referenced by default_show_tags(), writer_print_time(), and writer_print_ts().
static void writer_print_time | ( | WriterContext * | wctx, | |
const char * | key, | |||
int64_t | ts, | |||
const AVRational * | time_base | |||
) | [static] |
static void writer_print_ts | ( | WriterContext * | wctx, | |
const char * | key, | |||
int64_t | ts | |||
) | [static] |
static int writer_register | ( | const Writer * | writer | ) | [static] |
static void writer_register_all | ( | void | ) | [static] |
static void writer_show_tags | ( | WriterContext * | wctx, | |
AVDictionary * | dict | |||
) | [inline, static] |
const char* binary_unit_prefixes[] = { "", "Ki", "Mi", "Gi", "Ti", "Pi" } [static] |
const AVClass compact_class [static] |
Initial value:
{ "CompactContext", compact_get_name, compact_options }
const AVOption compact_options[] [static] |
Initial value:
{ {"item_sep", "set item separator", OFFSET(item_sep_str), AV_OPT_TYPE_STRING, {.str="|"}, CHAR_MIN, CHAR_MAX }, {"s", "set item separator", OFFSET(item_sep_str), AV_OPT_TYPE_STRING, {.str="|"}, CHAR_MIN, CHAR_MAX }, {"nokey", "force no key printing", OFFSET(nokey), AV_OPT_TYPE_INT, {.dbl=0}, 0, 1 }, {"nk", "force no key printing", OFFSET(nokey), AV_OPT_TYPE_INT, {.dbl=0}, 0, 1 }, {"escape", "set escape mode", OFFSET(escape_mode_str), AV_OPT_TYPE_STRING, {.str="c"}, CHAR_MIN, CHAR_MAX }, {"e", "set escape mode", OFFSET(escape_mode_str), AV_OPT_TYPE_STRING, {.str="c"}, CHAR_MIN, CHAR_MAX }, {NULL}, }
const Writer compact_writer [static] |
Initial value:
{ .name = "compact", .priv_size = sizeof(CompactContext), .init = compact_init, .uninit = compact_uninit, .print_section_header = compact_print_section_header, .print_section_footer = compact_print_section_footer, .print_integer = compact_print_int, .print_string = compact_print_str, .show_tags = compact_show_tags, .flags = WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS, }
const Writer csv_writer [static] |
Initial value:
{ .name = "csv", .priv_size = sizeof(CompactContext), .init = csv_init, .uninit = compact_uninit, .print_section_header = compact_print_section_header, .print_section_footer = compact_print_section_footer, .print_integer = compact_print_int, .print_string = compact_print_str, .show_tags = compact_show_tags, .flags = WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS, }
const char* decimal_unit_prefixes[] = { "", "K" , "M" , "G" , "T" , "P" } [static] |
const Writer default_writer [static] |
Initial value:
{ .name = "default", .print_footer = default_print_footer, .print_chapter_header = default_print_chapter_header, .print_section_header = default_print_section_header, .print_section_footer = default_print_section_footer, .print_integer = default_print_int, .print_string = default_print_str, .show_tags = default_show_tags, .flags = WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS, }
int do_show_format = 0 [static] |
int do_show_packets = 0 [static] |
int do_show_streams = 0 [static] |
AVInputFormat* iformat = NULL [static] |
const char* input_filename [static] |
const Writer json_writer [static] |
Initial value:
{ .name = "json", .priv_size = sizeof(JSONContext), .init = json_init, .uninit = json_uninit, .print_header = json_print_header, .print_footer = json_print_footer, .print_chapter_header = json_print_chapter_header, .print_chapter_footer = json_print_chapter_footer, .print_section_header = json_print_section_header, .print_section_footer = json_print_section_footer, .print_integer = json_print_int, .print_string = json_print_str, .show_tags = json_show_tags, }
char* print_format [static] |
const int program_birth_year = 2007 |
program birth year, defined by the program for show_banner()
const char program_name[] = "ffprobe" |
const Writer* registered_writers[MAX_REGISTERED_WRITERS_NB+1] [static] |
int show_value_unit = 0 [static] |
const char* unit_bit_per_second_str = "bit/s" [static] |
const char* unit_byte_str = "byte" [static] |
Definition at line 58 of file ffprobe.c.
Referenced by show_format(), show_packet(), and value_string().
const char* unit_hertz_str = "Hz" [static] |
const char* unit_second_str = "s" [static] |
int use_byte_value_binary_prefix = 0 [static] |
int use_value_prefix = 0 [static] |
int use_value_sexagesimal_format = 0 [static] |
const AVClass writer_class [static] |
Initial value:
{ "Writer", writer_get_name, NULL, LIBAVUTIL_VERSION_INT, }