hi
 
i am getting some problem with OSS driver.
 
I create two files.
1.loopback.c
    It read the pcm sample and play the sample and
write in to a file as pcm samples.
2.fileread.c
    It reads the pcm samples file which is written
by loopback.c
 
Issues:
 1.if i run the loopback.c and fileread.c in a
DAVINCI Board ,It is running perfectly.
 2.if i run the loopback.c and fileread.c in a x386
Machine(Fedora core 5), ,It is running perfectly.
 
But
3.if i run the loopback.c in DAVINCI and fileread.c
in x386 Machine(Fedora core 5),it is not working
properly.
4.if i run the loopback.c in x386 Machine(Fedora
core 5),and fileread.c in DAVINCI ,it is not working
properly.
 
what might be the reson.?
 
I have given the code also..
-----------------------loopback.c---------------------------------------------------------------------------------------------------------------------
 
 

/*

*

*
============================================================================

/* Standard Linux headers */

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <sys/ioctl.h>

#include <fcntl.h>

#include <signal.h>

#include <getopt.h>

#include <pthread.h>

#include <errno.h>

#include <linux/soundcard.h>

#define FAILURE -1

/* The number of channels of the audio codec */

#define NUM_CHANNELS 1

/* The sample rate of the audio codec */

#define SAMPLE_RATE 8000

/* The gain (0-100) of the left and right channels
*/

#define LEFT_GAIN 100

#define RIGHT_GAIN 100

/* Number of samples to process */

#define NUMSAMPLES 320

 

/* Mono 16 bit */

#define RAWBUFSIZE NUMSAMPLES * 2

 

/* Stereo 16 bit */

#define INPUTBUFSIZE NUMSAMPLES * 2

unsigned short
rawbuf[RAWBUFSIZE],inputbuf[INPUTBUFSIZE];

int main()

