Added a small test app that prints out all BMediaFormats supported media_formats,

and some other tiny things.
Will print out a meaningful error in case there is one - tests locking behaviour
of BMediaFormats::GetNextFormat() and if GetCodeFor() works correctly.
Added to the build. Removed "root" library from the rules - that one doesn't
have to be included manually.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6200 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2004-01-20 14:25:08 +00:00
parent 57263483db
commit 73ff0e8f02
2 changed files with 221 additions and 4 deletions

View File

@ -1,14 +1,17 @@
SubDir OBOS_TOP src tests kits media ;
SimpleTest AreaTest : AreaTest.cpp : be root ;
SimpleTest AreaTest : AreaTest.cpp : be ;
SimpleTest BufferTest : BufferTest.cpp : libmedia.so be root ;
SimpleTest BufferTest : BufferTest.cpp : libmedia.so be ;
SimpleTest SizeofTest : SizeofTest.cpp : be root ;
SimpleTest SizeofTest : SizeofTest.cpp : be ;
SimpleTest TimedEventQueueTest : TimedEventQueueTest.cpp
: libmedia.so be root ;
: libmedia.so be ;
SimpleTest mediaFormats :
mediaFormats.cpp
: media ;
SubInclude OBOS_TOP src tests kits media media_decoder ;
SubInclude OBOS_TOP src tests kits media notificationtest ;

View File

