gstreamer/ext/mikmod/drv_gst.c

100 lines
1.6 KiB
C
Raw Normal View History

#include <stdlib.h>
#include "gstmikmod.h"
static int buffer_size;
static SBYTE *audiobuffer = NULL;
extern int need_sync;
static BOOL mikmod_IsThere( void )
{
return 1;
}
static BOOL mikmod_Init( void )
{
buffer_size = 32768;
if (!( audiobuffer = ( SBYTE * ) g_malloc( buffer_size ) ))
return 1;
return VC_Init();
}
static void mikmod_Exit( void )
{
VC_Exit();
if ( audiobuffer )
{
g_free(audiobuffer);
audiobuffer = NULL;
}
}
static void mikmod_Update( void )
{
gint length;
GstBuffer *outdata;
length = VC_WriteBytes((SBYTE *) audiobuffer, buffer_size);
outdata = gst_buffer_new();
GST_BUFFER_DATA( outdata ) = g_memdup( audiobuffer, length );
GST_BUFFER_SIZE( outdata ) = length;
GST_BUFFER_TIMESTAMP( outdata ) = timestamp;
if ( need_sync == 1 )
{
/* FIXME, send a flush event or something */
need_sync = 0 ;
}
gst_pad_push( srcpad, GST_DATA (outdata ));
}
static BOOL mikmod_Reset( void )
{
VC_Exit();
return VC_Init();
}
MDRIVER drv_gst =
{
NULL,
"mikmod",
"mikmod output driver v1.0",
0, 255,
#if (LIBMIKMOD_VERSION > 0x030106)
"mikmod",
NULL,
#endif
mikmod_IsThere,
VC_SampleLoad,
VC_SampleUnload,
VC_SampleSpace,
VC_SampleLength,
mikmod_Init,
mikmod_Exit,
mikmod_Reset,
VC_SetNumVoices,
VC_PlayStart,
VC_PlayStop,
mikmod_Update,
NULL,
VC_VoiceSetVolume,
VC_VoiceGetVolume,
VC_VoiceSetFrequency,
VC_VoiceGetFrequency,
VC_VoiceSetPanning,
VC_VoiceGetPanning,
VC_VoicePlay,
VC_VoiceStop,
VC_VoiceStopped,
VC_VoiceGetPosition,
VC_VoiceRealVolume
};