static gboolean gst_smpte_setcaps (GstPad * pad, GstCaps * caps) { GstSMPTE *smpte; GstStructure *structure; gboolean ret; smpte = GST_SMPTE (GST_PAD_PARENT (pad)); structure = gst_caps_get_structure (caps, 0); ret = gst_structure_get_int (structure, "width", &smpte->width); ret &= gst_structure_get_int (structure, "height", &smpte->height); ret &= gst_structure_get_fraction (structure, "framerate", &smpte->fps_num, &smpte->fps_denom); if (!ret) return FALSE; /* for backward compat, we store these here */ smpte->fps = ((gdouble) smpte->fps_num) / smpte->fps_denom; /* figure out the duration in frames */ smpte->end_position = gst_util_uint64_scale (smpte->duration, smpte->fps_num, GST_SECOND * smpte->fps_denom); GST_DEBUG_OBJECT (smpte, "duration: %d frames", smpte->end_position); ret = gst_smpte_update_mask (smpte, smpte->type, smpte->invert, smpte->depth, smpte->width, smpte->height); return ret; }
static gboolean gst_smpte_setcaps (GstPad * pad, GstCaps * caps) { GstSMPTE *smpte; gboolean ret; GstVideoInfo vinfo; smpte = GST_SMPTE (GST_PAD_PARENT (pad)); gst_video_info_init (&vinfo); if (!gst_video_info_from_caps (&vinfo, caps)) return FALSE; smpte->width = GST_VIDEO_INFO_WIDTH (&vinfo); smpte->height = GST_VIDEO_INFO_HEIGHT (&vinfo); smpte->fps_num = GST_VIDEO_INFO_FPS_N (&vinfo); smpte->fps_denom = GST_VIDEO_INFO_FPS_D (&vinfo); /* figure out the duration in frames */ smpte->end_position = gst_util_uint64_scale (smpte->duration, smpte->fps_num, GST_SECOND * smpte->fps_denom); GST_DEBUG_OBJECT (smpte, "duration: %d frames", smpte->end_position); ret = gst_smpte_update_mask (smpte, smpte->type, smpte->invert, smpte->depth, smpte->width, smpte->height); if (pad == smpte->sinkpad1) { GST_DEBUG_OBJECT (smpte, "setting pad1 info"); smpte->vinfo1 = vinfo; } else { GST_DEBUG_OBJECT (smpte, "setting pad2 info"); smpte->vinfo2 = vinfo; } return ret; }