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:
parent
ff14d2457a
commit
f616df6a18
|
@ -2,6 +2,10 @@ SubDir HAIKU_TOP src add-ons media media-add-ons multi_audio ;
|
|||
|
||||
SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||
|
||||
if $(TARGET_PLATFORM) != haiku {
|
||||
SubDirC++Flags -fmultiple-symbol-spaces ;
|
||||
}
|
||||
|
||||
Addon multi_audio.media_addon : media :
|
||||
MultiAudioAddOn.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)
|
||||
{
|
||||
switch(fmt) {
|
||||
|
|
|
@ -45,6 +45,7 @@ public:
|
|||
static float convert_multiaudio_rate_to_media_rate(uint32 rate);
|
||||
static uint32 convert_media_rate_to_multiaudio_rate(float rate);
|
||||
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 select_multiaudio_rate(uint32 rate);
|
||||
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
|
||||
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.valid_bits = MultiAudioDevice::convert_multiaudio_format_to_valid_bits(fDevice->MFI.output.format);
|
||||
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.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
|
||||
&& 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;
|
||||
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;
|
||||
else*/
|
||||
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.byte_order = B_MEDIA_HOST_ENDIAN;
|
||||
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");
|
||||
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
|
||||
// supplied different values from AcceptFormat()?
|
||||
|
||||
|
@ -1677,7 +1674,30 @@ MultiAudioNode::FillNextBuffer(node_input &input, BBuffer* buffer)
|
|||
|
||||
break;
|
||||
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;
|
||||
case media_raw_audio_format::B_AUDIO_SHORT:
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <BufferProducer.h>
|
||||
#include <Controllable.h>
|
||||
#include <MediaEventLooper.h>
|
||||
#include <ParameterWeb.h>
|
||||
#include <TimeSource.h>
|
||||
#include <Controllable.h>
|
||||
#include <File.h>
|
||||
|
|
Loading…
Reference in New Issue