summaryrefslogtreecommitdiff
path: root/src/xine-engine/xine_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xine-engine/xine_interface.c')
-rw-r--r--src/xine-engine/xine_interface.c318
1 files changed, 318 insertions, 0 deletions
diff --git a/src/xine-engine/xine_interface.c b/src/xine-engine/xine_interface.c
new file mode 100644
index 000000000..fe8e822e3
--- /dev/null
+++ b/src/xine-engine/xine_interface.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2000-2002 the xine project
+ *
+ * This file is part of xine, a free video player.
+ *
+ * xine 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.
+ *
+ * xine 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ *
+ * $Id: xine_interface.c,v 1.2 2002/09/04 23:31:13 guenter Exp $
+ *
+ * convenience/abstraction layer, functions to implement
+ * libxine's public interface
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <stdarg.h>
+#if defined (__linux__)
+#include <endian.h>
+#elif defined (__FreeBSD__)
+#include <machine/endian.h>
+#endif
+
+#include "xine_internal.h"
+#include "audio_out.h"
+#include "video_out.h"
+#include "demuxers/demux.h"
+
+/*
+ * version information / checking
+ */
+
+char *xine_get_version_string(void) {
+ return VERSION;
+}
+
+void xine_get_version (int *major, int *minor, int *sub) {
+ *major = XINE_MAJOR;
+ *minor = XINE_MINOR;
+ *sub = XINE_SUB;
+}
+
+int xine_check_version(int major, int minor, int sub) {
+
+ if((XINE_MAJOR > major) ||
+ ((XINE_MAJOR == major) && (XINE_MINOR > minor)) ||
+ ((XINE_MAJOR == major) && (XINE_MINOR == minor) && (XINE_SUB >= sub)))
+ return 1;
+
+ return 0;
+}
+
+/*
+ * public config object access functions
+ */
+
+char* xine_config_register_string (xine_t *self,
+ char *key,
+ char *def_value,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data) {
+
+ return self->config->register_string (self->config,
+ key,
+ def_value,
+ description,
+ help,
+ exp_level,
+ changed_cb,
+ cb_data);
+
+}
+
+int xine_config_register_range (xine_t *self,
+ char *key,
+ int def_value,
+ int min, int max,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data) {
+ return self->config->register_range (self->config,
+ key, def_value, min, max,
+ description, help, exp_level,
+ changed_cb, cb_data);
+}
+
+
+int xine_config_register_enum (xine_t *self,
+ char *key,
+ int def_value,
+ char **values,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data) {
+ return self->config->register_enum (self->config,
+ key, def_value, values,
+ description, help, exp_level,
+ changed_cb, cb_data);
+}
+
+
+int xine_config_register_num (xine_t *self,
+ char *key,
+ int def_value,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data) {
+ return self->config->register_num (self->config,
+ key, def_value,
+ description, help, exp_level,
+ changed_cb, cb_data);
+}
+
+
+int xine_config_register_bool (xine_t *self,
+ char *key,
+ int def_value,
+ char *description,
+ char *help,
+ int exp_level,
+ xine_config_cb_t changed_cb,
+ void *cb_data) {
+ return self->config->register_bool (self->config,
+ key, def_value,
+ description, help, exp_level,
+ changed_cb, cb_data);
+}
+
+
+/*
+ * helper function:
+ *
+ * copy current config entry data to public struct
+ * and return it
+ */
+
+xine_cfg_entry_t *xine_config_get_current_entry (xine_t *this) {
+
+ config_values_t *config = this->config;
+
+ if (!config->cur)
+ return NULL;
+
+ config->public_entry.key = config->cur->key;
+ config->public_entry.type = config->cur->type;
+
+ config->public_entry.unknown_value = config->cur->unknown_value;
+ config->public_entry.str_value = config->cur->str_value;
+ config->public_entry.str_default = config->cur->str_default;
+ config->public_entry.str_sticky = config->cur->str_sticky;
+ config->public_entry.num_value = config->cur->num_value;
+ config->public_entry.num_default = config->cur->num_default;
+ config->public_entry.range_min = config->cur->range_min;
+ config->public_entry.range_max = config->cur->range_max;
+ config->public_entry.enum_values = config->cur->enum_values;
+
+ config->public_entry.description = config->cur->description;
+ config->public_entry.help = config->cur->help;
+ config->public_entry.callback = config->cur->callback;
+ config->public_entry.callback_data = config->cur->callback_data;
+ config->public_entry.exp_level = config->cur->exp_level;
+
+ return &config->public_entry;
+}
+
+/*
+ * get first config item
+ */
+xine_cfg_entry_t *xine_config_get_first_entry (xine_t *this) {
+
+ config_values_t *config = this->config;
+
+ config->cur = config->first;
+
+ return xine_config_get_current_entry (this);
+}
+
+
+/*
+ * get next config item (iterate through the items)
+ * this will return NULL when called after returning the last item
+ */
+xine_cfg_entry_t *xine_config_get_next_entry (xine_t *this) {
+
+ config_values_t *config = this->config;
+
+ config->cur = config->cur->next;
+
+ return xine_config_get_current_entry (this);
+}
+
+
+/*
+ * search for a config entry by key
+ */
+
+xine_cfg_entry_t *xine_config_lookup_entry (xine_t *this, char *key) {
+
+ config_values_t *config = this->config;
+
+ config->cur = config->lookup_entry (config, key);
+
+ return xine_config_get_current_entry (this);
+}
+
+
+/*
+ * update a config entry (which was returned from lookup_entry() )
+ */
+void xine_config_update_entry (xine_t *this, xine_cfg_entry_t *entry){
+ printf ("xine_interface: xine_config_update_entry: not implemented\n");
+ abort();
+}
+
+
+void xine_reset_config (xine_t *this){
+ printf ("xine_interface: xine_reset_config: not implemented\n");
+ abort();
+}
+
+int xine_gui_send_vo_data (xine_t *this,
+ int type, void *data) {
+
+ return this->video_driver->gui_data_exchange (this->video_driver, type, data);
+}
+
+void xine_set_param (xine_t *this, int param, int value) {
+
+ switch (param) {
+ case XINE_PARAM_SPEED:
+ xine_set_speed (this, value);
+ break;
+
+ case XINE_PARAM_AV_OFFSET:
+ this->metronom->set_option (this->metronom, METRONOM_AV_OFFSET, value);
+ break;
+
+ case XINE_PARAM_AUDIO_CHANNEL_LOGICAL:
+ pthread_mutex_lock (&this->xine_lock);
+ if (value < -2)
+ value = -2;
+ this->audio_channel_user = value;
+ pthread_mutex_unlock (&this->xine_lock);
+ break;
+
+ case XINE_PARAM_SPU_CHANNEL:
+ xine_select_spu_channel (this, value);
+ break;
+
+ case XINE_PARAM_VIDEO_CHANNEL:
+ pthread_mutex_lock (&this->xine_lock);
+ if (value<0)
+ value = 0;
+ this->video_channel = value;
+ pthread_mutex_unlock (&this->xine_lock);
+ break;
+ }
+}
+
+int xine_get_param (xine_t *this, int param) {
+
+ switch (param) {
+ case XINE_PARAM_SPEED:
+ return this->speed;
+
+ case XINE_PARAM_AV_OFFSET:
+ return this->metronom->get_option (this->metronom, METRONOM_AV_OFFSET);
+
+ case XINE_PARAM_AUDIO_CHANNEL_LOGICAL:
+ return this->audio_channel_user;
+
+ case XINE_PARAM_SPU_CHANNEL:
+ return this->spu_channel_user;
+
+ case XINE_PARAM_VIDEO_CHANNEL:
+ return this->video_channel;
+
+ default:
+ printf ("xine_interface: unknown param %d\n", param);
+ abort ();
+ }
+
+ return 0;
+}
+
+uint32_t xine_get_stream_info (xine_t *self, int info) {
+ printf ("xine_interface: xine_get_stream_info: not implemented\n");
+ abort();
+}