diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-02-24 15:02:48 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-02-26 09:15:20 +0100 |
commit | 567d6d5f9d1400f00445183b3477391f58979aa3 (patch) | |
tree | 517567efb79b0896f5fc777fa428730f3baa0e98 /avprobe.c | |
parent | c9478410c68c04261f9cfcd80474607e50bd1852 (diff) |
avprobe: add local per-stream state
This will be useful in the following commits.
Diffstat (limited to 'avprobe.c')
-rw-r--r-- | avprobe.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -32,8 +32,15 @@ #include "libavdevice/avdevice.h" #include "cmdutils.h" +typedef struct InputStream { + AVStream *st; +} InputStream; + typedef struct InputFile { AVFormatContext *fmt_ctx; + + InputStream *streams; + int nb_streams; } InputFile; const char program_name[] = "avprobe"; @@ -787,11 +794,20 @@ static int open_input_file(InputFile *ifile, const char *filename) av_dump_format(fmt_ctx, 0, filename, 0); + ifile->streams = av_mallocz_array(fmt_ctx->nb_streams, + sizeof(*ifile->streams)); + if (!ifile->streams) + exit(1); + ifile->nb_streams = fmt_ctx->nb_streams; + /* bind a decoder to each input stream */ for (i = 0; i < fmt_ctx->nb_streams; i++) { + InputStream *ist = &ifile->streams[i]; AVStream *stream = fmt_ctx->streams[i]; AVCodec *codec; + ist->st = stream; + if (stream->codec->codec_id == AV_CODEC_ID_PROBE) { fprintf(stderr, "Failed to probe codec for input stream %d\n", stream->index); @@ -820,6 +836,10 @@ static void close_input_file(InputFile *ifile) avcodec_close(stream->codec); } + + av_freep(&ifile->streams); + ifile->nb_streams = 0; + avformat_close_input(&ifile->fmt_ctx); } |