* 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
@@ -74,9 +74,18 @@ static void
set_frame(char* frame, uint32 format, float value) set_frame(char* frame, uint32 format, float value)
{ {
switch (format) { 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: case B_FMT_16BIT:
*(int16*)frame = int16(value * INT16_MAX); *(int16*)frame = int16(value * INT16_MAX);
break; break;
case B_FMT_18BIT:
case B_FMT_20BIT:
case B_FMT_24BIT:
case B_FMT_32BIT: case B_FMT_32BIT:
*(int32*)frame = int32(value * INT32_MAX); *(int32*)frame = int32(value * INT32_MAX);
break; break;
@@ -91,8 +100,9 @@ static uint32
get_rate(uint32 rateBits) get_rate(uint32 rateBits)
{ {
uint32 rate = 0; uint32 rate = 0;
for (uint32 i = 0; (1UL << i) <= rateBits; i++) { for (uint32 i = 0; (1UL << i) <= rateBits
if ((1UL << i) == rateBits) && i < sizeof(kSampleRates) / sizeof(kSampleRates[0]); i++) {
if (((1 << i) & rateBits) != 0)
rate = kSampleRates[i]; 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* static const char*
get_format_name(uint32 format) 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* static const char*
get_kind_name(uint32 kind) 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("friendly name:\t\t\t%s\n", sDescription.friendly_name);
printf("vendor:\t\t\t\t%s\n\n", sDescription.vendor_info); 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, printf("output rates:\t\t\t0x%lx\n", sDescription.output_rates);
get_rate(sDescription.output_rates)); print_rates(sDescription.output_rates);
printf("input rates:\t\t\t0x%lx (max %lu)\n", sDescription.input_rates, printf("input rates:\t\t\t0x%lx\n", sDescription.input_rates);
get_rate(sDescription.input_rates)); print_rates(sDescription.input_rates);
printf("max cont. var. sample rate:\t%.0f\n", printf("max cont. var. sample rate:\t%.0f\n",
sDescription.max_cvsr_rate); sDescription.max_cvsr_rate);
printf("min cont. var. sample rate:\t%.0f\n", printf("min cont. var. sample rate:\t%.0f\n",
sDescription.min_cvsr_rate); sDescription.min_cvsr_rate);
printf("output formats:\t\t\t0x%lx\n", sDescription.output_formats); 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); 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("lock sources:\t\t\t0x%lx\n", sDescription.lock_sources);
printf("timecode sources:\t\t0x%lx\n", sDescription.timecode_sources); printf("timecode sources:\t\t0x%lx\n", sDescription.timecode_sources);
printf("interface flags:\t\t0x%lx\n", sDescription.interface_flags); 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(); bigtime_t startTime = system_time();
uint32 exchanged = 0; uint32 exchanged = 0;
uint32 cycle = ~0; int32 cycle = -1;
uint32 x = 0; uint32 x = 0;
while (true) { while (true) {
if (system_time() - startTime > 1000000LL) if (system_time() - startTime > 1000000LL)
@@ -375,7 +410,7 @@ do_play(int argc, char** argv)
exchanged++; 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); exchanged, x, bufferInfo.played_frames_count);
// clear buffers // clear buffers