diff options
Diffstat (limited to 'scaf/pdp/pdp_ca_system.c')
-rw-r--r-- | scaf/pdp/pdp_ca_system.c | 228 |
1 files changed, 0 insertions, 228 deletions
diff --git a/scaf/pdp/pdp_ca_system.c b/scaf/pdp/pdp_ca_system.c deleted file mode 100644 index 5e30850..0000000 --- a/scaf/pdp/pdp_ca_system.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Cellular Automata Extension Module for pdp - Main system code - * Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include "pdp_ca.h" - -/* all symbols are C-style */ -#ifdef __cplusplus -extern "C" -{ -#endif - - -/* check if packet is a valid ca packet */ -int pdp_type_isvalid_ca(int packet) -{ - t_pdp *header = pdp_packet_header(packet); - if (!header) return 0; - if (PDP_CA != header->type) return 0; - if (PDP_CA_STANDARD != pdp_type_ca_info(header)->encoding) return 0; - - return 1; -} - -/* convert a CA packet to greyscale */ - -inline void _pdp_type_ca2grey_convert_word(unsigned short int source, short int *dest) -{ - - int i; - for (i = 15; i>=0; i--){ - dest[i] = ((unsigned short)(((short int)(source & 0x8000)) >> 14)) >> 1; - source <<= 1; - } -} - -int pdp_type_ca2grey(int packet) -{ - int w, h, s, x, y, srcindex; - long long offset, xoffset, yoffset; - short int *dest; - unsigned short int *source; - t_pdp *header; - t_pdp *newheader; - int newpacket; - if (!(pdp_type_isvalid_ca(packet))) return -1; - - header = pdp_packet_header(packet); - w = pdp_type_ca_info(header)->width; - h = pdp_type_ca_info(header)->height; - s = w*h; - source = (unsigned short int *)pdp_packet_data(packet); - offset = pdp_type_ca_info(header)->offset; - yoffset = (offset / w) * w; - xoffset = offset % w; - - //post("pdp_type_ca2grey: offset: %d, xoffset: %d, yoffset: %d", offset, xoffset, yoffset); - - newpacket = pdp_packet_new(PDP_IMAGE, s<<1); - newheader = pdp_packet_header(newpacket); - newheader->info.image.width = w; - newheader->info.image.height = h; - newheader->info.image.encoding = PDP_IMAGE_GREY; - dest = (short int *)pdp_packet_data(newpacket); - - -#define check_srcindex \ -if (srcindex >= (s >> 4)) post ("pdp_type_ca2grey: srcindex out of bound"); - -#define check_dstindex \ -if ((x+y) >= s) post ("pdp_type_ca2grey: dstindex out of bound"); - - - /* debug : dont' shift offset - if (0){ - for(y=0; y< (h*w); y+=w){ - for(x=0; x<w; x+=16){ - _pdp_type_ca2grey_convert_word (source[(x+y)>>4], &dest[x+y]); - } - } - return newpacket; - } - */ - - /* create top left */ - for (y=0; y < (h*w) - yoffset; y+=w) { - for (x=0; x< (w - xoffset); x+=16) { - srcindex = (x+xoffset + y+yoffset) >> 4; - //check_srcindex; - //check_dstindex; - _pdp_type_ca2grey_convert_word (source[srcindex], &dest[x+y]); - } - } - - /* create top right */ - for (y=0; y < (h*w) - yoffset; y+=w) { - for (x = (w - xoffset); x < w; x+=16) { - srcindex = (x+xoffset-w + y+yoffset) >> 4; - //check_srcindex; - //check_dstindex; - _pdp_type_ca2grey_convert_word (source[srcindex], &dest[x+y]); - } - } - - /* create bottom left */ - for (y=(h*w) - yoffset; y < h*w; y+=w) { - for (x=0; x< (w - xoffset); x+=16) { - srcindex = (x+xoffset + y+yoffset-(w*h)) >> 4; - //check_srcindex; - //check_dstindex; - _pdp_type_ca2grey_convert_word (source[srcindex], &dest[x+y]); - } - } - - /* create bottom right */ - for (y=(h*w) - yoffset; y < h*w; y+=w) { - for (x = (w - xoffset); x < w; x+=16) { - srcindex = (x+xoffset-w + y+yoffset-(w*h)) >> 4; - //check_srcindex; - //check_dstindex; - _pdp_type_ca2grey_convert_word (source[srcindex], &dest[x+y]); - } - } - - - return newpacket; - -} - - -inline unsigned short int _pdp_type_grey2ca_convert_word(short int *src, short int threshold) -{ - short int tmp; - short int dest = 0; - int i; - - for (i = 15; i >= 0; i--){ - dest <<= 1; - dest |= (src[i] > threshold); - } - - return dest; -} - - - -int pdp_type_grey2ca(int packet, short int threshold) -{ - int w, h, s, x, y, srcindex; - long long offset, xoffset, yoffset; - short int *dest; - short int *source; - t_pdp *header; - t_pdp *newheader; - int newpacket; - if (!(pdp_type_isvalid_image(packet))) return -1; - - header = pdp_packet_header(packet); - w = header->info.image.width; - h = header->info.image.height; - s = w*h; - source = (unsigned short int *)pdp_packet_data(packet); - - if ( (PDP_IMAGE_GREY != header->info.image.encoding) - && (PDP_IMAGE_YV12 != header->info.image.encoding)) return -1; - - newpacket = pdp_packet_new(PDP_CA, s>>3); - newheader = pdp_packet_header(newpacket); - pdp_type_ca_info(newheader)->width = w; - pdp_type_ca_info(newheader)->height = h; - pdp_type_ca_info(newheader)->encoding = PDP_CA_STANDARD; - pdp_type_ca_info(newheader)->offset = 0; - - dest = (short int *)pdp_packet_data(newpacket); - - for(y=0; y< (h*w); y+=w){ - for(x=0; x<w; x+=16){ - dest[(x+y)>>4] = _pdp_type_grey2ca_convert_word (&source[x+y], threshold); - } - } - return newpacket; - - -} - -/* returns a pointer to the ca subheader given the pdp header */ -t_ca *pdp_type_ca_info(t_pdp *x){return (t_ca *)(&x->info.raw);} - - -void pdp_ca_setup(void); -void pdp_ca2image_setup(void); -void pdp_image2ca_setup(void); - - -void pdp_scaf_setup(void) -{ - /* babble */ - post ("PDP: pdp_scaf extension lib (mmx version)"); - - /* setup modules */ - pdp_ca_setup(); - pdp_ca2image_setup(); - pdp_image2ca_setup(); - -} - - - - -#ifdef __cplusplus -} -#endif |