static void handle_channel_inserts (ReaderEngine *engine, gint sub) { gchar *query; const gchar *subject; TrackerSparqlCursor *cursor; ReaderEnginePrivate *priv; priv = reader_engine_get_instance_private (engine); query = g_strdup_printf ("SELECT tracker:uri(%d) {}", sub); cursor = tracker_sparql_connection_query (priv->tracker, query, NULL, NULL); tracker_sparql_cursor_next (cursor, NULL, NULL); subject = tracker_sparql_cursor_get_string (cursor, 0, NULL); collect_channels (engine, subject); g_free (query); g_object_unref (cursor); }
int fdtv_stop_feed(struct dvb_demux_feed *dvbdmxfeed) { struct dvb_demux *demux = dvbdmxfeed->demux; struct firedtv *fdtv = demux->priv; int pidc, c, ret; u16 pids[16]; if (dvbdmxfeed->type == DMX_TYPE_TS && !((dvbdmxfeed->ts_type & TS_PACKET) && (demux->dmx.frontend->source != DMX_MEMORY_FE))) { if (dvbdmxfeed->ts_type & TS_DECODER) { if (dvbdmxfeed->pes_type >= DMX_PES_OTHER || !demux->pesfilter[dvbdmxfeed->pes_type]) return -EINVAL; demux->pids[dvbdmxfeed->pes_type] |= 0x8000; demux->pesfilter[dvbdmxfeed->pes_type] = NULL; } if (!(dvbdmxfeed->ts_type & TS_DECODER && dvbdmxfeed->pes_type < DMX_PES_OTHER)) return 0; } if (mutex_lock_interruptible(&fdtv->demux_mutex)) return -EINTR; c = (unsigned long)dvbdmxfeed->priv; dealloc_channel(fdtv, c); collect_channels(fdtv, &pidc, pids); ret = avc_tuner_set_pids(fdtv, pidc, pids); mutex_unlock(&fdtv->demux_mutex); return ret; }
static void reader_engine_init (ReaderEngine *engine) { ReaderEnginePrivate *priv; priv = reader_engine_get_instance_private (engine); /* TODO error handling */ priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); priv->tracker = tracker_sparql_connection_get (NULL, NULL); priv->data = gtk_list_store_new (EXTRA_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_LONG, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_POINTER); g_dbus_connection_signal_subscribe (priv->connection, TRACKER_DBUS_SERVICE, TRACKER_DBUS_INTERFACE_RESOURCES, "GraphUpdated", TRACKER_DBUS_OBJECT_RESOURCES, "http://www.tracker-project.org/temp/mfo#FeedChannel", G_DBUS_SIGNAL_FLAGS_NONE, (GDBusSignalCallback) on_channel_update, engine, NULL); g_dbus_connection_signal_subscribe (priv->connection, TRACKER_DBUS_SERVICE, TRACKER_DBUS_INTERFACE_RESOURCES, "GraphUpdated", TRACKER_DBUS_OBJECT_RESOURCES, "http://www.tracker-project.org/temp/mfo#FeedMessage", G_DBUS_SIGNAL_FLAGS_NONE, (GDBusSignalCallback) on_message_update, engine, NULL); collect_channels (engine, NULL); }
int fdtv_start_feed(struct dvb_demux_feed *dvbdmxfeed) { struct firedtv *fdtv = dvbdmxfeed->demux->priv; int pidc, c, ret; u16 pids[16]; switch (dvbdmxfeed->type) { case DMX_TYPE_TS: case DMX_TYPE_SEC: break; default: dev_err(fdtv->device, "can't start dmx feed: invalid type %u\n", dvbdmxfeed->type); return -EINVAL; } if (mutex_lock_interruptible(&fdtv->demux_mutex)) return -EINTR; if (dvbdmxfeed->type == DMX_TYPE_TS) { switch (dvbdmxfeed->pes_type) { case DMX_PES_VIDEO: case DMX_PES_AUDIO: case DMX_PES_TELETEXT: case DMX_PES_PCR: case DMX_PES_OTHER: c = alloc_channel(fdtv); break; default: dev_err(fdtv->device, "can't start dmx feed: invalid pes type %u\n", dvbdmxfeed->pes_type); ret = -EINVAL; goto out; } } else { c = alloc_channel(fdtv); } if (c > 15) { dev_err(fdtv->device, "can't start dmx feed: busy\n"); ret = -EBUSY; goto out; } dvbdmxfeed->priv = (typeof(dvbdmxfeed->priv))(unsigned long)c; fdtv->channel_pid[c] = dvbdmxfeed->pid; collect_channels(fdtv, &pidc, pids); if (dvbdmxfeed->pid == 8192) { ret = avc_tuner_get_ts(fdtv); if (ret) { dealloc_channel(fdtv, c); dev_err(fdtv->device, "can't get TS\n"); goto out; } } else { ret = avc_tuner_set_pids(fdtv, pidc, pids); if (ret) { dealloc_channel(fdtv, c); dev_err(fdtv->device, "can't set PIDs\n"); goto out; } } out: mutex_unlock(&fdtv->demux_mutex); return ret; }