avformat: Add max_probe_packets option

Allows user to set maximum number of buffered packets when
probing a codec. It was a hard-coded parameter before this commit.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
pull/324/head
Andriy Gelman 5 years ago committed by Michael Niedermayer
parent 33583803e1
commit 5e3229df4c
  1. 4
      doc/formats.texi
  2. 7
      libavformat/avformat.h
  3. 2
      libavformat/internal.h
  4. 1
      libavformat/options_table.h
  5. 6
      libavformat/utils.c
  6. 2
      libavformat/version.h

@ -27,6 +27,10 @@ stream information. A higher value will enable detecting more
information in case it is dispersed into the stream, but will increase information in case it is dispersed into the stream, but will increase
latency. Must be an integer not lesser than 32. It is 5000000 by default. latency. Must be an integer not lesser than 32. It is 5000000 by default.
@item max_probe_packets @var{integer} (@emph{input})
Set the maximum number of buffered packets when probing a codec.
Default is 2500 packets.
@item packetsize @var{integer} (@emph{output}) @item packetsize @var{integer} (@emph{output})
Set packet size. Set packet size.

@ -1951,6 +1951,13 @@ typedef struct AVFormatContext {
* - decoding: set by user * - decoding: set by user
*/ */
int skip_estimate_duration_from_pts; int skip_estimate_duration_from_pts;
/**
* Maximum number of packets that can be probed
* - encoding: unused
* - decoding: set by user
*/
int max_probe_packets;
} AVFormatContext; } AVFormatContext;
#if FF_API_FORMAT_GET_SET #if FF_API_FORMAT_GET_SET

@ -33,8 +33,6 @@
#define PROBE_BUF_MIN 2048 #define PROBE_BUF_MIN 2048
#define PROBE_BUF_MAX (1 << 20) #define PROBE_BUF_MAX (1 << 20)
#define MAX_PROBE_PACKETS 2500
#ifdef DEBUG #ifdef DEBUG
# define hex_dump_debug(class, buf, size) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size) # define hex_dump_debug(class, buf, size) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size)
#else #else

@ -111,6 +111,7 @@ static const AVOption avformat_options[] = {
{"protocol_blacklist", "List of protocols that are not allowed to be used", OFFSET(protocol_blacklist), AV_OPT_TYPE_STRING, { .str = NULL }, CHAR_MIN, CHAR_MAX, D }, {"protocol_blacklist", "List of protocols that are not allowed to be used", OFFSET(protocol_blacklist), AV_OPT_TYPE_STRING, { .str = NULL }, CHAR_MIN, CHAR_MAX, D },
{"max_streams", "maximum number of streams", OFFSET(max_streams), AV_OPT_TYPE_INT, { .i64 = 1000 }, 0, INT_MAX, D }, {"max_streams", "maximum number of streams", OFFSET(max_streams), AV_OPT_TYPE_INT, { .i64 = 1000 }, 0, INT_MAX, D },
{"skip_estimate_duration_from_pts", "skip duration calculation in estimate_timings_from_pts", OFFSET(skip_estimate_duration_from_pts), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, D}, {"skip_estimate_duration_from_pts", "skip duration calculation in estimate_timings_from_pts", OFFSET(skip_estimate_duration_from_pts), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, D},
{"max_probe_packets", "Maximum number of packets to probe a codec", OFFSET(max_probe_packets), AV_OPT_TYPE_INT, { .i64 = 2500 }, 0, INT_MAX, D },
{NULL}, {NULL},
}; };

@ -363,7 +363,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st,
int i; int i;
av_log(s, AV_LOG_DEBUG, av_log(s, AV_LOG_DEBUG,
"Probe with size=%d, packets=%d detected %s with score=%d\n", "Probe with size=%d, packets=%d detected %s with score=%d\n",
pd->buf_size, MAX_PROBE_PACKETS - st->probe_packets, pd->buf_size, s->max_probe_packets - st->probe_packets,
fmt->name, score); fmt->name, score);
for (i = 0; fmt_id_type[i].name; i++) { for (i = 0; fmt_id_type[i].name; i++) {
if (!strcmp(fmt->name, fmt_id_type[i].name)) { if (!strcmp(fmt->name, fmt_id_type[i].name)) {
@ -1948,7 +1948,7 @@ void ff_read_frame_flush(AVFormatContext *s)
/* We set the current DTS to an unspecified origin. */ /* We set the current DTS to an unspecified origin. */
st->cur_dts = AV_NOPTS_VALUE; st->cur_dts = AV_NOPTS_VALUE;
st->probe_packets = MAX_PROBE_PACKETS; st->probe_packets = s->max_probe_packets;
for (j = 0; j < MAX_REORDER_DELAY + 1; j++) for (j = 0; j < MAX_REORDER_DELAY + 1; j++)
st->pts_buffer[j] = AV_NOPTS_VALUE; st->pts_buffer[j] = AV_NOPTS_VALUE;
@ -4570,7 +4570,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
st->start_time = AV_NOPTS_VALUE; st->start_time = AV_NOPTS_VALUE;
st->duration = AV_NOPTS_VALUE; st->duration = AV_NOPTS_VALUE;
st->first_dts = AV_NOPTS_VALUE; st->first_dts = AV_NOPTS_VALUE;
st->probe_packets = MAX_PROBE_PACKETS; st->probe_packets = s->max_probe_packets;
st->pts_wrap_reference = AV_NOPTS_VALUE; st->pts_wrap_reference = AV_NOPTS_VALUE;
st->pts_wrap_behavior = AV_PTS_WRAP_IGNORE; st->pts_wrap_behavior = AV_PTS_WRAP_IGNORE;

@ -32,7 +32,7 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here // Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 58 #define LIBAVFORMAT_VERSION_MAJOR 58
#define LIBAVFORMAT_VERSION_MINOR 33 #define LIBAVFORMAT_VERSION_MINOR 34
#define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \

Loading…
Cancel
Save