summaryrefslogtreecommitdiff
path: root/avprobe.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-02-24 15:02:48 +0100
committerAnton Khirnov <anton@khirnov.net>2016-02-26 09:15:20 +0100
commit567d6d5f9d1400f00445183b3477391f58979aa3 (patch)
tree517567efb79b0896f5fc777fa428730f3baa0e98 /avprobe.c
parentc9478410c68c04261f9cfcd80474607e50bd1852 (diff)
avprobe: add local per-stream state
This will be useful in the following commits.
Diffstat (limited to 'avprobe.c')
-rw-r--r--avprobe.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/avprobe.c b/avprobe.c
index b395e93aba..189574f85b 100644
--- a/avprobe.c
+++ b/avprobe.c
@@ -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);
}