It allows to configure how long will avformat_find_stream_info() wait to get the first timestamp.tags/n2.4
@@ -13,6 +13,9 @@ libavutil: 2014-08-09 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2014-08-xx - xxxxxxx - lavf 56.03.0 - avformat.h | |||||
Add AVFormatContext.max_ts_probe. | |||||
2014-08-13 - 8ddc326 - lavu 54.03.0 - mem.h | 2014-08-13 - 8ddc326 - lavu 54.03.0 - mem.h | ||||
Add av_strndup(). | Add av_strndup(). | ||||
@@ -1192,6 +1192,12 @@ typedef struct AVFormatContext { | |||||
int event_flags; | int event_flags; | ||||
#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. | #define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. | ||||
/** | |||||
* Maximum number of packets to read while waiting for the first timestamp. | |||||
* Decoding only. | |||||
*/ | |||||
int max_ts_probe; | |||||
/***************************************************************** | /***************************************************************** | ||||
* All fields below this line are not part of the public API. They | * All fields below this line are not part of the public API. They | ||||
* may not be used outside of libavformat and can be changed and | * may not be used outside of libavformat and can be changed and | ||||
@@ -65,6 +65,7 @@ static const AVOption avformat_options[] = { | |||||
{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, D|E, "strict"}, | {"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, D|E, "strict"}, | ||||
{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, D|E, "strict"}, | {"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, D|E, "strict"}, | ||||
{"experimental", "allow non-standardized experimental variants", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, D|E, "strict"}, | {"experimental", "allow non-standardized experimental variants", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, D|E, "strict"}, | ||||
{"max_ts_probe", "maximum number of packets to read while waiting for the first timestamp", OFFSET(max_ts_probe), AV_OPT_TYPE_INT, { .i64 = 50 }, 0, INT_MAX, D }, | |||||
{NULL}, | {NULL}, | ||||
}; | }; | ||||
@@ -2108,6 +2108,7 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) | |||||
!st->codec->extradata) | !st->codec->extradata) | ||||
break; | break; | ||||
if (st->first_dts == AV_NOPTS_VALUE && | if (st->first_dts == AV_NOPTS_VALUE && | ||||
st->codec_info_nb_frames < ic->max_ts_probe && | |||||
(st->codec->codec_type == AVMEDIA_TYPE_VIDEO || | (st->codec->codec_type == AVMEDIA_TYPE_VIDEO || | ||||
st->codec->codec_type == AVMEDIA_TYPE_AUDIO)) | st->codec->codec_type == AVMEDIA_TYPE_AUDIO)) | ||||
break; | break; | ||||
@@ -30,7 +30,7 @@ | |||||
#include "libavutil/version.h" | #include "libavutil/version.h" | ||||
#define LIBAVFORMAT_VERSION_MAJOR 56 | #define LIBAVFORMAT_VERSION_MAJOR 56 | ||||
#define LIBAVFORMAT_VERSION_MINOR 2 | |||||
#define LIBAVFORMAT_VERSION_MINOR 3 | |||||
#define LIBAVFORMAT_VERSION_MICRO 0 | #define LIBAVFORMAT_VERSION_MICRO 0 | ||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||