1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +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:
Michael Niedermayer
2022-03-25 23:51:29 +01:00
parent 2e069f6b69
commit 6265f0b4e1
2 changed files with 14 additions and 6 deletions

View File

@@ -1407,12 +1407,15 @@ FF_ENABLE_DEPRECATION_WARNINGS
} }
} }
av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata); if (!si->metafree) {
if (metadata) { int metaret = av_opt_get_dict_val(s, "metadata", AV_OPT_SEARCH_CHILDREN, &metadata);
s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED; if (metadata) {
av_dict_copy(&s->metadata, metadata, 0); s->event_flags |= AVFMT_EVENT_FLAG_METADATA_UPDATED;
av_dict_free(&metadata); av_dict_copy(&s->metadata, metadata, 0);
av_opt_set_dict_val(s, "metadata", NULL, AV_OPT_SEARCH_CHILDREN); 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) if (s->debug & FF_FDEBUG_TS)

View File

@@ -183,6 +183,11 @@ typedef struct FFFormatContext {
* Set if chapter ids are strictly monotonic. * Set if chapter ids are strictly monotonic.
*/ */
int chapter_ids_monotonic; int chapter_ids_monotonic;
/**
* Contexts and child contexts do not contain a metadata option
*/
int metafree;
} FFFormatContext; } FFFormatContext;
static av_always_inline FFFormatContext *ffformatcontext(AVFormatContext *s) static av_always_inline FFFormatContext *ffformatcontext(AVFormatContext *s)