www.pudn.com > kceasy-0.19-rc1-src.rar > simplevlc.h


/***************************************************************************** 
 * simplevlc.h: a simple shared library wrapper around libvlc 
 ***************************************************************************** 
 * Copyright (C) 2004 Markus Kern  
 * 
 * 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 PUROSE.  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., 59 Temple Place - Suite 330, Boston, MA  02111, USA. 
 *****************************************************************************/ 
 
#ifndef __SIMPLEVLC_H 
#define __SIMPLEVLC_H 
 
 
/* TODO: porting */ 
#define SVLC_EXPORT __declspec(dllexport) 
#define SVLC_CC __cdecl 
 
 
/** 
 * Library version this header belongs to 
 */ 
#define SVLC_VERSION_MAJOR	0 
#define SVLC_VERSION_MINOR	1 
#define SVLC_VERSION_MICRO	0 
 
 
/** 
 * Handle for simplevlc instance. 
 */ 
struct _SVlcInstance; /* opaque to user, defined in svlc_instance.h */ 
typedef struct _SVlcInstance SVlcInstance; 
 
/* convenient handle */ 
typedef SVlcInstance* HSVLC; 
 
 
/** 
 * Possible playback states. 
 */ 
typedef enum 
{ 
	SVLC_PLAYBACK_CLOSED  = 0, 
	SVLC_PLAYBACK_LOADING = 1, 
	SVLC_PLAYBACK_OPEN    = 2, 
	SVLC_PLAYBACK_PLAYING = 3, 
	SVLC_PLAYBACK_PAUSED  = 4, 
	SVLC_PLAYBACK_STOPPED = 5, 
	SVLC_PLAYBACK_ERROR   = 6, /* implies SVLC_PLAYBACK_CLOSED */ 
 
	/* force 32bit enum */ 
	SVLC_PLAYBACK_FORCE_SIZE = 0xFFFFFFFF 
} SVlcPlaybackState; 
 
 
/*** 
 * Info about open stream 
 */ 
typedef struct 
{ 
	int audio_streams;      /* number of audio streams */ 
	int video_streams;      /* number of video streams */ 
 
#if 0 
	/* TODO */ 
	int audio_bitrate;      /* kbps */ 
	int audio_samplerate;   /* sample rate in Hz */ 
	char audio_codec[5];    /* codec string */ 
 
	int video_width; 
	int video_height; 
	char video_codec[5];    /* codec string */ 
#endif 
} SVlcStreamInfo; 
 
 
/** 
 * Callback events and their associated data structures 
 */ 
typedef enum 
{ 
	SVLC_CB_STATE_CHANGE    = 0x01, /* The playback state has changed */ 
	SVLC_CB_DISPLAY_POPUP   = 0x02, /* The popup should be opened/closed */ 
	SVLC_CB_POSITION_CHANGE = 0x03, /* The playback postion has changed */ 
	SVLC_CB_KEY_PRESSED     = 0x04, /* A key was pressed on the display */ 
 
	/* force 32bit enum */ 
	SVLC_CB_FORCE_SIZE = 0xFFFFFFFF 
} SVlcCallbackEvent; 
 
/* SVLC_CB_STATE_CHANGE */ 
 
typedef struct 
{ 
	SVlcPlaybackState old_state; 
	SVlcPlaybackState new_state; 
} SVlcCbStateData; 
 
/* SVLC_CB_DISPLAY_POPUP */ 
 
typedef struct 
{ 
	int show;                /* 1: show popup, 0: hide popup */ 
} SVlcCbDisplayPopupData; 
 
/* SVLC_CB_POSITION_CHANGE */ 
 
typedef struct 
{ 
	float position;          /* new position [0,1] */ 
	unsigned int duration;   /* total play length in ms */ 
} SVlcCbPositionChangeData; 
 
/* SVLC_CB_KEY_PRESSED */ 
 
typedef struct 
{ 
	int key;                 /* VLC key ID */ 
} SVlcCbKeyPressedData; 
 
/* Key IDs from vlc */ 
#define SVLC_KEY_MODIFIER         0xFF000000 
#define SVLC_KEY_MODIFIER_ALT     0x01000000 
#define SVLC_KEY_MODIFIER_SHIFT   0x02000000 
#define SVLC_KEY_MODIFIER_CTRL    0x04000000 
#define SVLC_KEY_MODIFIER_META    0x08000000 
#define SVLC_KEY_MODIFIER_COMMAND 0x10000000 
 
