splitfilesrc: Implement binary search in find_part_for_offset
Implement binary search using gst_util_array_binary_search https://bugzilla.gnome.org/show_bug.cgi?id=749690
This commit is contained in:
parent
565cd49643
commit
d3997773fc
@ -368,24 +368,37 @@ gst_split_file_src_stop (GstBaseSrc * basesrc)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
gst_split_file_src_part_search (GstFilePart * part, guint64 * offset,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
if (*offset > part->stop)
|
||||||
|
return -1; /* The target is after this part */
|
||||||
|
else if (*offset < part->start)
|
||||||
|
return 1; /* The target is before this part */
|
||||||
|
else
|
||||||
|
return 0; /* This is the target part */
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_split_file_src_find_part_for_offset (GstSplitFileSrc * src, guint64 offset,
|
gst_split_file_src_find_part_for_offset (GstSplitFileSrc * src, guint64 offset,
|
||||||
guint * part_number)
|
guint * part_number)
|
||||||
{
|
{
|
||||||
|
gboolean res = TRUE;
|
||||||
GstFilePart *part;
|
GstFilePart *part;
|
||||||
guint i;
|
|
||||||
|
|
||||||
/* TODO: could use gst_util_array_binary_search() here */
|
part =
|
||||||
part = src->parts;
|
gst_util_array_binary_search (src->parts, src->num_parts,
|
||||||
for (i = 0; i < src->num_parts; ++i) {
|
sizeof (GstFilePart),
|
||||||
if (offset >= part->start && offset <= part->stop) {
|
(GCompareDataFunc) gst_split_file_src_part_search,
|
||||||
*part_number = i;
|
GST_SEARCH_MODE_AFTER, &offset, NULL);
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
++part;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
if (part)
|
||||||
|
*part_number = part - src->parts;
|
||||||
|
else
|
||||||
|
res = FALSE;
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
Loading…
x
Reference in New Issue
Block a user