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
@ -4007,6 +4007,61 @@ windows_icon_typefind (GstTypeFind * find, gpointer user_data)
|
|||||||
"image/x-icon", NULL);
|
"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) ***/
|
/*** DEGAS Atari images (also to avoid false positives, see #625129) ***/
|
||||||
static void
|
static void
|
||||||
@ -4522,6 +4577,8 @@ plugin_init (GstPlugin * plugin)
|
|||||||
TYPE_FIND_REGISTER_START_WITH (plugin, "image/vnd.adobe.photoshop",
|
TYPE_FIND_REGISTER_START_WITH (plugin, "image/vnd.adobe.photoshop",
|
||||||
GST_RANK_SECONDARY, psd_exts, "8BPS\000\001\000\000\000\000", 10,
|
GST_RANK_SECONDARY, psd_exts, "8BPS\000\001\000\000\000\000", 10,
|
||||||
GST_TYPE_FIND_LIKELY);
|
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",
|
TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-yuv4mpeg",
|
||||||
GST_RANK_SECONDARY, y4m_exts, "YUV4MPEG2 ", 10, GST_TYPE_FIND_LIKELY);
|
GST_RANK_SECONDARY, y4m_exts, "YUV4MPEG2 ", 10, GST_TYPE_FIND_LIKELY);
|
||||||
TYPE_FIND_REGISTER (plugin, "image/x-icon", GST_RANK_MARGINAL,
|
TYPE_FIND_REGISTER (plugin, "image/x-icon", GST_RANK_MARGINAL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user