#define SVLC_KEY_SPECIAL          0x00FF0000 
#define SVLC_KEY_LEFT             0x00010000 
#define SVLC_KEY_RIGHT            0x00020000 
#define SVLC_KEY_UP               0x00030000 
#define SVLC_KEY_DOWN             0x00040000 
#define SVLC_KEY_SPACE            0x00050000 
#define SVLC_KEY_ENTER            0x00060000 
#define SVLC_KEY_F1               0x00070000 
#define SVLC_KEY_F2               0x00080000 
#define SVLC_KEY_F3               0x00090000 
#define SVLC_KEY_F4               0x000A0000 
#define SVLC_KEY_F5               0x000B0000 
#define SVLC_KEY_F6               0x000C0000 
#define SVLC_KEY_F7               0x000D0000 
#define SVLC_KEY_F8               0x000E0000 
#define SVLC_KEY_F9               0x000F0000 
#define SVLC_KEY_F10              0x00100000 
#define SVLC_KEY_F11              0x00110000 
#define SVLC_KEY_F12              0x00120000 
#define SVLC_KEY_HOME             0x00130000 
#define SVLC_KEY_END              0x00140000 
#define SVLC_KEY_MENU             0x00150000 
#define SVLC_KEY_ESC              0x00160000 
#define SVLC_KEY_PAGEUP           0x00170000 
#define SVLC_KEY_PAGEDOWN         0x00180000 
#define SVLC_KEY_TAB              0x00190000 
#define SVLC_KEY_BACKSPACE        0x001A0000 
#define SVLC_KEY_MOUSEWHEELUP     0x001B0000 
#define SVLC_KEY_MOUSEWHEELDOWN   0x001C0000 
 
#define SVLC_KEY_ASCII            0x0000007F 
#define SVLC_KEY_UNSET            0 
 
 
/** 
 * Function implemented by the user to receive callbacks. 
 * This may be called from various different threads inside VLC which means 
 * you have to keep your callbacks as short as possible! 
 * 
 * @param svlc   Handle to simplevlc instance. 
 * @param event  Reason the callback was raised. 
 * @param edata  Pointer to additional event specific data. 
 * @param udata  Pointer set by set_udata. 
 */ 
typedef void SVLC_CC (*SVlcCallbackFunc) (HSVLC svlc, SVlcCallbackEvent event, void *edata, void *udata); 
 
 
/** 
 * Our interface. The user passes this struct in GetInterface() to retrieve 
 * the function entry points. 
 */ 
