mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 04:22:27 +00:00
baseparse: post tag list when avg bitrate changes at least 2%
Watching videos with variant bitrate is common to have delta more than 10 kbps, resulting in tag list spam. Instead of relying on fixed 10 kpbs delta, it is better to calculale the difference in percentage and update tag list only when bitrate changes more than 2%. https://bugzilla.gnome.org/show_bug.cgi?id=759055
This commit is contained in:
parent
bcbe201e02
commit
d10c488d63
1 changed files with 12 additions and 9 deletions
|
@ -219,6 +219,9 @@
|
|||
#define MIN_FRAMES_TO_POST_BITRATE 10
|
||||
#define TARGET_DIFFERENCE (20 * GST_SECOND)
|
||||
#define MAX_INDEX_ENTRIES 4096
|
||||
#define UPDATE_THRESHOLD 2
|
||||
|
||||
#define ABSDIFF(a,b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_base_parse_debug);
|
||||
#define GST_CAT_DEFAULT gst_base_parse_debug
|
||||
|
@ -1691,11 +1694,8 @@ gst_base_parse_update_duration (GstBaseParse * parse)
|
|||
static void
|
||||
gst_base_parse_update_bitrates (GstBaseParse * parse, GstBaseParseFrame * frame)
|
||||
{
|
||||
/* Only update the tag on a 10 kbps delta */
|
||||
static const gint update_threshold = 10000;
|
||||
|
||||
guint64 data_len, frame_dur;
|
||||
gint overhead, frame_bitrate, old_avg_bitrate;
|
||||
gint overhead, frame_bitrate;
|
||||
GstBuffer *buffer = frame->buffer;
|
||||
|
||||
overhead = frame->overhead;
|
||||
|
@ -1755,11 +1755,14 @@ gst_base_parse_update_bitrates (GstBaseParse * parse, GstBaseParseFrame * frame)
|
|||
parse->priv->tags_changed = TRUE;
|
||||
}
|
||||
|
||||
old_avg_bitrate = parse->priv->posted_avg_bitrate;
|
||||
if (((gint) (old_avg_bitrate - parse->priv->avg_bitrate) > update_threshold
|
||||
|| (gint) (parse->priv->avg_bitrate - old_avg_bitrate) >
|
||||
update_threshold) && parse->priv->post_avg_bitrate)
|
||||
parse->priv->tags_changed = TRUE;
|
||||
/* Only update the tag on a 2% change */
|
||||
if (parse->priv->post_avg_bitrate && parse->priv->avg_bitrate) {
|
||||
guint64 diffprev = gst_util_uint64_scale_int (100,
|
||||
ABSDIFF (parse->priv->avg_bitrate, parse->priv->posted_avg_bitrate),
|
||||
parse->priv->avg_bitrate);
|
||||
if (diffprev >= UPDATE_THRESHOLD)
|
||||
parse->priv->tags_changed = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue