multi media addon builds on beos, fixed include missing
added B_AUDIO_INT support and valid_bits use git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16254 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -2,6 +2,10 @@ SubDir HAIKU_TOP src add-ons media media-add-ons multi_audio ;
|
|||||||
|
|
||||||
SetSubDirSupportedPlatformsBeOSCompatible ;
|
SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||||
|
|
||||||
|
if $(TARGET_PLATFORM) != haiku {
|
||||||
|
SubDirC++Flags -fmultiple-symbol-spaces ;
|
||||||
|
}
|
||||||
|
|
||||||
Addon multi_audio.media_addon : media :
|
Addon multi_audio.media_addon : media :
|
||||||
MultiAudioAddOn.cpp
|
MultiAudioAddOn.cpp
|
||||||
MultiAudioDevice.cpp
|
MultiAudioDevice.cpp
|
||||||
|
|||||||
@@ -83,6 +83,25 @@ uint32 MultiAudioDevice::convert_multiaudio_format_to_media_format(uint32 fmt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int16 MultiAudioDevice::convert_multiaudio_format_to_valid_bits(uint32 fmt)
|
||||||
|
{
|
||||||
|
switch(fmt) {
|
||||||
|
case B_FMT_18BIT:
|
||||||
|
return 18;
|
||||||
|
case B_FMT_20BIT:
|
||||||
|
return 20;
|
||||||
|
case B_FMT_24BIT:
|
||||||
|
return 24;
|
||||||
|
case B_FMT_32BIT:
|
||||||
|
return 32;
|
||||||
|
default: {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32 MultiAudioDevice::convert_media_format_to_multiaudio_format(uint32 fmt)
|
uint32 MultiAudioDevice::convert_media_format_to_multiaudio_format(uint32 fmt)
|
||||||
{
|
{
|
||||||
switch(fmt) {
|
switch(fmt) {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public:
|
|||||||
static float convert_multiaudio_rate_to_media_rate(uint32 rate);
|
static float convert_multiaudio_rate_to_media_rate(uint32 rate);
|
||||||
static uint32 convert_media_rate_to_multiaudio_rate(float rate);
|
static uint32 convert_media_rate_to_multiaudio_rate(float rate);
|
||||||
static uint32 convert_multiaudio_format_to_media_format(uint32 fmt);
|
static uint32 convert_multiaudio_format_to_media_format(uint32 fmt);
|
||||||
|
static int16 convert_multiaudio_format_to_valid_bits(uint32 fmt);
|
||||||
static uint32 convert_media_format_to_multiaudio_format(uint32 fmt);
|
static uint32 convert_media_format_to_multiaudio_format(uint32 fmt);
|
||||||
static uint32 select_multiaudio_rate(uint32 rate);
|
static uint32 select_multiaudio_rate(uint32 rate);
|
||||||
static uint32 select_multiaudio_format(uint32 fmt);
|
static uint32 select_multiaudio_format(uint32 fmt);
|
||||||
|
|||||||
@@ -137,6 +137,7 @@ MultiAudioNode::MultiAudioNode(BMediaAddOn *addon, char* name, MultiAudioDevice
|
|||||||
memset(&fPreferredFormat, 0, sizeof(fPreferredFormat)); // set everything to wildcard first
|
memset(&fPreferredFormat, 0, sizeof(fPreferredFormat)); // set everything to wildcard first
|
||||||
fPreferredFormat.type = B_MEDIA_RAW_AUDIO;
|
fPreferredFormat.type = B_MEDIA_RAW_AUDIO;
|
||||||
fPreferredFormat.u.raw_audio.format = MultiAudioDevice::convert_multiaudio_format_to_media_format(fDevice->MFI.output.format);
|
fPreferredFormat.u.raw_audio.format = MultiAudioDevice::convert_multiaudio_format_to_media_format(fDevice->MFI.output.format);
|
||||||
|
fPreferredFormat.u.raw_audio.valid_bits = MultiAudioDevice::convert_multiaudio_format_to_valid_bits(fDevice->MFI.output.format);
|
||||||
fPreferredFormat.u.raw_audio.channel_count = 2;
|
fPreferredFormat.u.raw_audio.channel_count = 2;
|
||||||
fPreferredFormat.u.raw_audio.frame_rate = MultiAudioDevice::convert_multiaudio_rate_to_media_rate(fDevice->MFI.input.rate); // measured in Hertz
|
fPreferredFormat.u.raw_audio.frame_rate = MultiAudioDevice::convert_multiaudio_rate_to_media_rate(fDevice->MFI.input.rate); // measured in Hertz
|
||||||
fPreferredFormat.u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
fPreferredFormat.u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
||||||
@@ -373,10 +374,11 @@ status_t MultiAudioNode::AcceptFormat(
|
|||||||
/*if(format->u.raw_audio.format == media_raw_audio_format::B_AUDIO_FLOAT
|
/*if(format->u.raw_audio.format == media_raw_audio_format::B_AUDIO_FLOAT
|
||||||
&& channel->fPreferredFormat.u.raw_audio.format == media_raw_audio_format::B_AUDIO_SHORT)
|
&& channel->fPreferredFormat.u.raw_audio.format == media_raw_audio_format::B_AUDIO_SHORT)
|
||||||
format->u.raw_audio.format = media_raw_audio_format::B_AUDIO_FLOAT;
|
format->u.raw_audio.format = media_raw_audio_format::B_AUDIO_FLOAT;
|
||||||
else*/
|
else*/
|
||||||
format->u.raw_audio.format = channel->fPreferredFormat.u.raw_audio.format; //MultiAudioDevice::convert_multiaudio_format_to_media_format(fDevice->MFI.output.format); //media_raw_audio_format::B_AUDIO_SHORT;
|
format->u.raw_audio.format = channel->fPreferredFormat.u.raw_audio.format;
|
||||||
|
format->u.raw_audio.valid_bits = channel->fPreferredFormat.u.raw_audio.valid_bits;
|
||||||
|
|
||||||
format->u.raw_audio.frame_rate = channel->fPreferredFormat.u.raw_audio.frame_rate;//MultiAudioDevice::convert_multiaudio_rate_to_media_rate(fDevice->MFI.output.rate); //48000.0;
|
format->u.raw_audio.frame_rate = channel->fPreferredFormat.u.raw_audio.frame_rate;
|
||||||
format->u.raw_audio.channel_count = channel->fPreferredFormat.u.raw_audio.channel_count;
|
format->u.raw_audio.channel_count = channel->fPreferredFormat.u.raw_audio.channel_count;
|
||||||
format->u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
format->u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
||||||
format->u.raw_audio.buffer_size = fDevice->MBL.return_playback_buffer_size
|
format->u.raw_audio.buffer_size = fDevice->MBL.return_playback_buffer_size
|
||||||
@@ -760,12 +762,7 @@ MultiAudioNode::PrepareToConnect(const media_source& what, const media_destinati
|
|||||||
fprintf(stderr, "\tnon-raw-audio format?!\n");
|
fprintf(stderr, "\tnon-raw-audio format?!\n");
|
||||||
return B_MEDIA_BAD_FORMAT;
|
return B_MEDIA_BAD_FORMAT;
|
||||||
}
|
}
|
||||||
else if (format->u.raw_audio.format != media_raw_audio_format::B_AUDIO_SHORT)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "\tnon-short-audio format?!\n");
|
|
||||||
return B_MEDIA_BAD_FORMAT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// !!! validate all other fields except for buffer_size here, because the consumer might have
|
// !!! validate all other fields except for buffer_size here, because the consumer might have
|
||||||
// supplied different values from AcceptFormat()?
|
// supplied different values from AcceptFormat()?
|
||||||
|
|
||||||
@@ -1677,7 +1674,30 @@ MultiAudioNode::FillNextBuffer(node_input &input, BBuffer* buffer)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case media_raw_audio_format::B_AUDIO_INT:
|
case media_raw_audio_format::B_AUDIO_INT:
|
||||||
|
switch(input.fFormat.u.raw_audio.format) {
|
||||||
|
case media_raw_audio_format::B_AUDIO_FLOAT:
|
||||||
|
break;
|
||||||
|
case media_raw_audio_format::B_AUDIO_INT: {
|
||||||
|
size_t frame_size = input.fInput.format.u.raw_audio.channel_count * sizeof(int32);
|
||||||
|
size_t stride = fDevice->MBL.playback_buffers[input.fBufferCycle][input.fChannelId].stride;
|
||||||
|
//PRINT(("stride : %i, frame_size : %i, return_playback_buffer_size : %i\n", stride, frame_size, fDevice->MBL.return_playback_buffer_size));
|
||||||
|
for(uint32 channel = 0; channel < input.fInput.format.u.raw_audio.channel_count; channel++) {
|
||||||
|
char *sample_dest = fDevice->MBL.playback_buffers[input.fBufferCycle][input.fChannelId + channel].base;
|
||||||
|
//char *sample_src = (char*)buffer->Data() + (input.fInput.format.u.raw_audio.channel_count - 1 - channel) * sizeof(int16);
|
||||||
|
char *sample_src = (char*)buffer->Data() + channel * sizeof(int32);
|
||||||
|
for(uint32 i=fDevice->MBL.return_playback_buffer_size; i>0; i--) {
|
||||||
|
*(int32*)sample_dest = *(int32*)sample_src;
|
||||||
|
sample_dest += stride;
|
||||||
|
sample_src += frame_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case media_raw_audio_format::B_AUDIO_SHORT:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case media_raw_audio_format::B_AUDIO_SHORT:
|
case media_raw_audio_format::B_AUDIO_SHORT:
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <BufferProducer.h>
|
#include <BufferProducer.h>
|
||||||
#include <Controllable.h>
|
#include <Controllable.h>
|
||||||
#include <MediaEventLooper.h>
|
#include <MediaEventLooper.h>
|
||||||
|
#include <ParameterWeb.h>
|
||||||
#include <TimeSource.h>
|
#include <TimeSource.h>
|
||||||
#include <Controllable.h>
|
#include <Controllable.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
|
|||||||
Reference in New Issue
Block a user