Mercurial > ~darius > hgwebdir.cgi > simpletv
diff simpletv.c @ 5:8b6b46a1261d
- Move to 5.x+ includes
- XFree the Xv image
- Ask the WM to keep the window aspect 4:3
author | darius |
---|---|
date | Tue, 28 Jun 2005 13:12:39 +0000 |
parents | 8d7d1680db7d |
children | f0cbbe964629 |
line wrap: on
line diff
--- a/simpletv.c Tue Jan 04 05:21:07 2005 +0000 +++ b/simpletv.c Tue Jun 28 13:12:39 2005 +0000 @@ -46,8 +46,8 @@ #include <sys/time.h> #include <libgen.h> #include <sys/soundcard.h> -#include <machine/ioctl_bt848.h> -#include <machine/ioctl_meteor.h> +#include <dev/bktr/ioctl_bt848.h> +#include <dev/bktr/ioctl_meteor.h> #include <machine/param.h> #include <sys/types.h> #include <sys/ipc.h> @@ -147,10 +147,7 @@ geo.frames = 1; #ifdef USE_XVIMAGES /* Should be YUV_12, but 422 actually gives a synced picture. Though */ - - /* geo.oformat = METEOR_GEO_YUV_12; */ geo.oformat = METEOR_GEO_YUV_422 | METEOR_GEO_YUV_12; - /* geo.oformat = METEOR_GEO_YUV_12; */ #else geo.oformat = METEOR_GEO_RGB24; #endif @@ -359,7 +356,8 @@ int num_vis; XPixmapFormatValues *pf; int num_pf , pfi, i, j; - + XSizeHints sz_hint; + disp = XOpenDisplay(NULL); if (!disp) { fprintf(stderr, "X-Error: unable to connect to display\n"); @@ -385,6 +383,18 @@ XMapWindow(disp, win); cmap = DefaultColormap(disp, scr); + + sz_hint.flags = PAspect; + sz_hint.min_aspect.x = width; + sz_hint.min_aspect.y = height; + sz_hint.max_aspect.x = width; + sz_hint.max_aspect.y = height; + + /* set min height/width to 4 to avoid off by one errors */ + sz_hint.min_width = sz_hint.min_height = 4; + sz_hint.flags |= PMinSize; + XSetWMNormalHints(disp, win, &sz_hint); + XSync(disp, False); /* Setup with Xv extension */ @@ -416,8 +426,8 @@ /* Create an image to captured frames */ #ifdef USE_XVIMAGES - yuv_im age = XvShmCreateImage(disp, xv_adaptors[xv_adaptor].base_id, - xv_format_id, 0, w, h, &shminfo); + yuv_image = XvShmCreateImage(disp, xv_adaptors[xv_adaptor].base_id, + xv_format_id, 0, w, h, &shminfo); if (!yuv_image) fprintf(stderr, "X-Error: unable to create XvShm XImage\n"); @@ -426,6 +436,7 @@ fprintf(stderr, "SharedMemory Error: unable to get identifier\n"); shminfo.shmaddr = yuv_image->data = shmat(shminfo.shmid, 0, 0); + yuv_image->data = shminfo.shmaddr; #else rgb_image = XShmCreateImage(disp, vis, depth, ZPixmap, NULL, &shminfo, w, h); if (!rgb_image) @@ -469,9 +480,11 @@ void X_Shutdown() { +#ifdef USE_XVIMAGES XShmDetach(disp, &shminfo); -#ifdef USE_XVIMAGES -#warning How do we destroy an XvImage? + shmctl(shminfo.shmid, IPC_RMID, 0); + shmdt(shminfo.shmaddr); + XFree(yuv_image); #else XDestroyImage(rgb_image); #endif