| #ifdef HAVE_CONFIG_H |
| #include "config.h" |
| #endif |
| |
| #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; |
| |
| memcpy (ptr, GST_BUFFER_DATA (gst_reader->mik->Buffer) + gst_reader->offset, |
| size); |
| gst_reader->offset = gst_reader->offset + size; |
| |
| return 1; |
| } |
| |
| |
| static int |
| GST_READER_Get (MREADER * reader) |
| { |
| GST_READER *gst_reader; |
| int res; |
| |
| gst_reader = (GST_READER *) reader; |
| |
| res = *(GST_BUFFER_DATA (gst_reader->mik->Buffer) + gst_reader->offset); |
| gst_reader->offset += 1; |
| |
| 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); |
| } |