summaryrefslogtreecommitdiff
path: root/include/xine/xine_buffer.h
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-12-23 00:37:48 +0100
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-12-23 00:37:48 +0100
commit1dda55c79b90c27303628a42c7ad8d948d613146 (patch)
treefad68e0e7513130582e28cf05d4ceff413f5343c /include/xine/xine_buffer.h
parentd23cc6dbac6f2b212d99453fddc0f20ccd178ab4 (diff)
parentdca820a7cb6f1087f6d29482a1ee6d4916fc9f71 (diff)
downloadxine-lib-1dda55c79b90c27303628a42c7ad8d948d613146.tar.gz
xine-lib-1dda55c79b90c27303628a42c7ad8d948d613146.tar.bz2
Merge from 1.2 main branch.
--HG-- rename : src/xine-utils/xineutils.h => include/xine/xineutils.h rename : src/libxineadec/Makefile.am => src/audio_dec/Makefile.am rename : src/libxineadec/xine_a52_decoder.c => src/audio_dec/xine_a52_decoder.c rename : src/libffmpeg/Makefile.am => src/combined/ffmpeg/Makefile.am rename : src/libffmpeg/ff_audio_decoder.c => src/combined/ffmpeg/ff_audio_decoder.c rename : src/libffmpeg/ff_dvaudio_decoder.c => src/combined/ffmpeg/ff_dvaudio_decoder.c rename : src/libffmpeg/ff_dvdata.h => src/combined/ffmpeg/ff_dvdata.h rename : src/libffmpeg/ff_video_decoder.c => src/combined/ffmpeg/ff_video_decoder.c rename : src/libffmpeg/ffmpeg_encoder.c => src/combined/ffmpeg/ffmpeg_encoder.c rename : src/libmpeg2/Makefile.am => src/video_dec/libmpeg2/Makefile.am rename : src/libmpeg2/decode.c => src/video_dec/libmpeg2/decode.c
Diffstat (limited to 'include/xine/xine_buffer.h')
-rw-r--r--include/xine/xine_buffer.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/include/xine/xine_buffer.h b/include/xine/xine_buffer.h
new file mode 100644
index 000000000..84511bd1b
--- /dev/null
+++ b/include/xine/xine_buffer.h
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2000-2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ * generic dynamic buffer functions. The goals
+ * of these functions are (in fact many of these points
+ * are todos):
+ * - dynamic allocation and reallocation depending
+ * on the size of data written to it.
+ * - fast and transparent access to the data.
+ * The user sees only the raw data chunk as it is
+ * returned by the well-known malloc function.
+ * This is necessary since not all data-accessing
+ * functions can be wrapped here.
+ * - some additional health checks are made during
+ * development (eg boundary checks after direct
+ * access to a buffer). This can be turned off in
+ * production state for higher performance.
+ * - A lot of convenient string and memory manipulation
+ * functions are implemented here, where the user
+ * do not have to care about memory chunk sizes.
+ * - Some garbage collention could be implemented as well;
+ * i think of a global structure containing infos
+ * about all allocated chunks. This must be implemented
+ * in a thread-save way...
+ *
+ * Here are some drawbacks (aka policies):
+ * - The user must not pass indexed buffers to xine_buffer_*
+ * functions.
+ * - The pointers passed to xine_buffer_* functions may change
+ * (eg during reallocation). The user must respect that.
+ */
+
+#ifndef HAVE_XINE_BUFFER_H
+#define HAVE_XINE_BUFFER_H
+
+#ifdef XINE_COMPILE
+# include <inttypes.h>
+#else
+# include <xine/os_types.h>
+#endif
+
+/*
+ * returns an initialized pointer to a buffer.
+ * The buffer will be allocated in blocks of
+ * chunk_size bytes. This will prevent permanent
+ * reallocation on slow growing buffers.
+ */
+void *xine_buffer_init(int chunk_size) XINE_PROTECTED;
+
+/*
+ * frees a buffer, the macro ensures, that a freed
+ * buffer pointer is set to NULL
+ */
+#define xine_buffer_free(buf) buf=_xine_buffer_free(buf)
+void *_xine_buffer_free(void *buf) XINE_PROTECTED;
+
+/*
+ * duplicates a buffer
+ */
+void *xine_buffer_dup(const void *buf) XINE_PROTECTED;
+
+/*
+ * will copy len bytes of data into buf at position index.
+ */
+#define xine_buffer_copyin(buf,i,data,len) \
+ buf=_xine_buffer_copyin(buf,i,data,len)
+void *_xine_buffer_copyin(void *buf, int index, const void *data, int len) XINE_PROTECTED;
+
+/*
+ * will copy len bytes out of buf+index into data.
+ * no checks are made in data. It is treated as an ordinary
+ * user-malloced data chunk.
+ */
+void xine_buffer_copyout(const void *buf, int index, void *data, int len) XINE_PROTECTED;
+
+/*
+ * set len bytes in buf+index to b.
+ */
+#define xine_buffer_set(buf,i,b,len) \
+ buf=_xine_buffer_set(buf,i,b,len)
+void *_xine_buffer_set(void *buf, int index, uint8_t b, int len) XINE_PROTECTED;
+
+/*
+ * concatenates given buf (which should contain a null terminated string)
+ * with another string.
+ */
+#define xine_buffer_strcat(buf,data) \
+ buf=_xine_buffer_strcat(buf,data)
+void *_xine_buffer_strcat(void *buf, const char *data) XINE_PROTECTED;
+
+/*
+ * copies given string to buf+index
+ */
+#define xine_buffer_strcpy(buf,index,data) \
+ buf=_xine_buffer_strcpy(buf,index,data)
+void *_xine_buffer_strcpy(void *buf, int index, const char *data) XINE_PROTECTED;
+
+/*
+ * returns a pointer to the first occurence of ch.
+ * note, that the returned pointer cannot be used
+ * in any other xine_buffer_* functions.
+ */
+char *xine_buffer_strchr(const void *buf, int ch) XINE_PROTECTED;
+
+/*
+ * get allocated memory size
+ */
+int xine_buffer_get_size(const void *buf) XINE_PROTECTED;
+
+/*
+ * ensures a specified buffer size if the user want to
+ * write directly to the buffer. Normally the special
+ * access functions defined here should be used.
+ */
+#define xine_buffer_ensure_size(buf,data) \
+ buf=_xine_buffer_ensure_size(buf,data)
+void *_xine_buffer_ensure_size(void *buf, int size) XINE_PROTECTED;
+
+#endif