Implemented some basic functionality (namely Sniff() and GetStreamInfo()).
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6134 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -5,9 +5,11 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "MusePackReader.h"
|
#include "MusePackReader.h"
|
||||||
|
#include "mpc/mpc_dec.h"
|
||||||
|
|
||||||
#include <ByteOrder.h>
|
|
||||||
#include <InterfaceDefs.h>
|
#include <InterfaceDefs.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
MusePackReader::MusePackReader()
|
MusePackReader::MusePackReader()
|
||||||
@@ -23,12 +25,29 @@ MusePackReader::~MusePackReader()
|
|||||||
const char *
|
const char *
|
||||||
MusePackReader::Copyright()
|
MusePackReader::Copyright()
|
||||||
{
|
{
|
||||||
|
return "MusePack reader, " B_UTF8_COPYRIGHT " by Axel Dörfler";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::Sniff(int32 *streamCount)
|
MusePackReader::Sniff(int32 *_streamCount)
|
||||||
{
|
{
|
||||||
|
BPositionIO *file = dynamic_cast<BPositionIO *>(Source());
|
||||||
|
if (file == NULL)
|
||||||
|
// we cannot handle non seekable files for now
|
||||||
|
return B_ERROR;
|
||||||
|
|
||||||
|
file->Seek(0, SEEK_SET);
|
||||||
|
int error = fInfo.ReadStreamInfo(file);
|
||||||
|
if (error > B_OK) {
|
||||||
|
// error came from engine
|
||||||
|
printf("MusePack: ReadStreamInfo() engine error %d\n", error);
|
||||||
|
return B_ERROR;
|
||||||
|
} else if (error < B_OK)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
*_streamCount = 1;
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -39,31 +58,58 @@ MusePackReader::GetFileFormatInfo(media_file_format *mff)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::AllocateCookie(int32 streamNumber, void **cookie)
|
MusePackReader::AllocateCookie(int32 streamNumber, void **_cookie)
|
||||||
{
|
{
|
||||||
|
// we don't need a cookie - we only know one single stream
|
||||||
|
*_cookie = NULL;
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::FreeCookie(void *cookie)
|
MusePackReader::FreeCookie(void *cookie)
|
||||||
{
|
{
|
||||||
|
// nothing to do here
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration, media_format *format, void **infoBuffer, int32 *infoSize)
|
MusePackReader::GetStreamInfo(void *cookie, int64 *_frameCount, bigtime_t *_duration,
|
||||||
|
media_format *format, void **_infoBuffer, int32 *_infoSize)
|
||||||
{
|
{
|
||||||
|
if (cookie != NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
*_frameCount = fInfo.simple.Frames;
|
||||||
|
*_duration = bigtime_t(1000.0 * (fInfo.simple.Frames - 0.5) * FRAMELEN
|
||||||
|
/ (fInfo.simple.SampleFreq / 1000) + 0.5);
|
||||||
|
|
||||||
|
media_format_description description;
|
||||||
|
description.family = B_MISC_FORMAT_FAMILY;
|
||||||
|
description.u.misc.codec = 'MPC7';
|
||||||
|
// ToDo: does this make any sense? BTW '7' is the most recent stream version...
|
||||||
|
BMediaFormats formats;
|
||||||
|
formats.GetFormatFor(description, format);
|
||||||
|
|
||||||
|
*_infoBuffer = NULL;
|
||||||
|
*_infoSize = 0;
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::Seek(void *cookie, uint32 seekTo, int64 *frame, bigtime_t *time)
|
MusePackReader::Seek(void *cookie, uint32 seekTo, int64 *frame, bigtime_t *time)
|
||||||
{
|
{
|
||||||
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::GetNextChunk(void *cookie, void **chunkBuffer, int32 *chunkSize, media_header *mediaHeader)
|
MusePackReader::GetNextChunk(void *cookie, void **chunkBuffer, int32 *chunkSize,
|
||||||
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
#include "ReaderPlugin.h"
|
#include "ReaderPlugin.h"
|
||||||
#include <MediaFormats.h>
|
#include <MediaFormats.h>
|
||||||
|
|
||||||
|
#include "mpc/in_mpc.h"
|
||||||
|
|
||||||
|
|
||||||
class MusePackReader : public Reader {
|
class MusePackReader : public Reader {
|
||||||
public:
|
public:
|
||||||
@@ -34,6 +36,7 @@ class MusePackReader : public Reader {
|
|||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
StreamInfo fInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* MUSEPACK_READER_H */
|
#endif /* MUSEPACK_READER_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user