int main(int argc, char *argv[]) { rtsplink_t vidout; int ret = start_streaming(&vidout, HOST, PORT); if (ret == -1) { printf("stopping due to error\n"); return 1; } while (!stopsig) ; stop_streaming(&vidout); return 0; }
static int stop_feed(struct dvb_demux_feed *feed) { struct dvb_demux *demux = feed->demux; struct em28xx_dvb *dvb = demux->priv; int err = 0; mutex_lock(&dvb->lock); dvb->nfeeds--; if (0 == dvb->nfeeds) err = stop_streaming(dvb); mutex_unlock(&dvb->lock); return err; }
/*! \brief interrogate_ecu() interrogates the target ECU to determine what firmware it is running. It does this by reading a list of tests, sending those tests in turn, reading the responses and them comparing the group of responses against a list of interrogation profiles until it finds a match. */ G_MODULE_EXPORT gboolean interrogate_ecu(void) { GAsyncQueue *queue = NULL; GHashTable *tests_hash = NULL; GArray *tests = NULL; Detection_Test *test = NULL; gint i = 0; gboolean interrogated = FALSE; GList *locations = NULL; static GStaticMutex mutex = G_STATIC_MUTEX_INIT; /* prevent multiple runs of interrogator simultaneously */ g_static_mutex_lock(&mutex); dbg_func_f(INTERROGATOR,g_strdup("\n"__FILE__": interrogate_ecu() ENTERED\n\n")); /* ECU has already been detected via comms test Now we need to figure out its variant and adapt to it */ /* Send stream disable command */ stop_streaming(); /* Load tests from tests.cfg file */ if (!validate_and_load_tests(&tests,&tests_hash)) { dbg_func_f(INTERROGATOR|CRITICAL,g_strdup(__FILE__": interrogate_ecu()\n\t validate_and_load_tests() didn't return a valid list of commands\n\t MegaTunix was NOT installed correctly, Aborting Interrogation\n")); update_logbar_f("interr_view",NULL,g_strdup(__FILE__": interrogate_ecu()\n\t validate_and_load_tests() didn't return a valid list of commands\n\t MegaTunix was NOT installed correctly, Aborting Interrogation\n"),FALSE,FALSE,TRUE); g_static_mutex_unlock(&mutex); return FALSE; } thread_widget_set_sensitive_f("offline_button",FALSE); thread_widget_set_sensitive_f("interrogate_button",FALSE); /* how many tests.... */ for (i=0;i<tests->len;i++) { /* Get the test */ test = g_array_index(tests,Detection_Test *, i); /* Check func existance and run it */ if (test->function) { test->result = test->function(&test->num_bytes); if (test->result_type == RESULT_TEXT) test->result_str = g_strndup((const gchar *)(test->result),test->num_bytes); } else test->result = NULL; } interrogated = determine_ecu(tests,tests_hash); DATA_SET(global_data,"interrogated",GINT_TO_POINTER(interrogated)); if (interrogated) { thread_widget_set_sensitive_f("interrogate_button",FALSE); thread_widget_set_sensitive_f("offline_button",FALSE); } g_array_free(tests,TRUE); g_hash_table_destroy(tests_hash); g_static_mutex_unlock(&mutex); return interrogated; }