Ejemplo n.º 1
0
static int
x_tile_generate_map(TileTab *t, NhGtkProgressWindow *w)
{
    struct proxycb_get_glyph_mapping_res *glyph_map;
    struct proxy_tilemap *tile_map;
    struct _x_tile_generate_map_pulse *pulse;
    glyph_map = nh_proxy_cache_get_glyph_mapping(GTK_WIDGET(w));
    if (!glyph_map) {
	pline("Cannot get glyph mapping.");
	return 0;
    }
    no_glyph = glyph_map->no_glyph;
    nh_gtk_progress_window_complete_stage(w);
    tile_map = x_tile_load_tilemap(t, w);
    if (!tile_map) {
	proxy_cb_free_glyph_mapping(glyph_map);
	return 0;
    }
    nh_gtk_progress_window_complete_stage(w);
    total_tiles_used = tile_map->no_tiles;
    tiles_per_row = ceil_sqrt(total_tiles_used);
    tiles_per_col = (total_tiles_used + tiles_per_row - 1) / tiles_per_row;
    pulse = g_new(struct _x_tile_generate_map_pulse, 1);
    pulse->count = 0;
    pulse->length = proxy_glyph_map_get_length(glyph_map);
    pulse->step = pulse->length >= 100 ? pulse->length / 100 : 1;
    pulse->w = w;
    GTK_glyph2tile = proxy_map_glyph2tile(glyph_map, tile_map,
      x_tile_generate_map_pulse, pulse);
    g_free(pulse);
    proxy_cb_free_glyph_mapping(glyph_map);
    proxy_free_tilemap(tile_map);
    nh_gtk_progress_window_complete_stage(w);
    return 1;
}
Ejemplo n.º 2
0
static int
x_tile_load_map(TileTab *t, NhGtkProgressWindow *w)
{
    int retval, rv;
    NhExtXdr xdr;
    NhExtIO *io;
    if (x_tile_loadmap.io) {
	nhext_xdrio_create(&xdr, x_tile_loadmap.io, NHEXT_XDR_DECODE);
	retval = nhext_xdr_int(&xdr, &total_tiles_used);
	tiles_per_row = ceil_sqrt(total_tiles_used);
	tiles_per_col = (total_tiles_used + tiles_per_row - 1) / tiles_per_row;
	retval &= nhext_xdr_array(&xdr, (char **)&GTK_glyph2tile, &no_glyph,
	  (unsigned int)-1, sizeof(short), nhext_xdr_short);
	nhext_xdr_destroy(&xdr);
	GTK_io_close(x_tile_loadmap.io);
	if (!retval) {
	    free(GTK_glyph2tile);
	    GTK_glyph2tile = NULL;
	} else
	    nh_gtk_progress_window_complete_stage(w);
    }
    if (!GTK_glyph2tile) {
	retval = x_tile_generate_map(t, w);
	if (retval) {
	    io = GTK_io_open(x_tile_loadmap.file, NHEXT_IO_WRONLY);
	    if (io) {
		nhext_xdrio_create(&xdr, io, NHEXT_XDR_ENCODE);
		rv = nhext_xdr_int(&xdr, &total_tiles_used);
		rv &= nhext_xdr_array(&xdr, (char **)&GTK_glyph2tile, &no_glyph,
		  (unsigned int)-1, sizeof(short), nhext_xdr_short);
		nhext_xdr_destroy(&xdr);
		GTK_io_close(io);
		if (!rv)
		    remove(x_tile_loadmap.file);
	    }
	}
    }
    free(x_tile_loadmap.file);
    return retval;
}
Ejemplo n.º 3
0
static void lvdo_dec_frame(unsigned char *payload, size_t payloadlen, const unsigned char *frame, unsigned int blocksize, unsigned int quantizer, unsigned int qmin, unsigned int qmax, unsigned int width, unsigned int height, int verbose, double *in, double *out, const fftw_plan plan, const unsigned int *zigzag_reverse) {
    unsigned int payloadi = 0, blocki, blockj, pixeli, pixelj;
    unsigned int lastbyte = 0, availbit = 0;
    for(blocki = 0; blocki*blocksize < height; blocki++)
        for(blockj = 0; blockj*blocksize < width; blockj++) {
            for(pixeli = 0; pixeli < blocksize; pixeli++)
                for(pixelj = 0; pixelj < blocksize; pixelj++)
                    in[pixeli*blocksize+pixelj] = (signed char) (frame[(blocki*blocksize+pixeli)*width+(blockj*blocksize+pixelj)] ^ 0x80)*(int) ceil_sqrt(qmax-qmin)/(blocksize*2*0.84375);
            fftw_execute(plan);
            out[0] /= 2;
            for(pixeli = 1; pixeli < blocksize; pixeli++)
                out[pixeli] *= M_SQRT1_2;
            for(pixeli = blocksize; pixeli < blocksize*blocksize; pixeli += blocksize)
                out[pixeli] *= M_SQRT1_2;
            if(verbose)
                print_block_double(out, blocksize);
            for(pixeli = qmin; pixeli < qmax; pixeli++) {
                lastbyte |= prevent_byte_overflow(round((out[zigzag_reverse[pixeli]]+128)/(1<<quantizer)))<<availbit;
                availbit += 8-quantizer;
                if(availbit > 7) {
                    if(payloadi != payloadlen)
                        payload[payloadi++] = (unsigned char) lastbyte;
                    lastbyte >>= 8;
                    availbit -= 8;
                }
            }
        }
}