mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
avformat: Do not search through the AVOption table for a option not in it repeatedly on each packet
This search takes alot of time especially when compared with small packets 46631 decicycles -> 15719 decicycles in read_frame_internal() for amr-nb in 3gp Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
2e069f6b69
commit
6265f0b4e1
@ -1407,12 +1407,15 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
}
|
||||
|
||||
av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
|
||||
if (metadata) {
|
||||
s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
|
||||
av_dict_copy(&s->metadata, metadata, 0);
|
||||
av_dict_free(&metadata);
|
||||
av_opt_set_dict_val(s, "metadata", NULL, AV_OPT_SEARCH_CHILDREN);
|
||||
if (!si->metafree) {
|
||||
int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
|
||||
if (metadata) {
|
||||
s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
|
||||
av_dict_copy(&s->metadata, metadata, 0);
|
||||
av_dict_free(&metadata);
|
||||
av_opt_set_dict_val(s, "metadata", NULL, AV_OPT_SEARCH_CHILDREN);
|
||||
}
|
||||
si->metafree = metaret == AVERROR_OPTION_NOT_FOUND;
|
||||
}
|
||||
|
||||
if (s->debug & FF_FDEBUG_TS)
|
||||
|
@ -183,6 +183,11 @@ typedef struct FFFormatContext {
|
||||
* Set if chapter ids are strictly monotonic.
|
||||
*/
|
||||
int chapter_ids_monotonic;
|
||||
|
||||
/**
|
||||
* Contexts and child contexts do not contain a metadata option
|
||||
*/
|
||||
int metafree;
|
||||
} FFFormatContext;
|
||||
|
||||
static av_always_inline FFFormatContext *ffformatcontext(AVFormatContext *s)
|
||||
|
Loading…
Reference in New Issue
Block a user