mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
6dfbea5001
Original commit message from CVS: adding mikmod
97 lines
1.5 KiB
C
97 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
|
|
};
|