@ -0,0 +1,214 @@
/*
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
** Distributed under the terms of the OpenBeOS License.
*/
#include <MediaFormats.h>
#include <stdio.h>
#include <string.h>
static const char *
get_family_string(media_format_family family)
{
switch (family) {
case B_BEOS_FORMAT_FAMILY:
return "BeOS";
case B_ANY_FORMAT_FAMILY:
return "any";
case B_QUICKTIME_FORMAT_FAMILY:
return "QuickTime";
case B_AVI_FORMAT_FAMILY:
return "AVI";
case B_ASF_FORMAT_FAMILY:
return "ASF";
case B_MPEG_FORMAT_FAMILY:
return "MPEG";
case B_WAV_FORMAT_FAMILY:
return "WAV";
case B_AIFF_FORMAT_FAMILY:
return "AIFF";
case B_AVR_FORMAT_FAMILY:
return "AVR";
case B_MISC_FORMAT_FAMILY:
return "misc";
// these are OpenBeOS specific:
// case B_OGG_FORMAT_FAMILY:
// return "OGG";
// case B_META_FORMAT_FAMILY:
// return "meta";
default:
return "unknown";
}
}
static const char *
get_mpeg_string(int32 id)
{
switch (id) {
case B_MPEG_ANY:
return "any";
case B_MPEG_1_AUDIO_LAYER_1:
return "mpeg 1 audio layer 1";
case B_MPEG_1_AUDIO_LAYER_2:
return "mpeg 1 audio layer 2";
case B_MPEG_1_AUDIO_LAYER_3:
return "mpeg 1 audio layer 3 (mp3)";
case B_MPEG_1_VIDEO:
return "mpeg 1 video";
// these are OpenBeOS specific:
/* case B_MPEG_2_AUDIO_LAYER_1:
return "mpeg 2 audio layer 1";
case B_MPEG_2_AUDIO_LAYER_2:
return "mpeg 2 audio layer 2";
case B_MPEG_2_AUDIO_LAYER_3:
return "mpeg 2 audio layer 3";
case B_MPEG_2_VIDEO:
return "mpeg 2 video";
case B_MPEG_2_5_AUDIO_LAYER_1:
return "mpeg 2.5 audio layer 1";
case B_MPEG_2_5_AUDIO_LAYER_2:
return "mpeg 2.5 audio layer 2";
case B_MPEG_2_5_AUDIO_LAYER_3:
return "mpeg 2.5 audio layer 3";
*/ default:
return "unknown";
}
}
static void
print_fourcc(uint32 id)
{
char string[5];
for (int32 i = 0; i < 4; i++) {
uint8 c = uint8((id >> (24 - i * 8)) & 0xff);
if (c < ' ' || c > 0x7f)
string[i] = '.';
else
string[i] = (char)c;
}
string[4] = '\0';
printf("%s (0x%lx)\n", string, id);
}
void
dump_media_format_description(media_format_description &description)
{
printf("media_format_description:\n");
printf("\tfamily:\t%s\n", get_family_string(description.family));
switch (description.family) {
case B_BEOS_FORMAT_FAMILY:
printf("\tformat:\t");
print_fourcc(description.u.beos.format);
break;
case B_AVI_FORMAT_FAMILY:
case B_AIFF_FORMAT_FAMILY:
case B_WAV_FORMAT_FAMILY:
printf("\tcodec:\t");
print_fourcc(description.u.avi.codec);
break;
case B_AVR_FORMAT_FAMILY:
printf("\tid:\t");
print_fourcc(description.u.avr.id);
break;
case B_QUICKTIME_FORMAT_FAMILY:
printf("\tcodec:\t");
print_fourcc(description.u.quicktime.codec);
printf("\tvendor:\t");
print_fourcc(description.u.quicktime.vendor);
break;
case B_MISC_FORMAT_FAMILY:
printf("\tcodec:\t\t");
print_fourcc(description.u.misc.file_format);
printf("\tfile format:\t");
print_fourcc(description.u.misc.codec);
break;
case B_MPEG_FORMAT_FAMILY:
printf("\ttype:\t%s\n", get_mpeg_string(description.u.mpeg.id));
break;
case B_ASF_FORMAT_FAMILY:
// note, this is endian depended - you shouldn't do it this way for real...
printf("\tguid:\t0x%Lx%Lx\n", *(uint64 *)&description.u.asf.guid.data[0], *(uint64 *)&description.u.asf.guid.data[8]);
default:
break;
}
}
int
main(int argc, char **argv)
{
BMediaFormats formats;
status_t status = formats.InitCheck();
if (status != B_OK) {
fprintf(stderr, "BMediaFormats::InitCheck() failed: %s\n", strerror(status));
return -1;
}
media_format format;
status = formats.GetAVIFormatFor('DIVX', &format, B_MEDIA_ENCODED_VIDEO);
if (status != B_OK) {
fprintf(stderr, "BMediaFormats::GetAVIFormatFor() failed: %s\n", strerror(status));
return -1;
}
media_format_description description;
status = formats.GetCodeFor(format, B_AVI_FORMAT_FAMILY, &description);
if (status != B_OK) {
fprintf(stderr, "BMediaFormats::GetCodeFor() failed: %s\n", strerror(status));
return -1;
}
dump_media_format_description(description);
char desc[256];
string_for_format(format, desc, sizeof(desc));
printf("\tformat:\t%s\n", desc);
status = formats.GetCodeFor(format, B_MPEG_FORMAT_FAMILY, &description);
if (status == B_OK) {
fprintf(stderr, "BMediaFormats::GetCodeFor() succeded with wrong family!\n");
return -1;
}
puts("\n***** all supported formats *****");
// Rewind() should only work when the formats object is locked
status = formats.RewindFormats();
if (status == B_OK) {
fprintf(stderr, "BMediaFormats::RewindFormats() succeded unlocked!\n");
return -1;
}
if (!formats.Lock()) {
fprintf(stderr, "BMediaFormats::Lock() failed!\n");
return -1;
}
status = formats.RewindFormats();
if (status != B_OK) {
fprintf(stderr, "BMediaFormats::RewindFormats() failed: %s\n", strerror(status));
return -1;
}
int32 count = 0;
while ((status = formats.GetNextFormat(&format, &description)) == B_OK) {
dump_media_format_description(description);
string_for_format(format, desc, sizeof(desc));
printf("\tformat:\t%s\n", desc);
count++;
}
if (status != B_BAD_INDEX)
fprintf(stderr, "BMediaFormats::GetNextFormat() failed: %s\n", strerror(status));
printf("***** %ld supported formats *****\n", count);
formats.Unlock();
return 0;
}