mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
winks: ignore unsupported formats
This commit is contained in:
parent
b88b25ab9b
commit
1f6a6d2430
3 changed files with 71 additions and 45 deletions
|
@ -300,6 +300,15 @@ ks_object_set_connection_state (HANDLE handle, KSSTATE state)
|
|||
KSPROPERTY_CONNECTION_STATE, &state, sizeof (state));
|
||||
}
|
||||
|
||||
gchar *
|
||||
ks_guid_to_string (const GUID * guid)
|
||||
{
|
||||
return g_strdup_printf ("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
|
||||
guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1],
|
||||
guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5],
|
||||
guid->Data4[6], guid->Data4[7]);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
ks_state_to_string (KSSTATE state)
|
||||
{
|
||||
|
@ -464,8 +473,5 @@ ks_property_set_to_string (const GUID * guid)
|
|||
return g_strdup_printf ("KSPROPSETID_%s", known_property_sets[i].name);
|
||||
}
|
||||
|
||||
return g_strdup_printf ("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
|
||||
guid->Data1, guid->Data2, guid->Data3, guid->Data4[0], guid->Data4[1],
|
||||
guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5],
|
||||
guid->Data4[6], guid->Data4[7]);
|
||||
return ks_guid_to_string (guid);
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ gboolean ks_object_get_supported_property_sets (HANDLE handle, GUID ** propsets,
|
|||
|
||||
gboolean ks_object_set_connection_state (HANDLE handle, KSSTATE state);
|
||||
|
||||
gchar * ks_guid_to_string (const GUID * guid);
|
||||
const gchar * ks_state_to_string (KSSTATE state);
|
||||
gchar * ks_options_flags_to_string (gulong flags);
|
||||
gchar * ks_property_set_to_string (const GUID * guid);
|
||||
|
|
|
@ -325,7 +325,7 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
|
|||
KSPROPERTY_PIN_CATEGORY, &pin_cat, sizeof (pin_cat)))
|
||||
continue;
|
||||
|
||||
GST_DEBUG ("pin[%d]: pin_comm=%d, pin_flow=%d", pin_id, pin_comm, pin_flow);
|
||||
GST_DEBUG ("pin[%u]: pin_comm=%d, pin_flow=%d", pin_id, pin_comm, pin_flow);
|
||||
|
||||
if (pin_flow == KSPIN_DATAFLOW_OUT &&
|
||||
memcmp (&pin_cat, &PINNAME_CAPTURE, sizeof (GUID)) == 0) {
|
||||
|
@ -386,37 +386,48 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
|
|||
entry->format_size = sizeof (vr->VideoInfoHeader);
|
||||
entry->sample_size =
|
||||
vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
|
||||
} else
|
||||
g_assert_not_reached ();
|
||||
|
||||
g_assert (entry->sample_size != 0);
|
||||
|
||||
memcpy ((gpointer) & entry->vscc, src_vscc, sizeof (entry->vscc));
|
||||
|
||||
entry->format = g_malloc (entry->format_size);
|
||||
memcpy (entry->format, src_format, entry->format_size);
|
||||
|
||||
media_structure =
|
||||
ks_video_format_to_structure (range->SubFormat,
|
||||
range->MajorFormat);
|
||||
|
||||
if (media_structure == NULL) {
|
||||
g_warning ("ks_video_format_to_structure returned NULL");
|
||||
ks_video_media_type_free (entry);
|
||||
entry = NULL;
|
||||
} else if (ks_video_append_video_stream_cfg_fields (media_structure,
|
||||
&entry->vscc)) {
|
||||
entry->translated_caps = gst_caps_new_empty ();
|
||||
gst_caps_append_structure (entry->translated_caps,
|
||||
media_structure);
|
||||
} else {
|
||||
gst_structure_free (media_structure);
|
||||
gchar *guid_str;
|
||||
|
||||
guid_str = ks_guid_to_string (&range->Specifier);
|
||||
GST_DEBUG ("pin[%u]: ignoring unknown specifier GUID %s",
|
||||
pin_id, guid_str);
|
||||
g_free (guid_str);
|
||||
|
||||
ks_video_media_type_free (entry);
|
||||
entry = NULL;
|
||||
}
|
||||
|
||||
if (entry != NULL)
|
||||
ret = g_list_prepend (ret, entry);
|
||||
if (entry != NULL) {
|
||||
g_assert (entry->sample_size != 0);
|
||||
|
||||
memcpy ((gpointer) & entry->vscc, src_vscc, sizeof (entry->vscc));
|
||||
|
||||
entry->format = g_malloc (entry->format_size);
|
||||
memcpy (entry->format, src_format, entry->format_size);
|
||||
|
||||
media_structure =
|
||||
ks_video_format_to_structure (range->SubFormat,
|
||||
range->MajorFormat);
|
||||
|
||||
if (media_structure == NULL) {
|
||||
g_warning ("ks_video_format_to_structure returned NULL");
|
||||
ks_video_media_type_free (entry);
|
||||
entry = NULL;
|
||||
} else if (ks_video_append_video_stream_cfg_fields
|
||||
(media_structure, &entry->vscc)) {
|
||||
entry->translated_caps = gst_caps_new_empty ();
|
||||
gst_caps_append_structure (entry->translated_caps,
|
||||
media_structure);
|
||||
} else {
|
||||
gst_structure_free (media_structure);
|
||||
ks_video_media_type_free (entry);
|
||||
entry = NULL;
|
||||
}
|
||||
|
||||
if (entry != NULL)
|
||||
ret = g_list_prepend (ret, entry);
|
||||
}
|
||||
}
|
||||
|
||||
/* REVISIT: Each KSDATARANGE should start on a 64-bit boundary */
|
||||
|
@ -481,39 +492,47 @@ ks_video_fixate_media_type (const KSDATARANGE * range,
|
|||
if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo)) {
|
||||
KS_VIDEOINFOHEADER *vih = (KS_VIDEOINFOHEADER *) format;
|
||||
|
||||
/* FIXME: Need to figure out how to properly handle ranges */
|
||||
if (vih->bmiHeader.biWidth != width || vih->bmiHeader.biHeight != height)
|
||||
return FALSE;
|
||||
|
||||
vih->AvgTimePerFrame = gst_util_uint64_scale_int (10000000, fps_d, fps_n);
|
||||
vih->dwBitRate = dwRate * vih->bmiHeader.biBitCount;
|
||||
|
||||
g_assert (vih->bmiHeader.biWidth == width);
|
||||
g_assert (vih->bmiHeader.biHeight == height);
|
||||
} else if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo2)) {
|
||||
KS_VIDEOINFOHEADER2 *vih = (KS_VIDEOINFOHEADER2 *) format;
|
||||
|
||||
/* FIXME: see above */
|
||||
if (vih->bmiHeader.biWidth != width || vih->bmiHeader.biHeight != height)
|
||||
return FALSE;
|
||||
|
||||
vih->AvgTimePerFrame = gst_util_uint64_scale_int (10000000, fps_d, fps_n);
|
||||
vih->dwBitRate = dwRate * vih->bmiHeader.biBitCount;
|
||||
|
||||
g_assert (vih->bmiHeader.biWidth == width);
|
||||
g_assert (vih->bmiHeader.biHeight == height);
|
||||
} else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEGVideo)) {
|
||||
KS_MPEG1VIDEOINFO *vih = (KS_MPEG1VIDEOINFO *) format;
|
||||
|
||||
/* FIXME: see above */
|
||||
if (vih->hdr.bmiHeader.biWidth != width ||
|
||||
vih->hdr.bmiHeader.biHeight != height)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
vih->hdr.AvgTimePerFrame =
|
||||
gst_util_uint64_scale_int (10000000, fps_d, fps_n);
|
||||
vih->hdr.dwBitRate = dwRate * vih->hdr.bmiHeader.biBitCount;
|
||||
|
||||
/* FIXME: set height and width? */
|
||||
g_assert (vih->hdr.bmiHeader.biWidth == width);
|
||||
g_assert (vih->hdr.bmiHeader.biHeight == height);
|
||||
} else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEG2Video)) {
|
||||
KS_MPEGVIDEOINFO2 *vih = (KS_MPEGVIDEOINFO2 *) format;
|
||||
|
||||
/* FIXME: see above */
|
||||
if (vih->hdr.bmiHeader.biWidth != width ||
|
||||
vih->hdr.bmiHeader.biHeight != height)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
vih->hdr.AvgTimePerFrame =
|
||||
gst_util_uint64_scale_int (10000000, fps_d, fps_n);
|
||||
vih->hdr.dwBitRate = dwRate * vih->hdr.bmiHeader.biBitCount;
|
||||
|
||||
/* FIXME: set height and width? */
|
||||
g_assert (vih->hdr.bmiHeader.biWidth == width);
|
||||
g_assert (vih->hdr.bmiHeader.biHeight == height);
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue