annotate libvo/vo_bl.c @ 8763:19e96e60a3d0

Speed optimizations (runs twise as fast) and bugfix (wrong cutoff frequency buffer over run noise and garbeled output when wrong input format)
author anders
date Sat, 04 Jan 2003 06:19:25 +0000
parents 2b1db607a09c
children 35e306346e59
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7326
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
1 /*
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
2 * vo_bl.c - playback using the Blinkenlights UPD protocol (and to files)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
3 *
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
4 * UDP socket handling copied from bsender.c part of blib-0.6:
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
5 * http://sven.gimp.org/blinkenlights/
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
6 * Copyright (c) 2001-2001 The Blinkenlights Crew:
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
7 * Sven Neumann <sven@gimp.org>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
8 * Michael Natterer <mitch@gimp.org>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
9 * Daniel Mack <daniel@yoobay.net>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
10 * (these portions are licensed under GNU GPL v2 or "(at your option)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
11 * any later version")
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
12 *
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
13 * Other stuff: Copyright (C) Rik Snel 2002, License GNU GPL v2
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
14 */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
15
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
16 #include <stdio.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
17 #include <stdlib.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
18 #include <string.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
19 #include <unistd.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
20 #include <fcntl.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
21 #include <errno.h>
8171
2b1db607a09c compilation fix by Sven Neumann <sven@gimp.org> of Blinkenlights fame
rik
parents: 8148
diff changeset
22 #include <netdb.h>
7326
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
23 #include <sys/stat.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
24 #include <sys/types.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
25 #include <sys/socket.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
26 #include <sys/time.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
27 #include <sys/mman.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
28 #include <sys/ioctl.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
29 #include <netinet/in.h>
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
30
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
31 #include "config.h"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
32
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
33 #include "video_out.h"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
34 #include "video_out_internal.h"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
35 #include "../mp_msg.h"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
36 #include "../cfgparser.h"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
37 #include "fastmemcpy.h"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
38
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7326
diff changeset
39 static vo_info_t info =
7326
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
40 {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
41 "Blinkenlights driver: http://www.blinkenlights.de",
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
42 "bl",
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
43 "Rik Snel <snel@phys.uu.nl>",
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
44 ""
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
45 };
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
46
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7326
diff changeset
47 LIBVO_EXTERN (bl)
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7326
diff changeset
48
7326
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
49 /* General variables */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
50
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
51 static unsigned char *image = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
52 static unsigned char *tmp = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
53 static int framenum, yoff, stride;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
54 static char *bl_subdevice = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
55 static int prevpts = -1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
56
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
57 typedef struct {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
58 char *name; /* filename */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
59 FILE *fp;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
60 } bl_file_t;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
61
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
62 typedef struct {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
63 char *name; /* hostname */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
64 int port;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
65 int fd; /* file descriptor */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
66 } bl_host_t;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
67
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
68 typedef struct {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
69 char *name;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
70 int img_format;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
71
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
72 int channels;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
73 int width;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
74 int height;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
75 int bpc; /* bits per component: bpc = 3, channels = 3 => bpp = 24*/
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
76
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
77 /* file output functions */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
78 int (*init_file)(bl_file_t *file);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
79 void (*write_frame)(bl_file_t *file, unsigned char *i, int duration);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
80 void (*close_file)(bl_file_t *file);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
81
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
82 /* network output functions */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
83 int (*init_connection)(bl_host_t *host);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
84 void (*send_frame)(bl_host_t *host);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
85 void (*close_connection)(bl_host_t *host);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
86 } bl_properties_t;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
87
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
88 static bl_properties_t *bl = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
89
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
90 /* arbitrary limit because I am too lazy to do proper memory management */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
91 #define BL_MAX_FILES 16
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
92 #define BL_MAX_HOSTS 16
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
93 static bl_file_t bl_files[BL_MAX_FILES];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
94 static bl_host_t bl_hosts[BL_MAX_HOSTS];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
95 static int no_bl_files = 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
96 static int no_bl_hosts = 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
97
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
98 typedef struct {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
99 uint32_t magic;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
100 uint16_t height;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
101 uint16_t width;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
102 uint16_t channels;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
103 uint16_t maxval;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
104 unsigned char data[0];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
105 } bl_packet_t;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
106
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
107 static bl_packet_t *bl_packet = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
108 static int bl_size;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
109
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
110 /* bml output functions */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
111 static int bml_init(bl_file_t *f) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
112 f->fp = fopen(f->name, "w");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
113 if (!f->fp) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
114 mp_msg(MSGT_VO, MSGL_ERR, "bl: error opening %s\n", f->name);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
115 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
116 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
117 fprintf(f->fp,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
118 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
119 "<blm width=\"%d\" height=\"%d\" bits=\"%d\" channels=\"%d\">\n"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
120 " <header>\n"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
121 " <title>Movie autogenerated by MPlayer</title>\n"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
122 " <url>http://www.mplayerhq.hu</url>\n"
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
123 " </header>\n", bl->width, bl->height, bl->bpc, bl->channels);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
124 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
125 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
126
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
127 static void bml_write_frame(bl_file_t *f, unsigned char *i, int duration) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
128 int j, k;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
129 fprintf(f->fp, " <frame duration=\"%d\">\n", duration);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
130 for (j = 0; j < bl->height; j++) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
131 fprintf(f->fp, " <row>");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
132 for (k = 0; k < bl->width; k++)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
133 fprintf(f->fp, "%02x", *(i + j * bl->width + k));
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
134 fprintf(f->fp, "</row>\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
135 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
136 fprintf(f->fp, " </frame>\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
137 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
138
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
139 static void bml_close(bl_file_t *f) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
140 fprintf(f->fp, "</blm>\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
141 fclose(f->fp);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
142 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
143
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
144 /* Blinkenlights UDP protocol */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
145 static int udp_init(bl_host_t *h) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
146 struct sockaddr_in addr;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
147 struct hostent *dest;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
148
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
149 dest = gethostbyname(h->name);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
150 if (!dest) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
151 mp_msg(MSGT_VO, MSGL_ERR,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
152 "unable to resolve host %s\n", h->name);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
153 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
154 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
155
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
156 h->fd = -1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
157 addr.sin_family = AF_INET;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
158 addr.sin_port = htons(h->port);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
159
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
160 memcpy(&addr.sin_addr.s_addr, dest->h_addr_list[0], dest->h_length);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
161
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
162 h->fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
163 if (h->fd < 0) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
164 mp_msg(MSGT_VO, MSGL_ERR,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
165 "couldn't create socket for %s\n", h->name);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
166 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
167 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
168 if (connect(h->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
169 mp_msg(MSGT_VO, MSGL_ERR, "couldn't connect socket for %s\n",
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
170 h->name);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
171 close(h->fd);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
172 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
173 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
174 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
175 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
176
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
177 static void udp_send(bl_host_t *h) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
178 if (write(h->fd, bl_packet, bl_size) != bl_size)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
179 mp_msg(MSGT_VO, MSGL_ERR, "unable to send to %s\n", h->name);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
180 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
181
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
182 static void udp_close(bl_host_t *h) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
183 close(h->fd);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
184 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
185
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
186 #define NO_BLS 2
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
187
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
188 /* currently only arcade is supported, hdl can be supported
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
189 * in principle and future projects can be supported if their
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
190 * parameters become known */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
191 static bl_properties_t bls[NO_BLS] = {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
192 { "hdl", IMGFMT_BGR1, 1, 18, 8, 1,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
193 NULL, NULL, NULL, NULL, NULL, NULL },
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
194 { "arcade", IMGFMT_YV12, 1, 26, 20, 8,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
195 &bml_init, &bml_write_frame, &bml_close,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
196 &udp_init, &udp_send, &udp_close } };
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
197
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
198 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
199 uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
200 {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
201 framenum = 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
202 if (format != IMGFMT_YV12) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
203 mp_msg(MSGT_VO, MSGL_ERR, "vo_bl called with wrong format");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
204 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
205 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
206 if (width > bl->width) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
207 mp_msg(MSGT_VO, MSGL_ERR, "bl: width of movie too large %d > %d\n", width, bl->width);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
208 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
209 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
210 if (height > bl->height) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
211 mp_msg(MSGT_VO, MSGL_ERR, "bl: height of movie too large %d > %d\n", height, bl->height);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
212 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
213 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
214 if (!image) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
215 mp_msg(MSGT_VO, MSGL_ERR, "bl: image should be initialized, internal error\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
216 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
217 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
218 memset(image, 0, bl->width*bl->height*3); /* blank the image */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
219 mp_msg(MSGT_VO, MSGL_V, "vo_config bl called\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
220 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
221 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
222
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
223 static void draw_osd(void) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
224 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
225
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
226 static void flip_page (void) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
227 int i;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
228
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
229 if (prevpts >= 0) for (i = 0; i < no_bl_files; i++)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
230 bl->write_frame(&bl_files[i], tmp, (vo_pts - prevpts)/90);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
231 memcpy(tmp, image, bl->width*bl->height*bl->channels);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
232 prevpts = vo_pts;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
233
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
234 for (i = 0; i < no_bl_hosts; i++) bl->send_frame(&bl_hosts[i]);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
235
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
236
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
237 framenum++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
238 return;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
239 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
240
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
241 static uint32_t draw_frame(uint8_t * src[]) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
242 int i, j;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
243 char *source, *dest;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
244 //printf("draw frame called\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
245 #if 0
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
246 zr_info_t *zr = &zr_info[j];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
247 geo_t *g = &zr->g;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
248 source = src[0] + 2*g->yoff*zr->vdec*zr->stride + 2*g->xoff;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
249 dest = zr->image + 2*zr->off_y;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
250 for (i = 0; i < g->height/zr->vdec; i++) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
251 memcpy(dest, source, zr->image_width*2);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
252 dest += 2*zr->image_width;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
253 source += zr->vdec*zr->stride;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
254 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
255 #endif
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
256 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
257 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
258
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
259 static uint32_t query_format(uint32_t format) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
260 if (format == bl->img_format)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
261 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
262 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
263 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
264
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
265 static void uninit(void) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
266 int i;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
267 mp_msg(MSGT_VO, MSGL_V, "bl: uninit called\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
268 free(bl_packet);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
269 bl_packet = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
270 free(bl_subdevice);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
271 bl_subdevice = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
272 for (i = 0; i < no_bl_files; i++) bl->close_file(&bl_files[i]);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
273 for (i = 0; i < no_bl_hosts; i++) bl->close_connection(&bl_hosts[i]);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
274 no_bl_files = 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
275 no_bl_hosts = 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
276 bl = NULL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
277 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
278
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
279 static void check_events(void) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
280 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
281
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
282 static uint32_t draw_slice(uint8_t *srcimg[], int stride[],
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
283 int wf, int hf, int xf, int yf) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
284 int i, j, w, h, x, y;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
285 uint8_t *dst;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
286 uint8_t *src=srcimg[0];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
287 uint8_t *src1=srcimg[1];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
288 uint8_t *src2=srcimg[2];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
289 w = wf; h = hf; x = xf; y = yf;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
290 dst=image; /* + zr->off_y + zr->image_width*(y/zr->vdec)+x;*/
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
291 // copy Y:
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
292 for (i = 0; i < h; i++) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
293 memcpy(dst,src,w);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
294 dst+=bl->width;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
295 src+=stride[0];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
296
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
297 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
298 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
299 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
300
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
301 static uint32_t preinit(const char *arg) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
302 char *p, *q;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
303 int end = 0, i;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
304 if (!arg || strlen(arg) == 0) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
305 mp_msg(MSGT_VO, MSGL_ERR, "bl: subdevice must be given, example: -vo bl:arcade:host=localhost\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
306 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
307 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
308
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
309 bl_subdevice = malloc(strlen(arg) + 1);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
310 if (!bl_subdevice) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
311 mp_msg(MSGT_VO, MSGL_ERR, "bl: out of memory error\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
312 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
313 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
314 p = bl_subdevice;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
315 strcpy(p, arg);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
316 mp_msg(MSGT_VO, MSGL_V, "bl: preinit called with %s\n", arg);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
317 if (strncmp(p, "arcade", 6)) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
318 mp_msg(MSGT_VO, MSGL_ERR, "bl: subdevice must start with arcade, this is the only supported output format\nat the moment, i.e. -vo bl:arcade:host=localhost\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
319 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
320 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
321 bl = &bls[1];
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
322 p += 6;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
323 if (*p == '\0') {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
324 no_bl_hosts = 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
325 bl_hosts[0].name = "localhost";
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
326 bl_hosts[0].port = 2323;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
327 mp_msg(MSGT_VO, MSGL_V, "bl: no hosts/files specified, using localhost:2323\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
328 end = 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
329 } else if (*p != ':') {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
330 mp_msg(MSGT_VO, MSGL_ERR, "bl: syntax error in subdevice\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
331 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
332 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
333 p++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
334
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
335 while (!end) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
336 q = p + 5;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
337 if (!strncmp(p, "file=", 5)) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
338 if (no_bl_files == BL_MAX_FILES) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
339 mp_msg(MSGT_VO, MSGL_ERR, "bl: maximum number of hosts reached (%d)\n", BL_MAX_FILES);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
340 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
341 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
342 p += 5;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
343 while (*q != ',' && *q != '\0') q++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
344 if (*q == '\0') end = 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
345 *q = '\0';
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
346 bl_files[no_bl_files].name = p;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
347 mp_msg(MSGT_VO, MSGL_V, "blfile[%d]: %s\n",
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
348 no_bl_files, p);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
349 no_bl_files++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
350 } else if (!strncmp(p, "host=", 5)) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
351 if (no_bl_hosts == BL_MAX_HOSTS) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
352 mp_msg(MSGT_VO, MSGL_ERR, "bl: maximum number of hosts reached (%d)\n", BL_MAX_HOSTS);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
353 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
354 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
355 p += 5;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
356 while (*q != ',' && *q != '\0' && *q != ':') q++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
357 if (*q == ':') {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
358 *q++ = '\0';
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
359 bl_hosts[no_bl_hosts].name = p;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
360 bl_hosts[no_bl_hosts].port = atoi(q);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
361 while (*q != ',' && *q != '\0') q++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
362 if (*q == '\0') end = 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
363 } else {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
364 /* use default port */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
365 if (*q == '\0') end = 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
366 *q = '\0';
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
367 bl_hosts[no_bl_hosts].name = p;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
368 bl_hosts[no_bl_hosts].port = 2323;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
369 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
370 mp_msg(MSGT_VO, MSGL_V,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
371 "blhost[%d]: %s:%d\n",
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
372 no_bl_hosts, p,
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
373 bl_hosts[no_bl_hosts].port);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
374 no_bl_hosts++;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
375 } else {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
376 mp_msg(MSGT_VO, MSGL_ERR, "bl: syntax error in entry %d in subdevice %s, should be a comma seperated\nlist of host=name:port and file=foo.bml\n", no_bl_hosts, no_bl_files, arg);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
377 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
378 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
379 p = ++q;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
380 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
381
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
382 bl_size = bl->width*bl->height*bl->channels + 12;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
383 /* enough space for RGB 24 bit + header */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
384 bl_packet = malloc(bl->width*bl->height*3+12);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
385 image = ((unsigned char*)bl_packet + 12);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
386 tmp = malloc(bl->width*bl->height*bl->channels);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
387
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
388 if (!bl_packet || !tmp) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
389 mp_msg(MSGT_VO, MSGL_ERR, "bl: out of memory error\n");
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
390 return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
391 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
392 bl_packet->magic = htonl(0x23542666);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
393 bl_packet->width = htons(bl->width);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
394 bl_packet->height = htons(bl->height);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
395 bl_packet->channels = htons(bl->channels);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
396 bl_packet->maxval = htons(2<<bl->bpc - 1);
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
397
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
398 /* open all files */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
399 for (i = 0; i < no_bl_files; i++)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
400 if (bl->init_file(&bl_files[i])) return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
401
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
402 /* open all sockets */
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
403 for (i = 0; i < no_bl_hosts; i++)
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
404 if (bl->init_connection(&bl_hosts[i])) return 1;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
405
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
406
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
407 return 0;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
408 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
409
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
410 static uint32_t control(uint32_t request, void *data, ...) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
411 switch (request) {
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
412 case VOCTRL_QUERY_FORMAT:
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
413 return query_format(*((uint32_t*)data));
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
414 }
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
415 return VO_NOTIMPL;
ec3e58120e2a extensible blinkenlights driver, can currently be used for the Arcade http://www.blinkenlights.de/arcade
rik
parents:
diff changeset
416 }