mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-16 04:15:51 +00:00
typefinding: add typefinder for WAP WBMP bitmaps
https://bugzilla.gnome.org/show_bug.cgi?id=651294
This commit is contained in:
parent
5c97aa2e5c
commit
d10a7b439b
1 changed files with 57 additions and 0 deletions
|
@ -4007,6 +4007,61 @@ windows_icon_typefind (GstTypeFind * find, gpointer user_data)
|
|||
"image/x-icon", NULL);
|
||||
}
|
||||
|
||||
/*** WAP WBMP typefinder ***/
|
||||
|
||||
static void
|
||||
wbmp_typefind (GstTypeFind * find, gpointer user_data)
|
||||
{
|
||||
guint8 *data;
|
||||
gint64 datalen;
|
||||
guint w, h, size;
|
||||
|
||||
/* http://en.wikipedia.org/wiki/Wireless_Application_Protocol_Bitmap_Format */
|
||||
datalen = gst_type_find_get_length (find);
|
||||
if (datalen == 0)
|
||||
return;
|
||||
|
||||
data = gst_type_find_peek (find, 0, 5);
|
||||
if (data == NULL)
|
||||
return;
|
||||
|
||||
/* want 0x00 0x00 at start */
|
||||
if (*data++ != 0 || *data++ != 0)
|
||||
return;
|
||||
|
||||
/* min header size */
|
||||
size = 4;
|
||||
|
||||
/* let's assume max width/height is 65536 */
|
||||
w = *data++;
|
||||
if ((w & 0x80)) {
|
||||
w = (w << 8) | *data++;
|
||||
if ((w & 0x80))
|
||||
return;
|
||||
++size;
|
||||
data = gst_type_find_peek (find, 4, 2);
|
||||
if (data == NULL)
|
||||
return;
|
||||
}
|
||||
h = *data++;
|
||||
if ((h & 0x80)) {
|
||||
h = (h << 8) | *data++;
|
||||
if ((h & 0x80))
|
||||
return;
|
||||
++size;
|
||||
}
|
||||
|
||||
if (w == 0 || h == 0)
|
||||
return;
|
||||
|
||||
/* now add bitmap size */
|
||||
size += h * (GST_ROUND_UP_8 (w) / 8);
|
||||
|
||||
if (datalen == size) {
|
||||
gst_type_find_suggest_simple (find, GST_TYPE_FIND_POSSIBLE - 10,
|
||||
"image/vnd.wap.wbmp", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*** DEGAS Atari images (also to avoid false positives, see #625129) ***/
|
||||
static void
|
||||
|
@ -4522,6 +4577,8 @@ plugin_init (GstPlugin * plugin)
|
|||
TYPE_FIND_REGISTER_START_WITH (plugin, "image/vnd.adobe.photoshop",
|
||||
GST_RANK_SECONDARY, psd_exts, "8BPS\000\001\000\000\000\000", 10,
|
||||
GST_TYPE_FIND_LIKELY);
|
||||
TYPE_FIND_REGISTER (plugin, "image/vnd.wap.wbmp", GST_RANK_MARGINAL,
|
||||
wbmp_typefind, NULL, NULL, NULL, NULL);
|
||||
TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-yuv4mpeg",
|
||||
GST_RANK_SECONDARY, y4m_exts, "YUV4MPEG2 ", 10, GST_TYPE_FIND_LIKELY);
|
||||
TYPE_FIND_REGISTER (plugin, "image/x-icon", GST_RANK_MARGINAL,
|
||||
|
|
Loading…
Reference in a new issue