Пример #1
0
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;
}
Пример #2
0
				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 );
				}
Пример #3
0
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;
}
Пример #4
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;
}
Пример #5
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;
}
Пример #6
0
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");
}
Пример #7
0
void Frame::put_point( int x, int y ) {
    if( on_frame(x, y) ) {
        frame[x][y] = '*';
    }
}