diff options
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); } |