working for playback on R5 and openbeos media servers!

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6560 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
shatty
2004-02-11 11:03:31 +00:00
parent 2e8a6e27d0
commit 92b105418d
2 changed files with 27 additions and 28 deletions
+10 -11
View File
@@ -156,7 +156,7 @@ echo_stream_set_audioparms(echo_stream *stream, uint8 channels,
return B_ERROR; return B_ERROR;
} }
PRINT(("VerifyAudioOpen\n")); //PRINT(("VerifyAudioOpen\n"));
status = stream->card->pEG->VerifyAudioOpen(stream->pipe); status = stream->card->pEG->VerifyAudioOpen(stream->pipe);
if(status!=ECHOSTATUS_OK) { if(status!=ECHOSTATUS_OK) {
PRINT(("echo_stream_set_audioparms : VerifyAudioOpen failed\n")); PRINT(("echo_stream_set_audioparms : VerifyAudioOpen failed\n"));
@@ -216,7 +216,7 @@ echo_stream_set_audioparms(echo_stream *stream, uint8 channels,
stream->buffer = echo_mem_alloc(stream->card, stream->bufframes * frame_size * stream->bufcount); stream->buffer = echo_mem_alloc(stream->card, stream->bufframes * frame_size * stream->bufcount);
stream->trigblk = 0; /* This shouldn't be needed */ stream->trigblk = 1;
stream->blkmod = stream->bufcount; stream->blkmod = stream->bufcount;
stream->blksize = stream->bufframes * frame_size; stream->blksize = stream->bufframes * frame_size;
@@ -265,8 +265,8 @@ echo_stream_get_nth_buffer(echo_stream *stream, uint8 chan, uint8 buf,
static uint32 static uint32
echo_stream_curaddr(echo_stream *stream) echo_stream_curaddr(echo_stream *stream)
{ {
uint32 addr = *stream->position - (uint32)stream->buffer->phy_base; uint32 addr = B_LENDIAN_TO_HOST_INT32(*stream->position);
TRACE(("stream_curaddr %p, phy_base %p\n", addr, (uint32)stream->buffer->phy_base)); // TRACE(("stream_curaddr %p, phy_base %p\n", addr));
return addr; return addr;
} }
@@ -368,10 +368,12 @@ int32 echo_int(void *arg)
err = card->pEG->ServiceIrq(midiReceived); err = card->pEG->ServiceIrq(midiReceived);
if(err == ECHOSTATUS_OK) { if(err != ECHOSTATUS_OK) {
return B_UNHANDLED_INTERRUPT;
}
LIST_FOREACH(stream, &card->streams, next) { LIST_FOREACH(stream, &card->streams, next) {
if ((stream->use & ECHO_USE_PLAY) == 0 || if ((stream->state & ECHO_STATE_STARTED) == 0 ||
(stream->state & ECHO_STATE_STARTED) == 0 ||
(stream->inth == NULL)) (stream->inth == NULL))
continue; continue;
@@ -384,13 +386,10 @@ int32 echo_int(void *arg)
stream->inth(stream->inthparam); stream->inth(stream->inthparam);
stream->trigblk++; stream->trigblk++;
stream->trigblk %= stream->blkmod;
} }
} }
return B_HANDLED_INTERRUPT; return B_INVOKE_SCHEDULER;
} else
return B_UNHANDLED_INTERRUPT;
} }
/* detect presence of our hardware */ /* detect presence of our hardware */
@@ -369,7 +369,7 @@ echo_play_inth(void* inthparams)
stream->real_time = system_time(); stream->real_time = system_time();
stream->frames_count += BUFFER_FRAMES; stream->frames_count += BUFFER_FRAMES;
stream->buffer_cycle = (stream->trigblk stream->buffer_cycle = (stream->trigblk
+ stream->blkmod -1) % stream->blkmod; + stream->blkmod) % stream->blkmod;
stream->update_needed = true; stream->update_needed = true;
release_spinlock(&slock); release_spinlock(&slock);
@@ -390,7 +390,7 @@ echo_record_inth(void* inthparams)
stream->real_time = system_time(); stream->real_time = system_time();
stream->frames_count += BUFFER_FRAMES; stream->frames_count += BUFFER_FRAMES;
stream->buffer_cycle = (stream->trigblk stream->buffer_cycle = (stream->trigblk
+ stream->blkmod -1) % stream->blkmod; + stream->blkmod) % stream->blkmod;
stream->update_needed = true; stream->update_needed = true;
release_spinlock(&slock); release_spinlock(&slock);