2006-02-27 Tim-Philipp Müller <tim at centricular dot net>
+ * plugins/elements/gsttypefindelement.c:
+ (gst_type_find_element_handle_event):
+ When we get an EOS event and have not found a type yet
+ (most likely because we had not yet accumulated
+ TYPE_FIND_MIN_SIZE of data yet), try to determine the
+ type given the data we have so far. Fixes typefinding
+ for very short streams again, most notably quicktime
+ redirections as used on Apple's trailer site (#331701).
+
+2006-02-27 Tim-Philipp Müller <tim at centricular dot net>
+
* libs/gst/base/gsttypefindhelper.c: (type_find_factory_rank_cmp),
(gst_type_find_helper):
Try typefinding factories with the highest rank first.
case MODE_TYPEFIND:
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:{
- TypeFindEntry *entry;
+ GstTypeFindProbability prob;
+ GstCaps *caps;
- entry = gst_type_find_element_get_best_possibility (typefind);
+ GST_INFO_OBJECT (typefind, "Got EOS and no type found yet");
- if (entry && entry->probability >= typefind->min_probability) {
- GST_INFO_OBJECT (typefind,
- "'%s' is the best typefind left after we got all data, using it now (probability %u)",
- GST_PLUGIN_FEATURE_NAME (entry->factory), entry->probability);
+ /* we might not have started typefinding yet because there was not
+ * enough data so far; just give it a shot now and see what we get */
+ caps = gst_type_find_helper_for_buffer (GST_OBJECT (typefind),
+ typefind->store, &prob);
+
+ if (caps && prob >= typefind->min_probability) {
g_signal_emit (typefind, gst_type_find_element_signals[HAVE_TYPE],
- 0, entry->probability, entry->caps);
+ 0, prob, caps);
} else {
- GST_ELEMENT_ERROR (typefind, STREAM, TYPE_NOT_FOUND, (NULL),
- (NULL));
+ GST_ELEMENT_ERROR (typefind, STREAM, TYPE_NOT_FOUND,
+ (NULL), (NULL));
}
+ gst_caps_replace (&caps, NULL);
stop_typefinding (typefind);
res = gst_pad_event_default (pad, event);
break;