{

int vol = LEFT_GAIN | (RIGHT_GAIN << 8);

int channels = NUM_CHANNELS;

int sampleRate = SAMPLE_RATE;

int format = AFMT_S16_LE;

int soundFd;

int mixerFd;

int recMask;

 

/* Open the sound device for writing */

if ((soundFd = open("/dev/dsp", O_RDWR)) == -1) {

printf("Failed to open the sound device
(/dev/dsp)\n");

return FAILURE;

}

/* Set the sound format (only AFMT_S16_LE supported)
*/

if (ioctl(soundFd, SNDCTL_DSP_SETFMT, &format) ==
-1) {

printf("Could not set format %d\n", format);

return FAILURE;

}

/* Set the number of channels */

if (ioctl(soundFd, SNDCTL_DSP_CHANNELS, &channels)
== -1) {

printf("Could not set mixer to %d channels\n",
channels);

return FAILURE;

}

/* Set the sample rate */

if (ioctl(soundFd, SNDCTL_DSP_SPEED, &sampleRate) ==
-1) {

printf("Could not set sample rate (%d)\n",
sampleRate);

return FAILURE;

}

/* If we are sampling select the right capture
device and volume */

if ((mixerFd = open("/dev/mixer", O_RDONLY)) == -1)
{

printf("Failed to open /dev/mixer\n");

return FAILURE;

}

recMask |= SOUND_MASK_MIC;

if (ioctl(mixerFd, SOUND_MIXER_WRITE_RECSRC,
&recMask) == -1) {

perror("Failed to ask mixer for available recorders
-- 1.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_READ_RECMASK,
&recMask) == -1) {

printf("Failed to ask mixer for available recorders
-- 2.\n");

return FAILURE;

}

//if ((recMask & SOUND_MASK_LINE) == 0) {

if ((recMask & SOUND_MASK_MIC) == 0) {

printf("Line input not a supported recorder.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_READ_RECSRC,
&recMask) == -1) {

printf("Failed to read the current recorder.\n");

return FAILURE;

}

//recMask |= SOUND_MASK_LINE;

recMask |= SOUND_MASK_MIC;

if (ioctl(mixerFd, SOUND_MIXER_WRITE_RECSRC,
&recMask) == -1) {

printf("Failed to set line input as recorder.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_READ_RECSRC,
&recMask) == -1) {

printf("Failed to read the current recorder.\n");

return FAILURE;

}

//if ((recMask & SOUND_MASK_LINE) == 0) {

if ((recMask & SOUND_MASK_MIC) == 0) {

printf("Failed to read the current recorder.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_WRITE_IGAIN, &vol) ==
-1) {

printf("Failed to set the volume of line in.\n");

return FAILURE;

}

close(mixerFd);

 

 

printf("Audio sample rate set to %dHz\n",
SAMPLE_RATE);

int outputFd = open("audio",O_WRONLY | O_CREAT |
O_TRUNC, 00644);

int i=0,numBytes;

if (outputFd == -1) {

printf("Failed to open file for writing\n");

exit(0);

}

while(i++<500)

{

numBytes=read(soundFd, inputbuf, INPUTBUFSIZE);

if(numBytes==-1)

{

printf("error\n");

exit(0);

close(outputFd);

}

else{

printf("numBytes=%d\n",numBytes);

}

usleep(10);

write(soundFd, inputbuf, INPUTBUFSIZE);

//stereoToMono(inputbuf, rawbuf, NUMSAMPLES);

if (write(outputFd, inputbuf, INPUTBUFSIZE) == -1) {

printf("Error writing the encoded \n");

close(outputFd);

exit(0);

}

}

close(outputFd);

close(soundFd);

return 0;

}
------------------------------------end of
loopback.c---------------------------------------------------------------------------------------------------

 

------------------------------------------fileread.c 
----------------------------------------------------------------------------------------------------

/* Standard Linux headers */

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <sys/ioctl.h>

#include <fcntl.h>

#include <signal.h>

#include <getopt.h>

#include <pthread.h>

#include <errno.h>

#include <linux/soundcard.h>

#define FAILURE -1

/* The number of channels of the audio codec */

#define NUM_CHANNELS 1

/* The sample rate of the audio codec */

#define SAMPLE_RATE 8000

/* The gain (0-100) of the left and right channels
*/

#define LEFT_GAIN 100

#define RIGHT_GAIN 100

 

/* G.711 encoded samples */

#define NUMSAMPLES 640

/* The size of the read buffer */

#define READBUFSIZE NUMSAMPLES*2

 

#if 0

monoTostereo(inBuf,outBuf,inBufSize,outBufSize)

{int i, * bytesProcessed=0;

for (i = (inBufSize - 1); i >= 0; i--) {

outBuf[4 * i] = outBuf[2 * i];

outBuf[4 * i + 1] = outBuf[2 * i + 1];

outBuf[4 * i + 2] = outBuf[2 * i];

outBuf[4 * i + 3] = outBuf[2 * i + 1];

}

if (inBufSize < NUMSAMPLES) {

*bytesProcessed = inBufSize;

*outBufSize = inBufSize * 4;

}

else {

*bytesProcessed = NUMSAMPLES;

*outBufSize = NUMSAMPLES * 4;

}

}

#endif

int main()

{

int vol = LEFT_GAIN | (RIGHT_GAIN << 8);

int channels = NUM_CHANNELS;

int sampleRate = SAMPLE_RATE;

int format = AFMT_S16_LE;

int soundFd;

int mixerFd;

int recMask;

unsigned short readBuffer[3072],rawBuffer[3072];

 

/* Open the sound device for writing */

if ((soundFd = open("/dev/dsp", O_RDWR)) == -1) {

printf("Failed to open the sound device
(/dev/dsp)\n");

return FAILURE;

}

/* Set the sound format (only AFMT_S16_LE supported)
*/

if (ioctl(soundFd, SNDCTL_DSP_SETFMT, &format) ==
-1) {

printf("Could not set format %d\n", format);

return FAILURE;

}

/* Set the number of channels */

if (ioctl(soundFd, SNDCTL_DSP_CHANNELS, &channels)
== -1) {

printf("Could not set mixer to %d channels\n",
channels);

return FAILURE;

}

/* Set the sample rate */

if (ioctl(soundFd, SNDCTL_DSP_SPEED, &sampleRate) ==
-1) {

printf("Could not set sample rate (%d)\n",
sampleRate);

return FAILURE;

}

/* If we are sampling select the right capture
device and volume */

if ((mixerFd = open("/dev/mixer", O_RDONLY)) == -1)
{

printf("Failed to open /dev/mixer\n");

return FAILURE;

}

recMask |= SOUND_MASK_MIC;

if (ioctl(mixerFd, SOUND_MIXER_WRITE_RECSRC,
&recMask) == -1) {

perror("Failed to ask mixer for available recorders
-- 1.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_READ_RECMASK,
&recMask) == -1) {

printf("Failed to ask mixer for available recorders
-- 2.\n");

return FAILURE;

}

//if ((recMask & SOUND_MASK_LINE) == 0) {

if ((recMask & SOUND_MASK_MIC) == 0) {

printf("Line input not a supported recorder.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_READ_RECSRC,
&recMask) == -1) {

printf("Failed to read the current recorder.\n");

return FAILURE;

}

//recMask |= SOUND_MASK_LINE;

recMask |= SOUND_MASK_MIC;

if (ioctl(mixerFd, SOUND_MIXER_WRITE_RECSRC,
&recMask) == -1) {

printf("Failed to set line input as recorder.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_READ_RECSRC,
&recMask) == -1) {

printf("Failed to read the current recorder.\n");

return FAILURE;

}

//if ((recMask & SOUND_MASK_LINE) == 0) {

if ((recMask & SOUND_MASK_MIC) == 0) {

printf("Failed to read the current recorder.\n");

return FAILURE;

}

if (ioctl(mixerFd, SOUND_MIXER_WRITE_IGAIN, &vol) ==
-1) {

printf("Failed to set the volume of line in.\n");

return FAILURE;

}

close(mixerFd);

 

 

printf("Audio sample rate set to %dHz\n",
SAMPLE_RATE);

int outputFd = open("audio",O_RDONLY, 00444);

if (outputFd == -1) {

printf("Failed to open file for writing\n");

exit(0);

}

while(1)

{

if (read(outputFd, readBuffer, READBUFSIZE) == -1) {

printf("Error reading the encoded \n");

close(outputFd);

exit(0);

}

//monoTostereo(readBuffer,rawBuffer,READBUFSIZE,RAWBUFSIZE);

write(soundFd, readBuffer, READBUFSIZE);

}

close(outputFd);

close(soundFd);

return 0;

}
----------------- 
------------------------------------------------------------------------------

 

 

 

Regards,

Ram
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to