Author: nyadav
Date: Fri May 27 21:11:53 2011
New Revision: 51964
URL: 
http://svn.reactos.org/svn/reactos?rev=51964&view=rev
Log:
[AUDSRV] Add Playback of virtual buffer on virtual server to audio client
Modified:
    branches/nyadav-audio-branch/base/services/audsrv/audsrv.h
    branches/nyadav-audio-branch/dll/win32/audsrvapi/CMakeLists.txt
    branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.c
    branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.h
    branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.spec
    branches/nyadav-audio-branch/drivers/wdm/audio/backpln/audclient/audclient.c
    branches/nyadav-audio-branch/include/reactos/libs/audsrv/audsrvapi.h
Modified: branches/nyadav-audio-branch/base/services/audsrv/audsrv.h
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/base/servic…
==============================================================================
--- branches/nyadav-audio-branch/base/services/audsrv/audsrv.h [iso-8859-1] (original)
+++ branches/nyadav-audio-branch/base/services/audsrv/audsrv.h [iso-8859-1] Fri May 27
21:11:53 2011
@@ -27,7 +27,7 @@
 #include "audsrvrpc_s.h"
-typedef struct PortStream
+typedef struct ServerStream
 {
        int volume;
        LONG freq;
@@ -35,8 +35,9 @@
        int channels;
        ULONG channelmask;
        HANDLE thread;
-       struct PortStream * next;
-} PortStream;
+       float balance;
+       struct ServerStream * next;
+} ServerStream;
 typedef struct MixerEngine
 {
@@ -60,6 +61,7 @@
     HANDLE PinHandle;
        PKSPROPERTY Property;
        PKSSTREAM_HEADER Packet;
+       ServerStream * serverstreamlist;
 } MixerEngine;
 extern MixerEngine engine;
Modified: branches/nyadav-audio-branch/dll/win32/audsrvapi/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/dll/win32/a…
==============================================================================
--- branches/nyadav-audio-branch/dll/win32/audsrvapi/CMakeLists.txt [iso-8859-1]
(original)
+++ branches/nyadav-audio-branch/dll/win32/audsrvapi/CMakeLists.txt [iso-8859-1] Fri May
27 21:11:53 2011
@@ -1,5 +1,5 @@
 include_directories(${REACTOS_BINARY_DIR}/include/reactos/idl)
-include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs/audsrv)
+include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs)
 spec2def(audsrvapi.dll audsrvapi.spec)
