size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written; // unsigned char nbytes = size * nmemb; // printf("got %d bytes...\n", nbytes); for(int i=0; i<nmemb; i++) { unsigned char b = ((unsigned char *)ptr)[i]; // printf("byte #%d.%d %02x (%c)\n", block_counter, i, b, (b > 32 && b < 128) ? b : '?'); // printf("%c", (b > 32 && b < 128) ? b : '?'); if (g_state == STATE_MAIN_HEADER || g_state == STATE_FRAME_HEADER) { int p = strlen(headerline); if (p < 1000) headerline[p] = b; if (b == '\n') { if (headerline[p-1] == '\r') { headerline[p] = 0; headerline[p-1] = 0; // printf("got header newline after \"%s\".\n", headerline); on_headerline(headerline); if (strncmp(headerline, "--", 2) == 0) { // printf("got boundary.\n"); g_state = STATE_FRAME_HEADER; } if (strlen(headerline) == 0 && jpeg_num_headers > 0) { // did we get an empty line, switch state. // printf("empty header, switch state.\n"); if (g_state == STATE_FRAME_HEADER) { // printf("starting new jpeg frame.\n"); g_state = STATE_FRAME; jpeg_frame_position = 0; } } memset(&headerline, 0, 1000); jpeg_num_headers ++; } } } else if (g_state == STATE_FRAME) { jpeg_buffer[jpeg_frame_position] = b; jpeg_frame_position ++; // printf("position %d / %d\n", jpeg_frame_position, jpeg_frame_size); if (jpeg_frame_position >= jpeg_frame_size) { // printf("end of frame.\n"); on_frame(jpeg_buffer, jpeg_frame_size); g_state = STATE_FRAME_HEADER; memset(headerline, 0, 1000); jpeg_frame_position = 0; jpeg_num_headers = 0; } } } // written = fwrite(ptr, size, nmemb, stream); block_counter ++; return nmemb; }
void run_message_loop() { MSG msg; do { if ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) ::DispatchMessage( &msg ); else on_frame(); } while( msg.message != WM_QUIT ); }
int main(int argc, char **argv) { GError *error = NULL; GdkMonitor *monitor; GdkRectangle monitor_bounds; GOptionContext *context = g_option_context_new (NULL); g_option_context_add_main_entries (context, options, NULL); frame_stats_add_options (g_option_context_get_main_group (context)); g_option_context_add_group (context, gtk_get_option_group (TRUE)); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_printerr ("Option parsing failed: %s\n", error->message); return 1; } g_print ("# Load factor: %g\n", load_factor); g_print ("# Resizing?: %s\n", cb_no_resize ? "no" : "yes"); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); frame_stats_ensure (GTK_WINDOW (window)); gtk_window_set_keep_above (GTK_WINDOW (window), TRUE); gtk_window_set_gravity (GTK_WINDOW (window), GDK_GRAVITY_CENTER); gtk_widget_set_app_paintable (window, TRUE); g_signal_connect (window, "draw", G_CALLBACK (on_window_draw), NULL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (window, "map-event", G_CALLBACK (on_map_event), NULL); on_frame (0.); monitor = gdk_display_get_primary_monitor (gtk_widget_get_display (window)); gdk_monitor_get_geometry (monitor, &monitor_bounds); gtk_window_move (GTK_WINDOW (window), monitor_bounds.x + (monitor_bounds.width - window_width) / 2, monitor_bounds.y + (monitor_bounds.height - window_height) / 2); gtk_widget_show (window); gtk_main (); return 0; }
int main(int argc, char **argv) { GError *error = NULL; GdkScreen *screen; GdkRectangle monitor_bounds; if (!gtk_init_with_args (&argc, &argv, "", options, NULL, &error)) { g_printerr ("Option parsing failed: %s\n", error->message); return 1; } g_print ("%sLoad factor: %g\n", machine_readable ? "# " : "", load_factor); g_print ("%sResizing?: %s\n", machine_readable ? "# " : "", cb_no_resize ? "no" : "yes"); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_keep_above (GTK_WINDOW (window), TRUE); gtk_window_set_gravity (GTK_WINDOW (window), GDK_GRAVITY_CENTER); gtk_widget_set_app_paintable (window, TRUE); g_signal_connect (window, "draw", G_CALLBACK (on_window_draw), NULL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (window, "map-event", G_CALLBACK (on_map_event), NULL); on_frame (0.); screen = gtk_widget_get_screen (window); gdk_screen_get_monitor_geometry (screen, gdk_screen_get_primary_monitor (screen), &monitor_bounds); gtk_window_move (GTK_WINDOW (window), monitor_bounds.x + (monitor_bounds.width - window_width) / 2, monitor_bounds.y + (monitor_bounds.height - window_height) / 2); gtk_widget_show (window); gtk_main (); return 0; }
static gboolean tick_callback (GtkWidget *widget, GdkFrameClock *frame_clock, gpointer user_data) { gint64 frame_time = gdk_frame_clock_get_frame_time (frame_clock); double scaled_time; if (start_frame_time == 0) start_frame_time = frame_time; scaled_time = (frame_time - start_frame_time) / (CYCLE_TIME * 1000000); on_frame (scaled_time - floor (scaled_time)); return G_SOURCE_CONTINUE; }
ViewerWindow::ViewerWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::ViewerWindow) { //Create GUI ui->setupUi(this); //Create Network Socket tcpSocket = new QTcpSocket(); connected_to_server = false; //Create capturebuffer and connect its image_signal to on_frame slot captureBuffer = new CaptureBuffer; connect(captureBuffer,SIGNAL(image_signal(QImage)), this, SLOT(on_frame(QImage))); //Read previously selected camera from settings QSettings settings("GS", "viewer"); selected_camera = settings.value("Selected Camera", QByteArray()).toByteArray(); if (selected_camera == QByteArray()) //no device was selected { selected_camera = QCamera::availableDevices()[0]; } camera = NULL; //Create empty movie and connect buttons to slots movie_ = new QMovie(); //ui->label->setMovie(movie_); connect(ui->playButton, SIGNAL(clicked()), this, SLOT(pauseUnpauseMovie())); connect(ui->stopButton, SIGNAL(clicked()), movie_, SLOT(stop())); //Read and set autostart from settings autostart = settings.value("Auto-Iniciar", true).toBool(); ui->autoInit->setChecked(autostart); if (autostart) ui->playButton->setText("Pausar"); else ui->playButton->setText("Iniciar"); }
void Frame::put_point( int x, int y ) { if( on_frame(x, y) ) { frame[x][y] = '*'; } }