83d475ba790d50fc62d314a4af99495b05522442
[platform/upstream/gst-plugins-good.git] / ext / mikmod / drv_gst.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <stdlib.h>
6
7 #include "gstmikmod.h"
8
9 static int buffer_size;
10 static SBYTE *audiobuffer = NULL;
11 extern int need_sync;
12
13 static BOOL mikmod_IsThere( void )
14 {
15   return 1;
16 }
17
18 static BOOL mikmod_Init( void )
19 {
20   buffer_size = 32768;
21   if (!( audiobuffer = ( SBYTE * ) g_malloc( buffer_size ) ))
22     return 1;
23     
24   return VC_Init();
25 }
26
27 static void mikmod_Exit( void )
28 {
29   VC_Exit();
30
31   if ( audiobuffer )
32   {
33     g_free(audiobuffer);
34     audiobuffer = NULL;
35   }     
36 }
37
38
39 static void mikmod_Update( void )
40 {
41   gint length;
42   GstBuffer *outdata;
43
44   length = VC_WriteBytes((SBYTE *) audiobuffer, buffer_size);
45         
46   outdata = gst_buffer_new();
47
48   GST_BUFFER_DATA( outdata ) = g_memdup( audiobuffer, length );
49   GST_BUFFER_SIZE( outdata ) = length;
50
51   GST_BUFFER_TIMESTAMP( outdata ) = timestamp;
52
53   if ( need_sync == 1 )
54   {
55     /* FIXME, send a flush event or something */
56     need_sync = 0 ;
57   }
58   gst_pad_push( srcpad, GST_DATA (outdata ));
59       
60 }
61
62 static BOOL mikmod_Reset( void )
63 {
64   VC_Exit();
65   return VC_Init();
66 }
67
68
69 MDRIVER drv_gst =
70 {
71         NULL,
72         "mikmod",
73         "mikmod output driver v1.0",
74         0, 255,
75 #if (LIBMIKMOD_VERSION > 0x030106)
76         "mikmod",
77         NULL,
78 #endif
79         mikmod_IsThere, 
80         VC_SampleLoad,
81         VC_SampleUnload,
82         VC_SampleSpace,
83         VC_SampleLength,
84         mikmod_Init,
85         mikmod_Exit,
86         mikmod_Reset,
87         VC_SetNumVoices,
88         VC_PlayStart,
89         VC_PlayStop,
90         mikmod_Update,
91         NULL,
92         VC_VoiceSetVolume,
93         VC_VoiceGetVolume,
94         VC_VoiceSetFrequency,
95         VC_VoiceGetFrequency,
96         VC_VoiceSetPanning,
97         VC_VoiceGetPanning,
98         VC_VoicePlay,
99         VC_VoiceStop,
100         VC_VoiceStopped,
101         VC_VoiceGetPosition,
102         VC_VoiceRealVolume
103 };