summaryrefslogtreecommitdiff
path: root/sys/winks
diff options
context:
space:
mode:
authorAndoni Morales Alastruey <ylatuya@gmail.com>2015-04-08 18:51:50 +0200
committerAndoni Morales Alastruey <ylatuya@gmail.com>2015-04-08 18:54:52 +0200
commit83a54e07fd464fa35b5460f3ccbd755a38ff89bb (patch)
tree2e0786430f50e4b2c1f61a0fa9c310ed40763d3c /sys/winks
parent7bc0fa5d705b36f0c22bea7b3b038736ce6fe94b (diff)
downloadgstreamer-plugins-bad-83a54e07fd464fa35b5460f3ccbd755a38ff89bb.tar.gz
ksvideosrc: fix support for DV devices
Diffstat (limited to 'sys/winks')
-rw-r--r--sys/winks/gstksvideodevice.c10
-rw-r--r--sys/winks/ksvideohelpers.c24
-rw-r--r--sys/winks/ksvideohelpers.h16
3 files changed, 39 insertions, 11 deletions
diff --git a/sys/winks/gstksvideodevice.c b/sys/winks/gstksvideodevice.c
index 95dec480e..560173012 100644
--- a/sys/winks/gstksvideodevice.c
+++ b/sys/winks/gstksvideodevice.c
@@ -752,14 +752,12 @@ gst_ks_video_device_set_caps (GstKsVideoDevice * self, GstCaps * caps)
if (!gst_structure_get_int (s, "width", &width) ||
!gst_structure_get_int (s, "height", &height) ||
!gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d)) {
- GST_ERROR ("Failed to get width/height/fps");
- goto error;
+ } else {
+ if (!ks_video_fixate_media_type (media_type->range,
+ media_type->format, width, height, fps_n, fps_d))
+ goto error;
}
- if (!ks_video_fixate_media_type (media_type->range,
- media_type->format, width, height, fps_n, fps_d))
- goto error;
-
if (priv->cur_media_type != NULL) {
if (media_type->format_size == priv->cur_media_type->format_size &&
memcmp (media_type->format, priv->cur_media_type->format,
diff --git a/sys/winks/ksvideohelpers.c b/sys/winks/ksvideohelpers.c
index c4f962015..156d5c85b 100644
--- a/sys/winks/ksvideohelpers.c
+++ b/sys/winks/ksvideohelpers.c
@@ -446,7 +446,8 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
guint i;
for (i = 0; i < items->Count; i++) {
- if (IsEqualGUID (&range->MajorFormat, &KSDATAFORMAT_TYPE_VIDEO)) {
+ if (IsEqualGUID (&range->MajorFormat, &MEDIATYPE_Video)
+ || IsEqualGUID (&range->MajorFormat, &MEDIATYPE_Interleaved)) {
KsVideoMediaType *entry;
gpointer src_vscc, src_format;
GstStructure *media_structure;
@@ -485,16 +486,22 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
entry->sample_size =
vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
} else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEG2Video)) {
- /* Untested and probably wrong... */
KS_DATARANGE_MPEG2_VIDEO *vr =
(KS_DATARANGE_MPEG2_VIDEO *) entry->range;
-
src_vscc = &vr->ConfigCaps;
src_format = &vr->VideoInfoHeader;
entry->format_size = sizeof (vr->VideoInfoHeader);
entry->sample_size =
vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
+ } else if (IsEqualGUID (&range->Specifier, &FORMAT_DvInfo)) {
+ KS_DATARANGE_DVVIDEO *vr = (KS_DATARANGE_DVVIDEO *) entry->range;
+
+ src_vscc = NULL;
+ src_format = &vr->DVVideoInfo;
+
+ entry->format_size = sizeof (vr->DVVideoInfo);
+ entry->sample_size = vr->DataRange.SampleSize;
} else {
gchar *guid_str;
@@ -510,19 +517,26 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
if (entry != NULL) {
g_assert (entry->sample_size != 0);
- memcpy ((gpointer) & entry->vscc, src_vscc, sizeof (entry->vscc));
+ if (src_vscc != NULL) {
+ 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);
+ range->Specifier);
if (media_structure == NULL) {
g_warning ("ks_video_format_to_structure returned NULL");
ks_video_media_type_free (entry);
entry = NULL;
+ } else if (src_vscc == NULL) {
+ entry->translated_caps = gst_caps_new_empty ();
+ gst_caps_append_structure (entry->translated_caps,
+ media_structure);
} else if (ks_video_append_video_stream_cfg_fields
(media_structure, &entry->vscc)) {
entry->translated_caps = gst_caps_new_empty ();
diff --git a/sys/winks/ksvideohelpers.h b/sys/winks/ksvideohelpers.h
index f4fb1b60a..3aa0c388b 100644
--- a/sys/winks/ksvideohelpers.h
+++ b/sys/winks/ksvideohelpers.h
@@ -51,6 +51,22 @@ struct _KsVideoMediaType
GstCaps * translated_caps;
};
+typedef struct DVINFO {
+ DWORD dwDVAAuxSrc;
+ DWORD dwDVAAuxCtl;
+ DWORD dwDVAAuxSrc1;
+ DWORD dwDVAAuxCtl1;
+ DWORD dwDVVAuxSrc;
+ DWORD dwDVVAuxCtl;
+ DWORD dwDVReserved[2];
+} DVINFO;
+
+typedef struct KS_DATARANGE_DVVIDEO {
+ KSDATARANGE DataRange;
+ DVINFO DVVideoInfo;
+} KS_DATARANGE_DVVIDEO,*PKS_DATARANGE_DVVIDEO;
+
+
GList * ks_video_device_list_sort_cameras_first (GList * devices);
KsVideoMediaType * ks_video_media_type_dup (KsVideoMediaType * media_type);