static gboolean gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps) { gboolean res; gint width, height, rate_denominator, rate_numerator; struct fourcc_list_struct *fourcc; GstVideoTestSrc *videotestsrc; videotestsrc = GST_VIDEO_TEST_SRC (bsrc); res = gst_video_test_src_parse_caps (caps, &width, &height, &rate_numerator, &rate_denominator, &fourcc); if (res) { /* looks ok here */ videotestsrc->fourcc = fourcc; videotestsrc->width = width; videotestsrc->height = height; videotestsrc->rate_numerator = rate_numerator; videotestsrc->rate_denominator = rate_denominator; videotestsrc->bpp = videotestsrc->fourcc->bitspp; GST_DEBUG_OBJECT (videotestsrc, "size %dx%d, %d/%d fps", videotestsrc->width, videotestsrc->height, videotestsrc->rate_numerator, videotestsrc->rate_denominator); } return res; }
static gboolean gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps) { const GstStructure *structure; GstVideoTestSrc *videotestsrc; GstVideoInfo info; videotestsrc = GST_VIDEO_TEST_SRC (bsrc); structure = gst_caps_get_structure (caps, 0); if (gst_structure_has_name (structure, "video/x-raw")) { /* we can use the parsing code */ if (!gst_video_info_from_caps (&info, caps)) goto parse_failed; } else if (gst_structure_has_name (structure, "video/x-bayer")) { gint x_inv = 0, y_inv = 0; gst_video_info_init (&info); info.finfo = gst_video_format_get_info (GST_VIDEO_FORMAT_GRAY8); if (!gst_video_test_src_parse_caps (caps, &info.width, &info.height, &info.fps_n, &info.fps_d, &info.colorimetry, &x_inv, &y_inv)) goto parse_failed; info.size = GST_ROUND_UP_4 (info.width) * info.height; info.stride[0] = GST_ROUND_UP_4 (info.width); videotestsrc->bayer = TRUE; videotestsrc->x_invert = x_inv; videotestsrc->y_invert = y_inv; } /* looks ok here */ videotestsrc->info = info; GST_DEBUG_OBJECT (videotestsrc, "size %dx%d, %d/%d fps", info.width, info.height, info.fps_n, info.fps_d); g_free (videotestsrc->tmpline); g_free (videotestsrc->tmpline2); g_free (videotestsrc->tmpline_u8); g_free (videotestsrc->tmpline_u16); videotestsrc->tmpline_u8 = g_malloc (info.width + 8); videotestsrc->tmpline = g_malloc ((info.width + 8) * 4); videotestsrc->tmpline2 = g_malloc ((info.width + 8) * 4); videotestsrc->tmpline_u16 = g_malloc ((info.width + 16) * 8); videotestsrc->accum_rtime += videotestsrc->running_time; videotestsrc->accum_frames += videotestsrc->n_frames; videotestsrc->running_time = 0; videotestsrc->n_frames = 0; return TRUE; /* ERRORS */ parse_failed: { GST_DEBUG_OBJECT (bsrc, "failed to parse caps"); return FALSE; } }