mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 08:17:01 +00:00
98 lines
1.5 KiB
C
98 lines
1.5 KiB
C
|
#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;
|
||
|
|
||
|
if ( need_sync == 1 )
|
||
|
{
|
||
|
GST_BUFFER_FLAG_SET (outdata, GST_BUFFER_FLUSH);
|
||
|
need_sync = 0 ;
|
||
|
}
|
||
|
gst_pad_push( srcpad, 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
|
||
|
};
|