Modified: branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.c
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/dll/win32/a…
==============================================================================
--- branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.c [iso-8859-1] (original)
+++ branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.c [iso-8859-1] Fri May 27
21:11:53 2011
@@ -1,1 +1,70 @@
-#include "audsrvapi.h"
+#include "audsrvapi.h"
+
+/*All the wrappers for Remote Function should be here*/
+int status = 0; /*There can be any structure which can hold the connection status*/
+/*Every Function should ensure connection*/
+
+/*Initialize an audio stream
+ *Return -1 if callbacks are NULL pointers
+ */
+WINAPI int initstream (ClientStream * clientstream,LONG frequency,int channels,int
bitspersample, ULONG channelmask,int volume,int mute,float balance)
+{
+       if(clientstream == NULL ) return -1;
+       if (clientstream->callbacks.OpenComplete == NULL ||
clientstream->callbacks.BufferCopied == NULL || clientstream->callbacks.PlayComplete
== NULL) return -2;
+       /*Validity of all other data will be checked at server*/
+       /*Check Connection Status If not connected call Connect()*/
+       /*If connected Properly call the remote audsrv_initstream() function*/
+       /*Analyse the return by the function*/
+       /*Currently Suppose the return is 0 and a valid streamid is returned*/
+       clientstream->stream = &status;
+
+       clientstream->ClientEventPool[0]=CreateEvent(NULL,FALSE,FALSE,NULL);
+       clientstream->dead = 0;
+
+       return 0;
+}
+
+WINAPI int playaudio ( ClientStream * clientstream)
+{
+       /*This is an ActiveScheduler*/
+       clientstream->callbacks.OpenComplete(0);
+       while(1)
+       {
+
while(WaitForSingleObject(clientstream->ClientEventPool[0],100)!=0){if(clientstream->dead)goto
DEAD;}
+                       /*Check Connection Status If not connected call Connect()*/
+                       /*If connected Properly call the remote audsrv_play()
function,This will be a blocking call, placing a dummy wait function here is a good
idea.*/
+                       Sleep(1000);
+                       printf("Played a virtual buffer on Virtual Audio Server :)
%d\n",clientstream->dead);
+                       clientstream->callbacks.BufferCopied(0);
+       }
+       clientstream->callbacks.PlayComplete(0);
+
+DEAD:
+printf("\nAudio Thread Ended\n");
+
+       return 0;
+}
+WINAPI int stopaudio (ClientStream * clientstream )
+{
+       /*Server Side termination is remaining*/
+       /*Check Connection Status If not connected call Connect()*/
+       /*If connected Properly call the remote audsrv_stop() function*/
+       clientstream->dead = 1;  /*Client Side termination*/
+}
+WINAPI int Volume(ClientStream * clientstream, int * volume )
+{
+}
+WINAPI int SetVolume(ClientStream * clientstream ,const int newvolume)
+{
+}
+WINAPI int Write(ClientStream * clientstream ,const char * aData)
+{
+       if(clientstream->dead) return -1;
+       SetEvent(clientstream->ClientEventPool[0]);
+}
+WINAPI int SetBalance(ClientStream * clientstream ,float balance)
+{
+}
+WINAPI int GetBalance(ClientStream * clientstream ,float * balance)
+{
+}
Modified: branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.h
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/dll/win32/a…
==============================================================================
--- branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.h [iso-8859-1] (original)
+++ branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.h [iso-8859-1] Fri May 27
21:11:53 2011
@@ -1,2 +1,2 @@
 #include "audsrvrpc_c.h"
-#include <audsrvapi.h>
+#include <audsrv/audsrvapi.h>
Modified: branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.spec
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/dll/win32/a…
==============================================================================
--- branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.spec [iso-8859-1]
(original)
+++ branches/nyadav-audio-branch/dll/win32/audsrvapi/audsrvapi.spec [iso-8859-1] Fri May
27 21:11:53 2011
@@ -1,0 +1,8 @@
+@ stdcall initstream (ptr long long long long long long long)
+@ stdcall playaudio ( ptr);
+@ stdcall stopaudio (ptr );
+@ stdcall Volume(ptr ptr );
+@ stdcall SetVolume(ptr long);
+@ stdcall Write(ptr ptr);
+@ stdcall SetBalance(ptr long);
+@ stdcall GetBalance(ptr ptr);
Modified: branches/nyadav-audio-branch/drivers/wdm/audio/backpln/audclient/audclient.c
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/drivers/wdm…
==============================================================================
--- branches/nyadav-audio-branch/drivers/wdm/audio/backpln/audclient/audclient.c
[iso-8859-1] (original)
+++ branches/nyadav-audio-branch/drivers/wdm/audio/backpln/audclient/audclient.c
[iso-8859-1] Fri May 27 21:11:53 2011
@@ -3,10 +3,54 @@
 #include <audsrvapi.h>
 #include <stdio.h>
+
+void opencomplete (int error );
+void buffercopied (int error );
+void playcomplete (int error );
+
+ClientStream clientstream =
{NULL,0,{NULL},{opencomplete,buffercopied,playcomplete}};/*This initialization should not
be necessary for a typical client*/
+
+DWORD WINAPI RunAudioThread(LPVOID param)
+{
+       ClientStream * localstream = (ClientStream *) param;
+       printf("Starting Audio Thread \n");
+       playaudio(localstream);
+}
+void opencomplete (int error )
+{
+       /*Copy First Buffer and write*/
+       Write(&clientstream,"HELLO_RANDOM_STRING");
+}
+void buffercopied (int error )
+{
+       Write(&clientstream,"HELLO_RANDOM_STRING");
+}
+void playcomplete (int error )
+{
+       printf("Play Complete Code %d\n",error);
+}
 int
 __cdecl
 wmain(int argc, char* argv[])
 {
-       printf("ReactOS Audio Mixer Sample Client.\n");
+       int error;
+       DWORD dwID;
+       HANDLE audiothread;
+       char input='\0';
+       printf("ReactOS Audio Mixer Sample Client.Enter 'a' to
Stop.\n");
+       //if (clientstream->callbacks.OpenComplete == NULL ||
clientstream->callbacks.BufferCopied == NULL || clientstream->callbacks.PlayComplete
== NULL) printf("");
+       error = initstream ( &clientstream , 44100 , 2 , 16 , KSAUDIO_SPEAKER_STEREO ,
1000 , 0, 0.0 ); /*[out]HANDLE * streamhandle,[in] long frequency,[in] int number of
channels,[in] int bitspersample,[in]ULONG channelmask,[in] int volume,[in] int mute,[in]
float balance*/
+       if ( error )
+               printf("Failed to Initialize Stream.Error %d\n", error);
+       else
+       {
+               printf("StreamID : %d\n",*((int *)clientstream.stream));
+               audiothread =
CreateThread(NULL,0,RunAudioThread,&clientstream,0,&dwID);
+       }
+       while ( input != 'a' )
+       scanf("%c",&input);
+       printf("Stoping Audio Stream.\n");
+       stopaudio(&clientstream);
+       WaitForSingleObject(audiothread,INFINITE);
     return 0;
-}
+}
Modified: branches/nyadav-audio-branch/include/reactos/libs/audsrv/audsrvapi.h
URL:
http://svn.reactos.org/svn/reactos/branches/nyadav-audio-branch/include/rea…
==============================================================================
--- branches/nyadav-audio-branch/include/reactos/libs/audsrv/audsrvapi.h [iso-8859-1]
(original)
+++ branches/nyadav-audio-branch/include/reactos/libs/audsrv/audsrvapi.h [iso-8859-1] Fri
May 27 21:11:53 2011
@@ -1,5 +1,34 @@
-#ifndef _PORTINTERFACE_H
-#define _PORTINTERFACE_H
+#ifndef _AUDSRVAPI_H
+#define _AUDSRVAPI_H
+#include <windows.h>
+#include <ks.h>
+#include <ksmedia.h>
+#include <stdio.h>
+/********************Structures*********************/
+typedef struct CallBacks
+{
+       void (*OpenComplete) (int error );
+       void (*BufferCopied) (int error );
+       void (*PlayComplete) (int error );
+} CallBacks;
+
+typedef struct ClientStream
+{
+HANDLE stream;
+int dead;
+HANDLE ClientEventPool[1];  /*[0]th event is for Activescheduler*/
+struct CallBacks callbacks;
+} ClientStream;
+
+/********************API Functions******************/
+WINAPI int initstream (ClientStream * clientstream,LONG frequency,int channels,int
bitspersample, ULONG channelmask,int volume,int mute,float balance);
+WINAPI int playaudio ( ClientStream * clientstream);
+WINAPI int stopaudio (ClientStream * clientstream );
+WINAPI int Volume(ClientStream * clientstream, int * volume );
+WINAPI int SetVolume(ClientStream * clientstream ,const int newvolume);
+WINAPI int Write(ClientStream * clientstream ,const char * aData);
+WINAPI int SetBalance(ClientStream * clientstream ,float balance);
+WINAPI int GetBalance(ClientStream * clientstream ,float * balance);
 #endif