#include #include #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 ); }