* set_frame() now supports 8/18/20/24 bit modes as well.

* Improved output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24121 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2008-02-25 19:29:49 +00:00
parent c0f9f1b158
commit 1cf41b6de1

View File

@ -74,9 +74,18 @@ static void
set_frame(char* frame, uint32 format, float value)
{
switch (format) {
case B_FMT_8BIT_U:
*(uint8*)frame = uint8(value * INT8_MAX) + 128;
break;
case B_FMT_8BIT_S:
*(int8*)frame = int8(value * INT8_MAX);
break;
case B_FMT_16BIT:
*(int16*)frame = int16(value * INT16_MAX);
break;
case B_FMT_18BIT:
case B_FMT_20BIT:
case B_FMT_24BIT:
case B_FMT_32BIT:
*(int32*)frame = int32(value * INT32_MAX);
break;
@ -91,8 +100,9 @@ static uint32
get_rate(uint32 rateBits)
{
uint32 rate = 0;
for (uint32 i = 0; (1UL << i) <= rateBits; i++) {
if ((1UL << i) == rateBits)
for (uint32 i = 0; (1UL << i) <= rateBits
&& i < sizeof(kSampleRates) / sizeof(kSampleRates[0]); i++) {
if (((1 << i) & rateBits) != 0)
rate = kSampleRates[i];
}
@ -100,6 +110,18 @@ get_rate(uint32 rateBits)
}
static void
print_rates(uint32 rateBits)
{
for (uint32 i = 0; i < sizeof(kSampleRates) / sizeof(kSampleRates[0]);
i++) {
if (((1 << i) & rateBits) != 0)
printf(" %lu", kSampleRates[i]);
}
putchar('\n');
}
static const char*
get_format_name(uint32 format)
{
@ -112,6 +134,17 @@ get_format_name(uint32 format)
}
static void
print_formats(uint32 formatBits)
{
for (uint32 i = 0; i < sizeof(kFormats) / sizeof(kFormats[0]); i++) {
if ((kFormats[i].type & formatBits) != 0)
printf(" %s", kFormats[i].name);
}
putchar('\n');
}
static const char*
get_kind_name(uint32 kind)
{
@ -195,16 +228,18 @@ do_desc(int argc, char** argv)
printf("friendly name:\t\t\t%s\n", sDescription.friendly_name);
printf("vendor:\t\t\t\t%s\n\n", sDescription.vendor_info);
printf("output rates:\t\t\t0x%lx (max %lu)\n", sDescription.output_rates,
get_rate(sDescription.output_rates));
printf("input rates:\t\t\t0x%lx (max %lu)\n", sDescription.input_rates,
get_rate(sDescription.input_rates));
printf("output rates:\t\t\t0x%lx\n", sDescription.output_rates);
print_rates(sDescription.output_rates);
printf("input rates:\t\t\t0x%lx\n", sDescription.input_rates);
print_rates(sDescription.input_rates);
printf("max cont. var. sample rate:\t%.0f\n",
sDescription.max_cvsr_rate);
printf("min cont. var. sample rate:\t%.0f\n",
sDescription.min_cvsr_rate);
printf("output formats:\t\t\t0x%lx\n", sDescription.output_formats);
print_formats(sDescription.output_formats);
printf("input formats:\t\t\t0x%lx\n", sDescription.input_formats);
print_formats(sDescription.input_formats);
printf("lock sources:\t\t\t0x%lx\n", sDescription.lock_sources);
printf("timecode sources:\t\t0x%lx\n", sDescription.timecode_sources);
printf("interface flags:\t\t0x%lx\n", sDescription.interface_flags);
@ -336,7 +371,7 @@ do_play(int argc, char** argv)
bigtime_t startTime = system_time();
uint32 exchanged = 0;
uint32 cycle = ~0;
int32 cycle = -1;
uint32 x = 0;
while (true) {
if (system_time() - startTime > 1000000LL)
@ -375,7 +410,7 @@ do_play(int argc, char** argv)
exchanged++;
}
printf("%ld buffers exchanged while playing (%lu frames played (%lu)).\n",
printf("%ld buffers exchanged while playing (%lu frames played (%Ld)).\n",
exchanged, x, bufferInfo.played_frames_count);
// clear buffers