X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fanalogtv.h;h=ed3ce340bb184362b3da02f433fef405daa227f4;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hp=01dca14d95f130ad097447a7e670f73e83c93aa4;hpb=f8cf5ac7b2f53510f80a0eaf286a25298be17bfe;p=xscreensaver diff --git a/hacks/analogtv.h b/hacks/analogtv.h index 01dca14d..ed3ce340 100644 --- a/hacks/analogtv.h +++ b/hacks/analogtv.h @@ -1,4 +1,4 @@ -/* analogtv, Copyright (c) 2003, 2004 Trevor Blackwell +/* analogtv, Copyright (c) 2003-2016 Trevor Blackwell * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -12,8 +12,13 @@ #ifndef _XSCREENSAVER_ANALOGTV_H #define _XSCREENSAVER_ANALOGTV_H +#include "thread_util.h" #include "xshm.h" +#if defined(USE_IPHONE) || defined(HAVE_ANDROID) +# define HAVE_MOBILE +#endif + /* You'll need these to generate standard NTSC TV signals */ @@ -111,6 +116,10 @@ typedef struct analogtv_reception_s { The rest of this should be considered mostly opaque to the analogtv module. */ +struct analogtv_yiq_s { + float y,i,q; +} /*yiq[ANALOGTV_PIC_LEN+10] */; + typedef struct analogtv_s { Display *dpy; @@ -118,6 +127,8 @@ typedef struct analogtv_s { Screen *screen; XWindowAttributes xgwa; + struct threadpool threads; + #if 0 unsigned int onscreen_signature[ANALOGTV_V]; #endif @@ -127,14 +138,14 @@ typedef struct analogtv_s { int interlace; int interlace_counter; - double agclevel; + float agclevel; /* If you change these, call analogtv_set_demod */ - double tint_control,color_control,brightness_control,contrast_control; - double height_control, width_control, squish_control; - double horiz_desync; - double squeezebottom; - double powerup; + float tint_control,color_control,brightness_control,contrast_control; + float height_control, width_control, squish_control; + float horiz_desync; + float squeezebottom; + float powerup; /* internal cache */ int blur_mult; @@ -150,17 +161,15 @@ typedef struct analogtv_s { int fakeit_scroll; int redraw_all; - int use_shm,use_cmap,use_color; + int use_cmap,use_color; int bilevel_signal; -#ifdef HAVE_XSHM_EXTENSION XShmSegmentInfo shm_info; -#endif int visdepth,visclass,visbits; int red_invprec, red_shift; int green_invprec, green_shift; int blue_invprec, blue_shift; - unsigned int red_mask, green_mask, blue_mask; + unsigned long red_mask, green_mask, blue_mask; Colormap colormap; int usewidth,useheight,xrepl,subwidth; @@ -189,21 +198,19 @@ typedef struct analogtv_s { int hashnoise_enable; int shrinkpulse; - double crtload[ANALOGTV_V]; + float crtload[ANALOGTV_V]; unsigned int red_values[ANALOGTV_CV_MAX]; unsigned int green_values[ANALOGTV_CV_MAX]; unsigned int blue_values[ANALOGTV_CV_MAX]; - struct analogtv_yiq_s { - float y,i,q; - } yiq[ANALOGTV_PIC_LEN+10]; - unsigned long colors[256]; int cmap_y_levels; int cmap_i_levels; int cmap_q_levels; + float tint_i, tint_q; + int cur_hsync; int line_hsync[ANALOGTV_V]; int cur_vsync; @@ -212,13 +219,22 @@ typedef struct analogtv_s { int channel_change_cycles; double rx_signal_level; - double rx_signal[ANALOGTV_SIGNAL_LEN + 2*ANALOGTV_H]; + float *rx_signal; struct { int index; double value; } leveltable[ANALOGTV_MAX_LINEHEIGHT+1][ANALOGTV_MAX_LINEHEIGHT+1]; + /* Only valid during draw. */ + unsigned random0, random1; + double noiselevel; + const analogtv_reception *const *recs; + unsigned rec_count; + + float *signal_subtotals; + + float puheight; } analogtv; @@ -233,15 +249,13 @@ void analogtv_release(analogtv *it); int analogtv_set_demod(analogtv *it); void analogtv_setup_frame(analogtv *it); void analogtv_setup_sync(analogtv_input *input, int do_cb, int do_ssavi); -void analogtv_draw(analogtv *it); +void analogtv_draw(analogtv *it, double noiselevel, + const analogtv_reception *const *recs, unsigned rec_count); int analogtv_load_ximage(analogtv *it, analogtv_input *input, XImage *pic_im); void analogtv_reception_update(analogtv_reception *inp); -void analogtv_init_signal(analogtv *it, double noiselevel); -void analogtv_add_signal(analogtv *it, analogtv_reception *rec); - void analogtv_setup_teletext(analogtv_input *input); @@ -282,13 +296,13 @@ int analogtv_handle_events (analogtv *it); #define ANALOGTV_DEFAULTS_SHM #endif -#ifndef USE_IPHONE +#ifndef HAVE_MOBILE # define ANALOGTV_DEF_BRIGHTNESS "2" # define ANALOGTV_DEF_CONTRAST "150" #else /* Need to really crank this up for it to look good on the iPhone screen. */ # define ANALOGTV_DEF_BRIGHTNESS "3" -# define ANALOGTV_DEF_CONTRAST "1000" +# define ANALOGTV_DEF_CONTRAST "400" #endif #define ANALOGTV_DEFAULTS \ @@ -300,9 +314,11 @@ int analogtv_handle_events (analogtv *it); "*use_cmap: 0", \ "*geometry: 800x600", \ "*fpsSolid: True", \ + THREAD_DEFAULTS \ ANALOGTV_DEFAULTS_SHM #define ANALOGTV_OPTIONS \ + THREAD_OPTIONS \ { "-use-cmap", ".use_cmap", XrmoptionSepArg, 0 }, \ { "-tv-color", ".TVColor", XrmoptionSepArg, 0 }, \ { "-tv-tint", ".TVTint", XrmoptionSepArg, 0 }, \