== livido.h ==
{{{
/* LiViDO is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   LiViDO 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
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this source code; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


   LiViDO is developed by:

   Niels Elburg - http://veejay.sf.net

   Gabriel "Salsaman" Finch - http://lives.sourceforge.net

   Denis "Jaromil" Rojo - http://freej.dyne.org

   Tom Schouten - http://zwizwa.fartit.com

   Andraz Tori - http://cvs.cinelerra.org

   reviewed with suggestions and contributions from:

   Silvano "Kysucix" Galliani - http://freej.dyne.org

   Kentaro Fukuchi - http://megaui.net/fukuchi

   Jun Iio - http://www.malib.net

   Carlo Prelz - http://www2.fluido.as:8080/

*/

/* (C) Gabriel "Salsaman" Finch, Niels Elburg, Dennis "Jaromil" Rojo, 2005 */

#ifndef __LIVIDO_H__
#define __LIVIDO_H__

#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */

#define LIVIDO_API_VERSION 1

/* Palette types */
/* RGB palettes */
#define LIVIDO_PALETTE_RGB888 1
#define LIVIDO_PALETTE_RGB24 1
#define LIVIDO_PALETTE_BGR888 2
#define LIVIDO_PALETTE_BGR24 2
#define LIVIDO_PALETTE_RGB161616 3
#define LIVIDO_PALETTE_RGB48 3
#define LIVIDO_PALETTE_BGR161616 4
#define LIVIDO_PALETTE_BGR48 4
#define LIVIDO_PALETTE_RGBA8888 5
#define LIVIDO_PALETTE_RGBA32 5
#define LIVIDO_PALETTE_ABGR8888 6
#define LIVIDO_PALETTE_ABGR32 6
#define LIVIDO_PALETTE_RGBA161616 7
#define LIVIDO_PALETTE_RGBA64 7
#define LIVIDO_PALETTE_ABGR161616 8
#define LIVIDO_PALETTE_ABGR64 8
#define LIVIDO_PALETTE_ARGB8888 9
#define LIVIDO_PALETTE_ARGB32 9
#define LIVIDO_PALETTE_BGRA8888 10
#define LIVIDO_PALETTE_BGRA32 10
#define LIVIDO_PALETTE_ARGB161616 11
#define LIVIDO_PALETTE_ARGB64 11
#define LIVIDO_PALETTE_BGRA161616 12
#define LIVIDO_PALETTE_BGRA64 12
#define LIVIDO_PALETTE_RGBFLOAT 13
#define LIVIDO_PALETTE_BGRFLOAT 14
#define LIVIDO_PALETTE_RGBAFLOAT 15
#define LIVIDO_PALETTE_ABGRFLOAT 16
#define LIVIDO_PALETTE_ARGBFLOAT  17
#define LIVIDO_PALETTE_BGRAFLOAT 18
#define LIVIDO_PALETTE_RGB565 19
#define LIVIDO_PALETTE_BGR565 20

/* YUV palettes */
#define LIVIDO_PALETTE_YUV422P 513
#define LIVIDO_PALETTE_YV16 513
#define LIVIDO_PALETTE_YUV420P 514
#define LIVIDO_PALETTE_YV12 514
#define LIVIDO_PALETTE_YVU420P 515
#define LIVIDO_PALETTE_I420 515
#define LIVIDO_PALETTE_YUV444P 516
#define LIVIDO_PALETTE_YUVA4444P 517
#define LIVIDO_PALETTE_YUV4444P 517
#define LIVIDO_PALETTE_YUYV8888 518
#define LIVIDO_PALETTE_UYVY8888 519
#define LIVIDO_PALETTE_YUV411 520

/* Alpha palettes */
#define LIVIDO_PALETTE_A1 1025
#define LIVIDO_PALETTE_A2 1026
#define LIVIDO_PALETTE_A4 1027
#define LIVIDO_PALETTE_A8 1028
#define LIVIDO_PALETTE_A16 1029
#define LIVIDO_PALETTE_AFLOAT 1030

/* Filter flags */
#define LIVIDO_FILTER_NON_REALTIME    (1<<0)
#define LIVIDO_FILTER_CAN_DO_INPLACE  (1<<1)
#define LIVIDO_FILTER_CAN_DO_SCALED   (1<<2)
#define LIVIDO_FILTER_CAN_DO_VIEWPORT (1<<3)
#define LIVIDO_FILTER_SELF_AUTOMATION (1<<4)
#define LIVIDO_FILTER_FPS_NEEDED      (1<<5)
#define LIVIDO_FILTER_STATELESS       (1<<6)

/* Channel flags */
#define LIVIDO_CHANNEL_MASK (1<<0)
#define LIVIDO_CHANNEL_HOST_CAN_RESIZE (1<<1)
#define LIVIDO_CHANNEL_HOST_CAN_CHANGE_PALETTE (1<<2)

/* Parameter flags */
#define LIVIDO_PARAMETER_NEEDS_REINIT (1<<0)

/* Property flags */
#define LIVIDO_PROPERTY_READONLY (1<<0)

/* YUV sampling types */
#define LIVIDO_YUV_SAMPLING_NONE 0
#define LIVIDO_YUV_SAMPLING_SMPTE 1
#define LIVIDO_YUV_SAMPLING_JPEG 2
#define LIVIDO_YUV_SAMPLING_MPEG2 3
#define LIVIDO_YUV_SAMPLING_DVPAL 4
#define LIVIDO_YUV_SAMPLING_DVNTSC 5

/* Interlace types */
#define LIVIDO_INTERLACE_NONE            0
#define LIVIDO_INTERLACE_TOPFIRST        1
#define LIVIDO_INTERLACE_BOTTOMFIRST     2
#define LIVIDO_INTERLACE_PROGRESSIVE     3

/* Viewport types */
#define LIVIDO_VIEWPORT_RECTANGLE 1
#define LIVIDO_VIEWPOERT_POLYGON 2
#define LIVIDO_VIEWPORT_CIRCLE 3
#define LIVIDO_VIEWPORT_OVAL 4
#define LIVIDO_VIEWPORT_TRIANGLE 5

/* Colorkey colorspaces */
#define LIVIDO_COLORKEY_RGB  0
#define LIVIDO_COLORKEY_HSV  1
#define LIVIDO_COLORKEY_HSL  2
#define LIVIDO_COLORKEY_CMYK 3

/* Livido errors */
/* Core errors */
#define LIVIDO_NO_ERROR 0
#define LIVIDO_ERROR_MEMORY_ALLOCATION 1
#define LIVIDO_ERROR_PROPERTY_READONLY 2
#define LIVIDO_ERROR_NOSUCH_ELEMENT 3
#define LIVIDO_ERROR_NOSUCH_PROPERTY 4
#define LIVIDO_ERROR_WRONG_ATOM_TYPE 5

/* Plugin errors */
#define LIVIDO_ERROR_TOO_MANY_INSTANCES 6
#define LIVIDO_ERROR_HARDWARE 7

/* Atom types */
/* Fundamental atoms */
#define LIVIDO_ATOM_TYPE_INT 1
#define LIVIDO_ATOM_TYPE_FLOAT 2
#define LIVIDO_ATOM_TYPE_LONG 3
#define LIVIDO_ATOM_TYPE_BOOLEAN 4
#define LIVIDO_ATOM_TYPE_STRING 5

/* Pointer atoms */
#define LIVIDO_ATOM_TYPE_VOIDPTR 65
#define LIVIDO_ATOM_TYPE_UINT8PTR 66
#define LIVIDO_ATOM_TYPE_UINT16PTR 67
#define LIVIDO_ATOM_TYPE_UINT32PTR 68
#define LIVIDO_ATOM_TYPE_FLOATPTR 69
#define LIVIDO_ATOM_TYPE_FILTERPTR 70
#define LIVIDO_ATOM_TYPE_PORTPTR 71

/* Port types */
#define LIVIDO_PORT_TYPE_FILTER_LIST 1
#define LIVIDO_PORT_TYPE_INFO 2
#define LIVIDO_PORT_TYPE_CHANNEL 3
#define LIVIDO_PORT_TYPE_PARAMETER 4
#define LIVIDO_PORT_TYPE_KEYFRAME 5
#define LIVIDO_PORT_TYPE_GUI 6

/* Parameter port hints */
#define NUMBER 1
#define TEXT 2
#define SWITCH 3
#define LIST 4
#define CHOICE 5
#define COLORKEY 6
#define COORDINATE 7
#define TRANSITION 8

extern void *livido_malloc_f (size_t size);
extern void livido_free_f (void *ptr);
extern void *livido_memset_f (void *s, int c, size_t n);
extern void *livido_memcpy_f (void *dest, const void *src, size_t n);

#ifndef HAVE_LIVIDO_PORT_T
#define HAVE_LIVIDO_PORT_T

typedef struct livido_property livido_property_t;
typedef livido_property_t livido_port_t;

typedef struct livido_atom {
  size_t size;
  void *value;
} livido_atom_t;

typedef struct livido_storage {
  int num_elements;
  int atom_type;
  union {
    livido_atom_t *atom;
    livido_atom_t **array;
  };
} livido_storage_t;

struct livido_property {
  const char *key;
  livido_storage_t *data;
  int flags;
  livido_property_t *next;
};

#endif

typedef struct livido_filter { 
  livido_port_t *info;
  livido_port_t **in_channels;
  livido_port_t **out_channels;
  livido_port_t **in_parameters;
  livido_port_t **out_parameters;
} livido_filter_t;

extern void livido_port_free (livido_port_t *prop);
extern livido_port_t *livido_port_new(int port_type);
extern char **livido_list_properties(livido_port_t *port);
extern int livido_property_set(livido_port_t *port, const char *key, int atom_type, int num_elems, void *value, size_t *size);
extern int livido_property_get(livido_port_t *port, const char *key, int idx, void *value);
extern int livido_property_num_elements(livido_port_t *port, const char *key);
extern int livido_property_element_size(livido_port_t *port, const char *key, int idx);
extern int livido_property_atom_type(livido_port_t *port, const char *key);
extern int livido_property_set_readonly(livido_port_t *port, const char *key);
extern int livido_property_get_readonly(livido_port_t *port, const char *key);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif // #ifndef __LIVIDO_H__
}}}