<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>