summaryrefslogtreecommitdiffstats
path: root/ext/mikmod/mikmod_reader.c
diff options
context:
space:
mode:
authorThomas Vander Stichele <thomas@apestaart.org>2001-12-23 16:13:33 +0000
committerThomas Vander Stichele <thomas@apestaart.org>2001-12-23 16:13:33 +0000
commit6dfbea50019f4e6e6cd51603ff761862c1a61bea (patch)
treee07df2af9f0a908ab1dad23ed59a870697c68ce0 /ext/mikmod/mikmod_reader.c
parent754f9a350c13ecbb6df39634d329612db597952e (diff)
adding mikmod
Original commit message from CVS: adding mikmod
Diffstat (limited to 'ext/mikmod/mikmod_reader.c')
-rw-r--r--ext/mikmod/mikmod_reader.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/ext/mikmod/mikmod_reader.c b/ext/mikmod/mikmod_reader.c
new file mode 100644
index 00000000..97cf70c4
--- /dev/null
+++ b/ext/mikmod/mikmod_reader.c
@@ -0,0 +1,122 @@
+#include <unistd.h>
+#include <string.h>
+
+#include "gstmikmod.h"
+
+extern int need_sync;
+
+static BOOL GST_READER_Eof ( MREADER *reader );
+static BOOL GST_READER_Read( MREADER *reader, void *ptr, size_t size );
+static int GST_READER_Get ( MREADER *reader );
+static BOOL GST_READER_Seek( MREADER* reader,long offset,int whence );
+static long GST_READER_Tell( MREADER* reader );
+
+
+static BOOL GST_READER_Eof( MREADER *reader )
+{
+GST_READER *gst_reader;
+
+ gst_reader = ( GST_READER * ) reader;
+
+ return gst_reader->eof;
+}
+
+
+static BOOL GST_READER_Read( MREADER *reader, void *ptr, size_t size )
+{
+GST_READER *gst_reader;
+
+ gst_reader = ( GST_READER * ) reader;
+
+ /*tmp->mik->Buffer = gst_pad_pullregion( tmp->mik->sinkpad, GST_REGION_OFFSET_LEN, tmp->offset, size );*/
+
+ memcpy( ptr, GST_BUFFER_DATA( gst_reader->mik->Buffer ) + gst_reader->offset, size);
+ gst_reader->offset = gst_reader->offset + size;
+
+/* if ( GST_BUFFER_SIZE( tmp->mik->Buffer ) != size )
+ tmp->eof = 1;
+ else
+ tmp->eof = 0;
+
+ if (GST_BUFFER_FLAG_IS_SET (tmp->mik->Buffer, GST_BUFFER_FLUSH))
+ need_sync = 1;
+
+ gst_buffer_unref( tmp->mik->Buffer );*/
+
+ return 1;
+}
+
+
+static int GST_READER_Get ( MREADER *reader )
+{
+GST_READER *gst_reader;
+int res;
+
+ gst_reader = ( GST_READER * ) reader;
+
+ /*tmp->mik->Buffer = gst_pad_pullregion( tmp->mik->sinkpad, GST_REGION_OFFSET_LEN, tmp->offset, 1 );*/
+ res = *( GST_BUFFER_DATA( gst_reader->mik->Buffer ) + gst_reader->offset );
+ gst_reader->offset += 1;
+
+/* if ( GST_BUFFER_SIZE( tmp->mik->Buffer ) != 1 )
+ tmp->eof = 1;
+ else
+ tmp->eof = 0;
+
+ gst_buffer_unref( tmp->mik->Buffer );*/
+
+ return res;
+}
+
+
+static BOOL GST_READER_Seek( MREADER *reader, long offset, int whence )
+{
+GST_READER *gst_reader;
+
+ gst_reader = ( GST_READER * ) reader;
+
+ if ( whence == SEEK_SET )
+ gst_reader->offset = offset;
+ else
+ gst_reader->offset += offset;
+
+ return 1;
+}
+
+
+static long GST_READER_Tell( MREADER *reader )
+{
+GST_READER *gst_reader;
+
+ gst_reader = ( GST_READER * ) reader;
+
+ return gst_reader->offset;
+}
+
+
+MREADER *GST_READER_new( GstMikMod *mik )
+{
+GST_READER *gst_reader;
+
+ gst_reader = ( GST_READER * ) g_malloc( sizeof( GST_READER ));
+ gst_reader->offset = 0;
+ gst_reader->eof = 0;
+ gst_reader->mik = mik;
+ if ( gst_reader )
+ {
+ gst_reader->core.Eof = &GST_READER_Eof;
+ gst_reader->core.Read = &GST_READER_Read;
+ gst_reader->core.Get = &GST_READER_Get;
+ gst_reader->core.Seek = &GST_READER_Seek;
+ gst_reader->core.Tell = &GST_READER_Tell;
+ }
+
+ return ( MREADER *)gst_reader;
+}
+
+
+void GST_READER_free ( MREADER *reader )
+{
+ if ( reader )
+ g_free( reader );
+}