typedef struct 
{ 
	/*************************************** 
	 * Instance management 
	 ***************************************/ 
 
	/** 
	 * Create simplevlc instance. 
	 * 
	 * @param verbosity  >= 0 Logging verbosity. 
	 *                     -1 Quiet, don't log anything. 
	 * 
	 * @return  Handle  to instance on success. 
	 *          NULL on error. 
	 */ 
	HSVLC SVLC_CC (*create) (int verbosity); 
 
	/** 
	 * Destroy simplevlc instance. 
	 */ 
	void SVLC_CC (*destroy) (HSVLC svlc); 
 
	/** 
	 * Set callback function. 
	 * 
	 * @param callback  The function that should be called. 
	 * @param events    The events you want to be notified about. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_callback) (HSVLC svlc, SVlcCallbackFunc callback, unsigned int events); 
 
	/** 
	 * Return static VLC version string. 
	 */ 
	char const * SVLC_CC (*get_vlc_version) (void); 
 
	/** 
	 * Attach user data. 
	 */ 
	void SVLC_CC (*set_udata) (HSVLC svlc, void *udata); 
 
	/** 
	 * Retrieve user data. 
	 */ 
	void * SVLC_CC (*get_udata) (HSVLC svlc); 
 
 
	/*************************************** 
	 * Video output 
	 ***************************************/ 
 
	/** 
	 * Set video output window. 
	 * 
	 * @param window  Window for video output (HWND on windows). 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_window) (HSVLC svlc, unsigned int window); 
 
	/** 
	 * Set visualization plugin used for audio playback. 
	 * 
	 * @param name  Name of the visualization plugin, e.g. "goom". NULL removes 
	 *              anything previously set. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_visualization) (HSVLC svlc, const char *name); 
 
	/** 
	 * Set fullscreen mode. This merely maximizes the output window on windows 
	 * (probably other platforms too) so you need to set fitwindow to true and 
	 * the window set with set_window must have no (non-maximized) parents. 
	 * 
	 * @param fullscreen  1 Switch fullscreen on 
	 *                    0 Switch fullscreen off 
	 *                   -1 Toggle fullscreen 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_fullscreen) (HSVLC svlc, int fullscreen); 
 
	/** 
	 * Get fullscreen mode. 
	 * 
	 * @return  1 Fullscreen on. 
	 *          0 Fullscreen off. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*get_fullscreen) (HSVLC svlc); 
 
	/** 
	 * Scale video output to match window size. 
	 * 
	 * @param fullscreen  1 Fit to window. 
	 *                    0 Don't fit to window. 
	 *                   -1 Toggle fit. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_fitwindow) (HSVLC svlc, int fit); 
 
	/** 
	 * Get fit to window mode. 
	 * 
	 * @return  1 Fitting on. 
	 *          0 Fitting off. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*get_fitwindow) (HSVLC svlc); 
 
	/** 
	 * Zoom video. This only has an effect if fitwindow is false. 
	 * 
	 * @param zoom  Zoom factor (e.g. 0.5, 1.0, 1.5, 2.0). 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_zoom) (HSVLC svlc, float zoom); 
 
	/** 
	 * Get current zoom factor. 
	 * 
	 * @return >= 0 Current zoom factor. 
	 *           -1 Error. 
	 */ 
	float SVLC_CC (*get_zoom) (HSVLC svlc); 
 
 
	/*************************************** 
	 * Audio output 
	 ***************************************/ 
 
	/** 
	 * Set audio volume. 
	 * 
	 * @param volume  Volume in [0,1]. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_volume) (HSVLC svlc, float volume); 
 
	/** 
	 * Get audio volume. 
	 * 
	 * @return >= 0 Current volume in [0,1]. 
	 *           -1 Error. 
	 */ 
	float SVLC_CC (*get_volume) (HSVLC svlc); 
 
	/** 
	 * Set audio mute. 
	 * 
	 * @param mute  1 Mute audio 
	 *              0 Unmute audio 
	 *             -1 Toggle mute 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_mute) (HSVLC svlc, int mute); 
 
	/** 
	 * Get audio mute. 
	 * 
	 * @return  1 Muted. 
	 *          0 Not muted. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*get_mute) (HSVLC svlc); 
 
 
	/*************************************** 
	 * Playback 
	 ***************************************/ 
 
	/** 
	 * Play target. 
	 * 
	 * @param target  Target to play, e.g. filename. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*play) (HSVLC svlc, const char *target); 
 
	/** 
	 * Stop playback and remove any targets. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*stop) (HSVLC svlc); 
 
	/** 
	 * Set pause. 
	 * 
	 * @param pause  1 Pause playback 
	 *               0 Resume playback 
	 *              -1 Toggle pause 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*pause) (HSVLC svlc, int pause); 
 
	/** 
	 * Retrieve playback state. 
	 * 
	 * @return  See declaration of SVlcPlaybackState 
	 */ 
	SVlcPlaybackState SVLC_CC (*get_playback_state) (HSVLC svlc); 
 
	/** 
	 * Seek to new stream position (if seekable). 
	 * 
	 * @param position  Position in [0,1] to seek to. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*set_position) (HSVLC svlc, float position); 
 
	/** 
	 * Get current stream position. 
	 * 
	 * @return >= 0 Current postition in [0,1]. 
	 *           -1 Error. 
	 */ 
	float SVLC_CC (*get_position) (HSVLC svlc); 
 
	/** 
	 * Get seekability of current stream. 
	 * 
	 * @return  1 Current stream is seekable 
	 *          0 Current stream is not seekable 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*is_seekable) (HSVLC svlc); 
 
	/** 
	 * Get play length of current stream. 
	 * 
	 * @return > 0 Stream duration in milliseconds. 
	 *           0 No time data available for this stream. 
	 *          -1 Error. 
	 */ 
	int SVLC_CC (*get_duration) (HSVLC svlc); 
 
	/** 
	 * Get information about an the currently opened stream. 
	 * 
	 * @param info  Pointer to SVlcStreamInfo which is filled with the data. 
	 * 
	 * @return  0 Success. 
	 *         -1 Error. 
	 */ 
	int SVLC_CC (*get_stream_info) (HSVLC svlc, SVlcStreamInfo *info); 
 
} SVlcInterface; 
 
 
/** 
 * Fill the passed interface struct with function entry points. 
 * 
 * @return  0 for success. 
 *         -1 on error. 
 */ 
SVLC_EXPORT int SVLC_CC SVLC_GetInterface(SVlcInterface *intf); 
 
 
/** 
 * Called by the user to retrieve interface version. 
 * micro changes are binary compatible. 
 * minor changes are source compatible. 
 * major changes break stuff. 
 */ 
SVLC_EXPORT void SVLC_CC SVLC_GetVersion(int *major, int *minor, int *micro); 
 
 
/** 
 * Called by the user once after loading the library. 
 * Do not use the library if this fails. 
 * 
 * @return  0 for success. 
 *         -1 on error. 
 */ 
SVLC_EXPORT int SVLC_CC SVLC_Initialize(void); 
 
 
/** 
 * Called by the user before unloading the library. 
 */ 
SVLC_EXPORT void SVLC_CC SVLC_Shutdown(void); 
 
 
/** 
 * Convenience typedefs for pointers to exported functions. 
 */ 
typedef int  SVLC_CC (*SVLC_GetInterface_t) (SVlcInterface *intf); 
typedef void SVLC_CC (*SVLC_GetVersion_t)   (int *major, int *minor, int *micro); 
typedef int  SVLC_CC (*SVLC_Initialize_t)   (void); 
typedef void SVLC_CC (*SVLC_Shutdown_t)     (void); 
 
#endif /* __SIMPLEVLC_H */