static void dvb_base_bin_task (DvbBaseBin * basebin) { gint pollres; GST_DEBUG_OBJECT (basebin, "In task"); /* If we haven't tried to open the cam, try now */ if (G_UNLIKELY (basebin->trycam)) dvb_base_bin_init_cam (basebin); /* poll with timeout */ pollres = gst_poll_wait (basebin->poll, GST_SECOND / 4); if (G_UNLIKELY (pollres == -1)) { gst_task_stop (basebin->task); return; } if (basebin->hwcam) { cam_device_poll (basebin->hwcam); if (basebin->pmtlist_changed) { if (cam_device_ready (basebin->hwcam)) { GST_DEBUG_OBJECT (basebin, "pmt list changed"); dvb_base_bin_reset_pmtlist (basebin); } else { GST_DEBUG_OBJECT (basebin, "pmt list changed but CAM not ready"); } } } }
static GstStateChangeReturn dvb_base_bin_change_state (GstElement * element, GstStateChange transition) { DvbBaseBin *dvbbasebin; GstStateChangeReturn ret; dvbbasebin = GST_DVB_BASE_BIN (element); ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: dvb_base_bin_init_cam (dvbbasebin); break; case GST_STATE_CHANGE_PAUSED_TO_READY: dvb_base_bin_reset (dvbbasebin); break; default: break; } return ret; }