mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-21 15:20:02 +01:00
dont send contour, send convex hull only
git-svn-id: svn://code.dyne.org/veejay/trunk@1011 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
@@ -1,229 +0,0 @@
|
||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This file is free documentation; the Free Software Foundation gives
|
||||
unlimited permission to copy, distribute and modify it.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. (Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.)
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You only need
|
||||
`configure.ac' if you want to change it or regenerate `configure' using
|
||||
a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes awhile. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. Run `./configure --help'
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not support the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a
|
||||
time in the source code directory. After you have installed the
|
||||
package for one architecture, use `make distclean' before reconfiguring
|
||||
for another architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=PATH' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out
|
||||
automatically, but needs to determine by the type of machine the package
|
||||
will run on. Usually, assuming the package is built to be run on the
|
||||
_same_ architectures, `configure' can figure that out, but if it prints
|
||||
a message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
will cause the specified gcc to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
|
||||
@@ -243,7 +243,7 @@ static void contourextract_centroid()
|
||||
|
||||
static int bg_frame_ = 0;
|
||||
|
||||
extern void vj_composite_transform( void *coords, int points, int blob_id, int cx , int cy, uint8_t *plane);
|
||||
extern void vj_composite_transform( void *coords, int points, int blob_id, int cx , int cy, int w, int h, int num_objects,uint8_t *plane);
|
||||
extern int vj_composite_active();
|
||||
|
||||
void contourextract_apply(void *ed, VJFrame *frame,int width, int height,
|
||||
@@ -324,26 +324,13 @@ void contourextract_apply(void *ed, VJFrame *frame,int width, int height,
|
||||
veejay_memset( Y, 0, len );
|
||||
veejay_memset( Cb , 128, uv_len);
|
||||
veejay_memset( Cr , 128, uv_len );
|
||||
/*
|
||||
//@ show dt map as grayscale image, intensity starts at 128
|
||||
for( i = 0; i < len ; i ++ )
|
||||
{
|
||||
if( dt_map[i] == feather )
|
||||
Y[i] = 0xff; //@ border white
|
||||
else
|
||||
Y[i] = 0;
|
||||
//else if( dt_map[i] > feather ) {
|
||||
// Y[i] = 128 + (dt_map[i] % 128); //grayscale value
|
||||
// } else if ( dt_map[i] == 1 ) {
|
||||
// Y[i] = 0xff;
|
||||
// } else {
|
||||
// Y[i] = 0; //@ black (background)
|
||||
// }
|
||||
Cb[i] = 128;
|
||||
Cr[i] = 128;
|
||||
}
|
||||
*/
|
||||
|
||||
int num_objects = 0;
|
||||
for( i = 1 ; i <= labels; i ++ )
|
||||
if( blobs[i] )
|
||||
num_objects ++;
|
||||
|
||||
|
||||
//@ Iterate over blob's bounding boxes and extract contours
|
||||
for( i = 1; i <= labels; i ++ )
|
||||
{
|
||||
@@ -358,11 +345,19 @@ void contourextract_apply(void *ed, VJFrame *frame,int width, int height,
|
||||
int x2 = nx + size_y;
|
||||
int y2 = ny + size_y;
|
||||
int n_points = 0;
|
||||
|
||||
int center = 0;
|
||||
int dx1 = 0,dy1=0;
|
||||
for( k = y1; k < y2; k ++ )
|
||||
{
|
||||
for( j = x1; j < x2; j ++ )
|
||||
{
|
||||
//@ use distance transform map to find centroid (fuzzy)
|
||||
if( dt_map[ (k * width + j) ] > center )
|
||||
{
|
||||
center = dt_map[ (k* width +j) ];
|
||||
dx1 = j;
|
||||
dy1 = k;
|
||||
}
|
||||
if( dt_map[ (k * width + j) ] == feather )
|
||||
{
|
||||
Y[ (k * width +j)] = 0xff;
|
||||
@@ -378,8 +373,7 @@ void contourextract_apply(void *ed, VJFrame *frame,int width, int height,
|
||||
}
|
||||
}
|
||||
if( vj_composite_active() )
|
||||
vj_composite_transform( (void*) points, n_points, i, width,height,(mode == 2 ? Y: NULL));
|
||||
|
||||
vj_composite_transform( (void*) points, n_points, i,dx1,dy1, width,height,num_objects,(mode == 2 ? Y: NULL));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -399,7 +399,7 @@ void texmap_apply(void *ed, VJFrame *frame,
|
||||
}
|
||||
}
|
||||
}
|
||||
vj_composite_transform( coord_x, coord_y, points, i);
|
||||
//vj_composite_transform( coord_x, coord_y, points, i);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -527,9 +527,9 @@ int veejay_composite_active( veejay_t *info )
|
||||
return info->settings->composite;
|
||||
}
|
||||
|
||||
void veejay_composite_transform_points( veejay_t *info, void *coords, int points, int blob_id, int cx, int cy, uint8_t *plane )
|
||||
void veejay_composite_transform_points( veejay_t *info, void *coords, int points, int blob_id, int cx, int cy,int w, int h,int num, uint8_t *plane )
|
||||
{
|
||||
composite_transform_points( info->composite, coords, points, blob_id,cx,cy, plane);
|
||||
composite_transform_points( info->composite, coords, points, blob_id,cx,cy,w,h, num,plane);
|
||||
}
|
||||
|
||||
void veejay_auto_loop(veejay_t *info)
|
||||
@@ -914,7 +914,7 @@ static int veejay_screen_update(veejay_t * info )
|
||||
|
||||
video_playback_setup *settings = info->settings;
|
||||
|
||||
if(settings->composite==1)
|
||||
if(settings->composite==1 && info->sdl[0])
|
||||
{
|
||||
if(!vj_sdl_lock( info->sdl[0] ) )
|
||||
return 0;
|
||||
|
||||
@@ -64,7 +64,7 @@ void veejay_busy(veejay_t *info);
|
||||
|
||||
int veejay_increase_frame(veejay_t * info, long numframes);
|
||||
|
||||
void veejay_composite_transform_points( veejay_t *info, void *coords, int points, int blob_id, int cx, int cy,uint8_t *plane );
|
||||
void veejay_composite_transform_points( veejay_t *info, void *coords, int points, int blob_id, int cx, int cy,int w, int h, int num_objects,uint8_t *plane );
|
||||
|
||||
int veejay_composite_active( veejay_t *info );
|
||||
|
||||
|
||||
@@ -701,9 +701,9 @@ int vj_composite_active()
|
||||
return veejay_composite_active( info );
|
||||
}
|
||||
|
||||
void vj_composite_transform( void *coords, int points, int blob_id, int cx, int cy, uint8_t *plane)
|
||||
void vj_composite_transform( void *coords, int points, int blob_id, int cx, int cy, int w, int h, int num_objects, uint8_t *plane)
|
||||
{
|
||||
veejay_composite_transform_points( info, coords, points, blob_id, cx, cy,plane );
|
||||
veejay_composite_transform_points( info, coords, points, blob_id, cx, cy,w,h,num_objects,plane );
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
||||
@@ -271,10 +271,10 @@ void composite_process( void *compiz, uint8_t *img_dat[3], VJFrame *input, int
|
||||
}
|
||||
}
|
||||
}
|
||||
void composite_transform_points( void *compiz, void *coords, int n, int blob_id, int cx, int cy,uint8_t *plane )
|
||||
void composite_transform_points( void *compiz, void *coords, int n, int blob_id, int cx, int cy,int w, int h,int num_objects,uint8_t *plane )
|
||||
{
|
||||
composite_t *c = (composite_t*) compiz;
|
||||
viewport_transform_coords( c->vp1, coords, n , blob_id,cx,cy, plane);
|
||||
viewport_transform_coords( c->vp1, coords, n , blob_id,cx,cy,w,h,num_objects, plane);
|
||||
}
|
||||
void composite_blit( void *compiz, uint8_t *yuyv )
|
||||
{
|
||||
|
||||
@@ -27,5 +27,5 @@ void composite_process( void *compiz, uint8_t *in[3], VJFrame *input, int vp_
|
||||
void composite_blit( void *compiz,uint8_t *yuyv );
|
||||
void composite_get_blit_buffer( void *compiz, uint8_t *buf[3] );
|
||||
void *composite_get_vp( void *data );
|
||||
void composite_transform_points( void *compiz, void *coords, int n, int blob_id, int cx, int cy, uint8_t *plane );
|
||||
void composite_transform_points( void *compiz, void *coords, int n, int blob_id, int cx, int cy, int w, int h,int num_objects,uint8_t *plane );
|
||||
#endif
|
||||
|
||||
@@ -110,6 +110,7 @@ typedef struct
|
||||
uint8_t *img[4];
|
||||
matrix_t *M;
|
||||
matrix_t *m;
|
||||
matrix_t *T;
|
||||
char *help;
|
||||
uint8_t *grid;
|
||||
uint8_t grid_val;
|
||||
@@ -119,6 +120,8 @@ typedef struct
|
||||
int32_t ttx1,ttx2,tty1,tty2;
|
||||
int mode;
|
||||
int32_t *buf;
|
||||
void *sender;
|
||||
uint32_t seq_id;
|
||||
} viewport_t;
|
||||
|
||||
typedef struct
|
||||
@@ -1191,6 +1194,7 @@ void viewport_destroy( void *data )
|
||||
{
|
||||
if( v->M ) free( v->M );
|
||||
if( v->m ) free( v->m );
|
||||
if( v->T ) free( v->T );
|
||||
if( v->grid) free( v->grid );
|
||||
if( v->map ) free( v->map );
|
||||
if( v->help ) free( v->help );
|
||||
@@ -1333,7 +1337,7 @@ void *viewport_init(int x0, int y0, int w0, int h0, int w, int h, const char *ho
|
||||
// calculate initial view
|
||||
viewport_process( v );
|
||||
|
||||
v->buf = vj_calloc( sizeof(int32_t) * 24000 );
|
||||
v->buf = vj_calloc( sizeof(int32_t) * 5000 );
|
||||
|
||||
return (void*)v;
|
||||
}
|
||||
@@ -1606,7 +1610,6 @@ void viewport_projection_inc( void *data, int incr, int screen_width, int screen
|
||||
|
||||
#ifdef ANIMAX
|
||||
#include <libvjnet/mcastsender.h>
|
||||
static void *sender_ = NULL;
|
||||
#define GROUP "227.0.0.17"
|
||||
#define PORT_NUM 1234
|
||||
#endif
|
||||
@@ -1695,6 +1698,36 @@ point_t **chainhull_2d( point_t **p , int n, int *res )
|
||||
return H;
|
||||
}
|
||||
|
||||
static void shell_sort_points_by_degree( double *a , point_t **p, int n )
|
||||
{
|
||||
int i,j,increment=3;
|
||||
double temp;
|
||||
|
||||
while( increment > 0 )
|
||||
{
|
||||
for( i = 0; i < n; i ++ )
|
||||
{
|
||||
j=i;
|
||||
temp = a[i];
|
||||
while(( j>= increment) && (a[j-increment] > temp ))
|
||||
{
|
||||
a[j] = a[j-increment];
|
||||
p[j]->x = p[j-increment]->x;
|
||||
p[j]->y = p[j-increment]->y;
|
||||
j = j - increment;
|
||||
}
|
||||
a[j] = temp;
|
||||
}
|
||||
if( increment / 2 != 0 )
|
||||
increment = increment / 2;
|
||||
else if (increment ==1 )
|
||||
increment = 0;
|
||||
else
|
||||
increment = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void sort_points_by_degree( double *a, point_t **p, int n )
|
||||
{
|
||||
int i;
|
||||
@@ -1718,45 +1751,59 @@ static void sort_points_by_degree( double *a, point_t **p, int n )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void viewport_transform_coords(
|
||||
void *data,
|
||||
void *input,
|
||||
int n,
|
||||
int blob_id,
|
||||
int blob_id,
|
||||
int center_x,
|
||||
int center_y,
|
||||
int wid,
|
||||
int hei,
|
||||
int num_objects,
|
||||
uint8_t *plane )
|
||||
{
|
||||
int i, res = 0;
|
||||
viewport_t *v = (viewport_t*) data;
|
||||
if( n <= 0 )
|
||||
return;
|
||||
#ifdef ANIMAX
|
||||
if(! v->sender )
|
||||
{
|
||||
v->sender = mcast_new_sender( GROUP );
|
||||
v->seq_id = 0;
|
||||
}
|
||||
if(!v->sender)
|
||||
return;
|
||||
#endif
|
||||
|
||||
matrix_t *tmp = viewport_matrix();
|
||||
matrix_t *im = viewport_invert_matrix( v->M, tmp );
|
||||
int i;
|
||||
int res = 0;
|
||||
if( !v->T )
|
||||
{
|
||||
matrix_t *tmp = viewport_matrix();
|
||||
v->T = viewport_invert_matrix( v->M, tmp );
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
point_t **points = (point_t**) input;
|
||||
double *array = (double*) vj_malloc( (n+3) * sizeof(double));
|
||||
//double *array = (double*) vj_malloc( (n+3) * sizeof(double));
|
||||
|
||||
uint32_t cx=0,cy=0;
|
||||
for( i = 0; i < n; i ++ )
|
||||
{
|
||||
cx += points[i]->x;
|
||||
cy += points[i]->y;
|
||||
array[i] = atan2( (points[i]->x - cx), (points[i]->y - cy) ) * (180.0/M_PI );
|
||||
}
|
||||
cx = cx / n;
|
||||
cy = cy / n;
|
||||
// for( i = 0; i < n; i ++ )
|
||||
// array[i] = atan2( (points[i]->x - center_x), (points[i]->y - center_y) ) * (180.0/M_PI );
|
||||
|
||||
//@ convex hull
|
||||
point_t **contour = chainhull_2d( points, n, &res );
|
||||
|
||||
if( res > 256 )
|
||||
{
|
||||
veejay_msg(1, "Convex Hull has %d points, Maximum allowed is 256", res );
|
||||
res = 256;
|
||||
}
|
||||
|
||||
if ( plane )
|
||||
{
|
||||
for( i = 0; i < (res-1); i ++ )
|
||||
{
|
||||
//@ draw lines in plane
|
||||
//@ draw polygon
|
||||
viewport_line( plane,
|
||||
contour[i]->y,
|
||||
contour[i]->x,
|
||||
@@ -1766,11 +1813,11 @@ void viewport_transform_coords(
|
||||
hei,
|
||||
200 );
|
||||
}
|
||||
|
||||
plane[ center_y * wid + center_x ] = 0xff; //@ display centroid
|
||||
}
|
||||
|
||||
//@ fixme: sort_points_by_degree has a very bad performance
|
||||
//
|
||||
sort_points_by_degree( array, points, n );
|
||||
// shell_sort_points_by_degree( array, points, n );
|
||||
//@ Protocol:
|
||||
//@ |....|....|....|....|....|....| --> |....|
|
||||
//@ 0 4 8 12 16 20 24 N bytes
|
||||
@@ -1779,44 +1826,53 @@ void viewport_transform_coords(
|
||||
//@ CP: Number of Contour points
|
||||
//@ HPi:A point of the convex hull
|
||||
//@ CPi:A point of the contour
|
||||
|
||||
|
||||
v->buf[0] = blob_id;
|
||||
v->buf[1] = res;
|
||||
v->buf[2] = n;
|
||||
int j = 3;
|
||||
v->buf[1] = res*2;
|
||||
// v->buf[2] = n*2;
|
||||
v->buf[2] = -1;
|
||||
v->buf[3] = v->seq_id ++;
|
||||
v->buf[4] = num_objects;
|
||||
int j = 5;
|
||||
for( i = 0; i < res; i ++ )
|
||||
{
|
||||
float dx1,dy1;
|
||||
point_map( im, contour[i]->x, contour[i]->y, &dx1, &dy1 );
|
||||
point_map( v->T, contour[i]->x, contour[i]->y, &dx1, &dy1 );
|
||||
v->buf[j+0] = dx1 / (v->w / 1000.0f );
|
||||
v->buf[j+1] = dy1 / (v->h / 1000.0f );
|
||||
j+=2;
|
||||
}
|
||||
/*
|
||||
for( i = 0; i < n; i ++ )
|
||||
{
|
||||
float dx1,dy1;
|
||||
point_map( im, points[i]->x, points[i]->y, &dx1,&dy1 );
|
||||
point_map( v->T, points[i]->x, points[i]->y, &dx1,&dy1 );
|
||||
v->buf[j + 0] = dx1 / (v->w / 1000.0f);
|
||||
v->buf[j + 1] = dy1 / (v->h / 1000.0f);
|
||||
j += 2;
|
||||
}
|
||||
*/
|
||||
int payload = ((res * 2 + 5) * sizeof(int));
|
||||
int left = 1024 - payload;
|
||||
if(left > 0)
|
||||
veejay_memset( v->buf + payload, 0, left );
|
||||
|
||||
#ifdef ANIMAX
|
||||
if(! sender_ )
|
||||
sender_ = mcast_new_sender( GROUP );
|
||||
if(mcast_send( sender_, v->buf, (3+res+n) * sizeof(int32_t), PORT_NUM )<=0)
|
||||
// int result = mcast_send( v->sender, v->buf, (res*2+4) * sizeof(int32_t), PORT_NUM );
|
||||
|
||||
int result = mcast_send( v->sender, v->buf, 1024, PORT_NUM );
|
||||
|
||||
if(result<=0)
|
||||
{
|
||||
veejay_msg(0, "Cannot send contour over mcast %s:%d", GROUP,PORT_NUM );
|
||||
mcast_close_sender( sender_ );
|
||||
sender_ = NULL;
|
||||
mcast_close_sender( v->sender );
|
||||
v->sender = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
free(contour);
|
||||
free(array);
|
||||
// free(array);
|
||||
|
||||
free(im);
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
void viewport_external_mouse( void *data, uint8_t *img[3], int sx, int sy, int button, int frontback, int screen_width, int screen_height )
|
||||
|
||||
@@ -42,5 +42,5 @@ void viewport_produce_full_img_yuyv( void *vdata, uint8_t *img[3], uint8_t *out_
|
||||
void viewport_draw_interface_color( void *vdata, uint8_t *img[3] );
|
||||
void viewport_set_marker( void *vdata, int status );
|
||||
void viewport_projection_inc( void *data, int incr , int w, int h );
|
||||
void viewport_transform_coords( void *data, void *coords, int n, int blob_id, int cx, int cy , uint8_t *plane);
|
||||
void viewport_transform_coords( void *data, void *coords, int n, int blob_id, int cx, int cy ,int w, int h, int num_objects,uint8_t *plane);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user