static void dvb_base_bin_init_cam (DvbBaseBin * dvbbasebin) { gint adapter; gchar *ca_file; g_object_get (dvbbasebin->dvbsrc, "adapter", &adapter, NULL); /* TODO: handle multiple cams */ ca_file = g_strdup_printf ("/dev/dvb/adapter%d/ca0", adapter); if (g_file_test (ca_file, G_FILE_TEST_EXISTS)) { dvbbasebin->hwcam = cam_device_new (); if (cam_device_open (dvbbasebin->hwcam, ca_file)) { /* HACK: poll the cam in a buffer probe */ dvbbasebin->ts_pad = gst_element_get_request_pad (dvbbasebin->mpegtsparse, "src%d"); gst_pad_add_buffer_probe (dvbbasebin->ts_pad, G_CALLBACK (dvb_base_bin_ts_pad_probe_cb), dvbbasebin); } else { GST_ERROR_OBJECT (dvbbasebin, "could not open %s", ca_file); cam_device_free (dvbbasebin->hwcam); dvbbasebin->hwcam = NULL; } } g_free (ca_file); }
static void dvb_base_bin_reset (DvbBaseBin * dvbbasebin) { if (dvbbasebin->hwcam) { cam_device_close (dvbbasebin->hwcam); cam_device_free (dvbbasebin->hwcam); dvbbasebin->hwcam = NULL; } }
static void dvb_base_bin_reset (DvbBaseBin * dvbbasebin) { if (dvbbasebin->hwcam) { cam_device_close (dvbbasebin->hwcam); cam_device_free (dvbbasebin->hwcam); dvbbasebin->hwcam = NULL; } if (dvbbasebin->ts_pad) { gst_element_release_request_pad (GST_ELEMENT (dvbbasebin->mpegtsparse), dvbbasebin->ts_pad); dvbbasebin->ts_pad = NULL; } }
static void dvb_base_bin_init_cam (DvbBaseBin * dvbbasebin) { gint adapter; gchar *ca_file; g_object_get (dvbbasebin->dvbsrc, "adapter", &adapter, NULL); /* TODO: handle multiple cams */ ca_file = g_strdup_printf ("/dev/dvb/adapter%d/ca0", adapter); if (g_file_test (ca_file, G_FILE_TEST_EXISTS)) { dvbbasebin->hwcam = cam_device_new (); /* device_open() can block up to 5s ! */ if (!cam_device_open (dvbbasebin->hwcam, ca_file)) { GST_ERROR_OBJECT (dvbbasebin, "could not open %s", ca_file); cam_device_free (dvbbasebin->hwcam); dvbbasebin->hwcam = NULL; } } g_free (ca_file); }