You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
avprobe: add local per-stream state
This will be useful in the following commits.
This commit is contained in:
20
avprobe.c
20
avprobe.c
@@ -32,8 +32,15 @@
|
|||||||
#include "libavdevice/avdevice.h"
|
#include "libavdevice/avdevice.h"
|
||||||
#include "cmdutils.h"
|
#include "cmdutils.h"
|
||||||
|
|
||||||
|
typedef struct InputStream {
|
||||||
|
AVStream *st;
|
||||||
|
} InputStream;
|
||||||
|
|
||||||
typedef struct InputFile {
|
typedef struct InputFile {
|
||||||
AVFormatContext *fmt_ctx;
|
AVFormatContext *fmt_ctx;
|
||||||
|
|
||||||
|
InputStream *streams;
|
||||||
|
int nb_streams;
|
||||||
} InputFile;
|
} InputFile;
|
||||||
|
|
||||||
const char program_name[] = "avprobe";
|
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);
|
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 */
|
/* bind a decoder to each input stream */
|
||||||
for (i = 0; i < fmt_ctx->nb_streams; i++) {
|
for (i = 0; i < fmt_ctx->nb_streams; i++) {
|
||||||
|
InputStream *ist = &ifile->streams[i];
|
||||||
AVStream *stream = fmt_ctx->streams[i];
|
AVStream *stream = fmt_ctx->streams[i];
|
||||||
AVCodec *codec;
|
AVCodec *codec;
|
||||||
|
|
||||||
|
ist->st = stream;
|
||||||
|
|
||||||
if (stream->codec->codec_id == AV_CODEC_ID_PROBE) {
|
if (stream->codec->codec_id == AV_CODEC_ID_PROBE) {
|
||||||
fprintf(stderr, "Failed to probe codec for input stream %d\n",
|
fprintf(stderr, "Failed to probe codec for input stream %d\n",
|
||||||
stream->index);
|
stream->index);
|
||||||
@@ -820,6 +836,10 @@ static void close_input_file(InputFile *ifile)
|
|||||||
|
|
||||||
avcodec_close(stream->codec);
|
avcodec_close(stream->codec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
av_freep(&ifile->streams);
|
||||||
|
ifile->nb_streams = 0;
|
||||||
|
|
||||||
avformat_close_input(&ifile->fmt_ctx);
|
avformat_close_input(&ifile->fmt_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user