<html><head></head><body><div style="color:#000; background-color:#fff; font-family:lucida console, sans-serif;font-size:13px"><div id="yui_3_16_0_ym19_1_1477214447617_9204">Hi,</div><div id="yui_3_16_0_ym19_1_1477214447617_9238"><br></div><div id="yui_3_16_0_ym19_1_1477214447617_9239">The opencv plugins has a utility method to extract the number of video channels and depth from caps (see code below).</div><div id="yui_3_16_0_ym19_1_1477214447617_9266"><br></div><div id="yui_3_16_0_ym19_1_1477214447617_9240">Problem is that it fails for sparse formats (BGRx, ...) where it reports 3 channels of depth 8.</div><div id="yui_3_16_0_ym19_1_1477214447617_9288">For opencv to work correctly downstream, it should report 4 channels.</div><div id="yui_3_16_0_ym19_1_1477214447617_9337"><br></div><div id="yui_3_16_0_ym19_1_1477214447617_9241">I can't find a simple way to detect that the caps/video info is sparse and has one additional "channel".</div><div id="yui_3_16_0_ym19_1_1477214447617_9382"><br></div><div id="yui_3_16_0_ym19_1_1477214447617_9376">Philippe.<br></div><div id="yui_3_16_0_ym19_1_1477214447617_9242"><br></div><div id="yui_3_16_0_ym19_1_1477214447617_9031" dir="ltr">gboolean<br id="yui_3_16_0_ym19_1_1477214447617_9132">gst_opencv_parse_iplimage_params_from_caps (GstCaps * caps, gint * width,<br id="yui_3_16_0_ym19_1_1477214447617_9133"> gint * height, gint * ipldepth, gint * channels, GError ** err)<br id="yui_3_16_0_ym19_1_1477214447617_9134">{<br id="yui_3_16_0_ym19_1_1477214447617_9135"> GstVideoInfo info;<br id="yui_3_16_0_ym19_1_1477214447617_9136"> gint depth = 0;<br id="yui_3_16_0_ym19_1_1477214447617_9137"> guint i;<br id="yui_3_16_0_ym19_1_1477214447617_9138"><br id="yui_3_16_0_ym19_1_1477214447617_9139"> if (!gst_video_info_from_caps (&info, caps)) {<br id="yui_3_16_0_ym19_1_1477214447617_9140"> GST_ERROR ("Failed to get the videoinfo from caps");<br id="yui_3_16_0_ym19_1_1477214447617_9141"> g_set_error (err, GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,<br id="yui_3_16_0_ym19_1_1477214447617_9142"> "No width/height/depth/channels in caps");<br id="yui_3_16_0_ym19_1_1477214447617_9143"> return FALSE;<br id="yui_3_16_0_ym19_1_1477214447617_9144"> }<br id="yui_3_16_0_ym19_1_1477214447617_9145"><br id="yui_3_16_0_ym19_1_1477214447617_9146"> *width = GST_VIDEO_INFO_WIDTH (&info);<br id="yui_3_16_0_ym19_1_1477214447617_9147"> *height = GST_VIDEO_INFO_HEIGHT (&info);<br id="yui_3_16_0_ym19_1_1477214447617_9148"> if (GST_VIDEO_INFO_IS_RGB (&info))<br id="yui_3_16_0_ym19_1_1477214447617_9149"> *channels = 3;<br id="yui_3_16_0_ym19_1_1477214447617_9150"> else if (GST_VIDEO_INFO_IS_GRAY (&info))<br id="yui_3_16_0_ym19_1_1477214447617_9151"> *channels = 1;<br id="yui_3_16_0_ym19_1_1477214447617_9152"> else {<br id="yui_3_16_0_ym19_1_1477214447617_9153"> g_set_error (err, GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,<br id="yui_3_16_0_ym19_1_1477214447617_9154"> "Unsupported caps %s", gst_caps_to_string (caps));<br id="yui_3_16_0_ym19_1_1477214447617_9155"> return FALSE;<br id="yui_3_16_0_ym19_1_1477214447617_9156"> }<br id="yui_3_16_0_ym19_1_1477214447617_9157"><br id="yui_3_16_0_ym19_1_1477214447617_9158"> for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (&info); i++) {<br id="yui_3_16_0_ym19_1_1477214447617_9159"> depth += GST_VIDEO_INFO_COMP_DEPTH (&info, i);<br id="yui_3_16_0_ym19_1_1477214447617_9160"> }<br id="yui_3_16_0_ym19_1_1477214447617_9162"><br id="yui_3_16_0_ym19_1_1477214447617_9163"> if (depth / *channels == 8) {<br id="yui_3_16_0_ym19_1_1477214447617_9164"> /* TODO signdness? */<br id="yui_3_16_0_ym19_1_1477214447617_9165"> *ipldepth = IPL_DEPTH_8U;<br id="yui_3_16_0_ym19_1_1477214447617_9166"> } else if (depth / *channels == 16) {<br id="yui_3_16_0_ym19_1_1477214447617_9167"> *ipldepth = IPL_DEPTH_16U;<br id="yui_3_16_0_ym19_1_1477214447617_9168"> } else {<br id="yui_3_16_0_ym19_1_1477214447617_9169"> g_set_error (err, GST_CORE_ERROR, GST_CORE_ERROR_NEGOTIATION,<br id="yui_3_16_0_ym19_1_1477214447617_9171"> "Unsupported depth/channels %d/%d", depth, *channels);<br id="yui_3_16_0_ym19_1_1477214447617_9172"> return FALSE;<br id="yui_3_16_0_ym19_1_1477214447617_9173"> }<br id="yui_3_16_0_ym19_1_1477214447617_9179"><br id="yui_3_16_0_ym19_1_1477214447617_9180"> return TRUE;<br id="yui_3_16_0_ym19_1_1477214447617_9181">}<br></div><div id="yui_3_16_0_ym19_1_1477214447617_9030"><br></div></div></body></html>