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>tags/n4.3
@@ -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, \ | ||||