ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/mintv/mintv.cpp
(Generate patch)

Comparing mintv/mintv.cpp (file contents):
Revision 1.3 by cebix, 2003-03-01T15:23:26Z vs.
Revision 1.8 by cebix, 2005-10-02T11:57:30Z

# Line 1 | Line 1
1   /*
2 < *  mintv.cpp - 50/60Hz video display using v4l and XVideo
2 > *  mintv.cpp - 50/60Hz noninterlaced video display using v4l and XVideo
3   *
4 < *  Written in 2003 by Christian Bauer
4 > *  Written in 2003-2004 by Christian Bauer
5   */
6  
7   #include <stdio.h>
# Line 22 | Line 22
22   #include <X11/StringDefs.h>
23   #include <X11/Intrinsic.h>
24   #include <X11/Shell.h>
25 + #include <X11/cursorfont.h>
26   #include <X11/Xaw/Simple.h>
27   #include <X11/extensions/XShm.h>
28   #include <X11/extensions/Xv.h>
# Line 31 | Line 32 | static bool ntsc = false;
32  
33   const int PAL_WIDTH = 384;
34   const int PAL_HEIGHT = 288;
35 < const int NTSC_WIDTH = 320;
35 > const int NTSC_WIDTH = 360;
36   const int NTSC_HEIGHT = 240;
37  
38 < static int grab_width, grab_height;
38 > static int grab_width = -1, grab_height;
39   static int image_width, image_height;
40   static int win_width, win_height;
41  
42 < const int PAL_FPS = 50;
43 < const int NTSC_FPS = 60;
42 > const double PAL_FPS = 50.0;
43 > const double NTSC_FPS = 59.94;
44  
45 < static int fps;
45 > static double fps;
46  
47   static int brightness = 50, contrast = 50, color = 50;
48  
# Line 284 | Line 285 | static Boolean work_proc(XtPointer clien
285  
286          now = GetTicks_usec();
287          uint64 elapsed = now - prev;
288 <        int64 delay = 1000000 / fps - (now - prev);
288 >        int64 delay = int64(1000000.0 / fps) - (now - prev);
289   #if LOGGING
290          fprintf(log, "elapsed %Ld usec, delay %Ld usec\n", elapsed, delay);
291   #endif
# Line 321 | Line 322 | int main(int argc, char **argv)
322                  {"help", 0, 0, 'h'},
323                  {"ntsc", 0, 0, 'n'},
324                  {"port", 1, 0, 'p'},
325 +                {"width", 1, 0, 'w'},
326                  {NULL, 0, 0, 0}
327          };
328  
# Line 331 | Line 333 | int main(int argc, char **argv)
333          // Parse options
334          for (;;) {
335                  int c;
336 <                if ((c = getopt_long(argc, argv, "hnp:", long_opts,NULL)) == -1)
336 >                if ((c = getopt_long(argc, argv, "hnp:w:", long_opts, NULL)) == -1)
337                          break;
338  
339                  switch (c) {
# Line 343 | Line 345 | int main(int argc, char **argv)
345                          case 'p':
346                                  port = atoi(optarg);
347                                  break;
348 +                        case 'w':
349 +                                grab_width = atoi(optarg);
350 +                                break;
351                          case 'h':
352                          default:
353                                  fprintf(stderr,
354                                          "50/60Hz video display application\n\n"
355                                          "Options:\n"
356 <                                        "  -h | --help    this text\n"
357 <                                        "  -n | --ntsc    NTSC mode\n"
358 <                                        "  -p | --port n  Xv output port\n\n"
356 >                                        "  -h | --help     this text\n"
357 >                                        "  -n | --ntsc     NTSC mode\n"
358 >                                        "  -p | --port n   Xv output port\n"
359 >                                        "  -w | --width n  image width\n\n"
360                                          "Keyboard commands:\n"
361                                          "  q         quit\n"
362                                          "  1/2       select channel\n"
# Line 371 | Line 377 | int main(int argc, char **argv)
377          XtOverrideTranslations(app_shell, XtParseTranslationTable(
378                  "<Message>WM_PROTOCOLS: quit()\n"
379                  "<Key>q: quit()\n"
380 +                "<Key>Escape: quit()\n"
381                  "<Key>1: select_channel_1()\n"
382                  "<Key>2: select_channel_2()\n"
383                  "<Key>KP_7: inc_brightness()\n"
# Line 431 | Line 438 | port_found:
438  
439          // Set grab and window dimensions
440          if (ntsc) {
441 <                grab_width = NTSC_WIDTH;
441 >                if (grab_width == -1)
442 >                        grab_width = NTSC_WIDTH;
443                  grab_height = NTSC_HEIGHT;
444                  fps = NTSC_FPS;
445          } else {
446 <                grab_width = PAL_WIDTH;
446 >                if (grab_width == -1)
447 >                        grab_width = PAL_WIDTH;
448                  grab_height = PAL_HEIGHT;
449                  fps = PAL_FPS;
450          }
# Line 456 | Line 465 | port_found:
465          XtRealizeWidget(app_shell);
466          XtVaSetValues(app_shell,
467                  XtNtitle, "mintv",
468 +                XtNinput, True,
469                  NULL
470          );
471 <        XSetWMProtocols(XtDisplay(app_shell), XtWindow(app_shell), &wm, 1);
471 >        XSetWMProtocols(dpy, XtWindow(app_shell), &wm, 1);
472          gc = XCreateGC(dpy, XtWindow(video), 0, NULL);
473  
474 +        // Hide cursor
475 +        Colormap cmap = DefaultColormap(dpy, DefaultScreen(dpy));
476 +        XColor black;
477 +        XParseColor(dpy, cmap, "#000000", &black);
478 +        XAllocColor(dpy, cmap, &black);
479 +        static char null_data[] = {0, 0, 0, 0, 0, 0, 0, 0};
480 +        Pixmap null_pixmap = XCreateBitmapFromData(dpy, XtWindow(video), null_data, 8, 8);
481 +        Cursor null_cursor = XCreatePixmapCursor(dpy, null_pixmap, null_pixmap, &black, &black, 0, 0);
482 +        XDefineCursor(dpy, XtWindow(video), null_cursor);
483 +
484          // Set image format
485          unsigned format = XV_FORMAT;
486  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines