Media Codec API just got a visit from the coding style police.
We now use "const" for the chunk buffer pointer returned by GetNextChunk, because the buffer is not supposed to be modified by the codec. size_t is used for the size where applicable. This matches BMediaDecoder. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13361 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -11,7 +11,7 @@ namespace BPrivate { namespace media {
|
|||||||
|
|
||||||
class ChunkProvider {
|
class ChunkProvider {
|
||||||
public:
|
public:
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader) = 0;
|
media_header *mediaHeader) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ public:
|
|||||||
virtual void GetCodecInfo(media_codec_info *codecInfo) = 0;
|
virtual void GetCodecInfo(media_codec_info *codecInfo) = 0;
|
||||||
|
|
||||||
// Setup get's called with the info data from Reader::GetStreamInfo
|
// Setup get's called with the info data from Reader::GetStreamInfo
|
||||||
virtual status_t Setup(media_format *ioEncodedFormat, const void *infoBuffer, int32 infoSize) = 0;
|
virtual status_t Setup(media_format *ioEncodedFormat, const void *infoBuffer, size_t infoSize) = 0;
|
||||||
|
|
||||||
virtual status_t NegotiateOutputFormat(media_format *ioDecodedFormat) = 0;
|
virtual status_t NegotiateOutputFormat(media_format *ioDecodedFormat) = 0;
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
virtual status_t Decode(void *buffer, int64 *frameCount,
|
virtual status_t Decode(void *buffer, int64 *frameCount,
|
||||||
media_header *mediaHeader, media_decode_info *info = 0) = 0;
|
media_header *mediaHeader, media_decode_info *info = 0) = 0;
|
||||||
|
|
||||||
status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
void Setup(ChunkProvider *provider);
|
void Setup(ChunkProvider *provider);
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ struct stream_info
|
|||||||
status_t status;
|
status_t status;
|
||||||
void * cookie;
|
void * cookie;
|
||||||
bool hasCookie;
|
bool hasCookie;
|
||||||
void * infoBuffer;
|
const void * infoBuffer;
|
||||||
int32 infoBufferSize;
|
size_t infoBufferSize;
|
||||||
ChunkCache * chunkCache;
|
ChunkCache * chunkCache;
|
||||||
media_format encodedFormat;
|
media_format encodedFormat;
|
||||||
};
|
};
|
||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(int32 stream,
|
status_t GetNextChunk(int32 stream,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
status_t CreateDecoder(int32 stream, Decoder **decoder, media_codec_info *mci);
|
status_t CreateDecoder(int32 stream, Decoder **decoder, media_codec_info *mci);
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ public:
|
|||||||
virtual status_t FreeCookie(void *cookie) = 0;
|
virtual status_t FreeCookie(void *cookie) = 0;
|
||||||
|
|
||||||
virtual status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize) = 0;
|
media_format *format, const void **infoBuffer, size_t *infoSize) = 0;
|
||||||
|
|
||||||
virtual status_t Seek(void *cookie,
|
virtual status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time) = 0;
|
int64 *frame, bigtime_t *time) = 0;
|
||||||
|
|
||||||
virtual status_t GetNextChunk(void *cookie,
|
virtual status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader) = 0;
|
media_header *mediaHeader) = 0;
|
||||||
|
|
||||||
BDataIO * Source();
|
BDataIO * Source();
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ AC3Decoder::GetCodecInfo(media_codec_info *info)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
AC3Decoder::Setup(media_format *ioEncodedFormat,
|
AC3Decoder::Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize)
|
const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
void GetCodecInfo(media_codec_info *info);
|
void GetCodecInfo(media_codec_info *info);
|
||||||
|
|
||||||
status_t Setup(media_format *ioEncodedFormat,
|
status_t Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
@@ -57,8 +57,8 @@ private:
|
|||||||
void * fInputBuffer;
|
void * fInputBuffer;
|
||||||
int fInputBufferSize;
|
int fInputBufferSize;
|
||||||
|
|
||||||
void * fInputChunk;
|
const void *fInputChunk;
|
||||||
int32 fInputChunkSize;
|
size_t fInputChunkSize;
|
||||||
int fInputChunkOffset;
|
int fInputChunkOffset;
|
||||||
|
|
||||||
bigtime_t fStartTime;
|
bigtime_t fStartTime;
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ aiffReader::FreeCookie(void *cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
aiffReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
aiffReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
*frameCount = fFrameCount;
|
*frameCount = fFrameCount;
|
||||||
*duration = fDuration;
|
*duration = fDuration;
|
||||||
@@ -376,7 +376,7 @@ aiffReader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
aiffReader::GetNextChunk(void *cookie,
|
aiffReader::GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
// XXX it might be much better to not return any start_time information for encoded formats here,
|
// XXX it might be much better to not return any start_time information for encoded formats here,
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
private:
|
private:
|
||||||
uint32 DecodeFrameRate(void *_80bit_float);
|
uint32 DecodeFrameRate(void *_80bit_float);
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ auReader::FreeCookie(void *cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
auReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
auReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
*frameCount = fFrameCount;
|
*frameCount = fFrameCount;
|
||||||
*duration = fDuration;
|
*duration = fDuration;
|
||||||
@@ -349,7 +349,7 @@ auReader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
auReader::GetNextChunk(void *cookie,
|
auReader::GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
// XXX it might be much better to not return any start_time information for encoded formats here,
|
// XXX it might be much better to not return any start_time information for encoded formats here,
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
BPositionIO *Source() { return fSource; }
|
BPositionIO *Source() { return fSource; }
|
||||||
|
|||||||
@@ -97,23 +97,23 @@ avCodec::GetCodecInfo(media_codec_info *mci)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
avCodec::Setup(media_format *input_format, const void *in_info, int32 in_size)
|
avCodec::Setup(media_format *ioEncodedFormat, const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
if (input_format->type != B_MEDIA_ENCODED_AUDIO && input_format->type != B_MEDIA_ENCODED_VIDEO)
|
if (ioEncodedFormat->type != B_MEDIA_ENCODED_AUDIO && ioEncodedFormat->type != B_MEDIA_ENCODED_VIDEO)
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
|
||||||
isAudio = (input_format->type == B_MEDIA_ENCODED_AUDIO);
|
isAudio = (ioEncodedFormat->type == B_MEDIA_ENCODED_AUDIO);
|
||||||
|
|
||||||
if (isAudio && !fOutputBuffer)
|
if (isAudio && !fOutputBuffer)
|
||||||
fOutputBuffer = new char[100000];
|
fOutputBuffer = new char[100000];
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
string_for_format(*input_format, buffer, sizeof(buffer));
|
string_for_format(*ioEncodedFormat, buffer, sizeof(buffer));
|
||||||
PRINT(("[%c] input_format=%s\n", isAudio?('a'):('v'), buffer));
|
PRINT(("[%c] input_format=%s\n", isAudio?('a'):('v'), buffer));
|
||||||
PRINT(("[%c] in_info_size=%ld\n", isAudio?('a'):('v'), in_size));
|
PRINT(("[%c] in_info_size=%ld\n", isAudio?('a'):('v'), in_size));
|
||||||
PRINT(("[%c] user_data_type=%08lx\n", isAudio?('a'):('v'), input_format->user_data_type));
|
PRINT(("[%c] user_data_type=%08lx\n", isAudio?('a'):('v'), ioEncodedFormat->user_data_type));
|
||||||
// PRINT(("[%c] meta_data_size=%ld\n", isAudio?('a'):('v'), input_format->meta_data_size));
|
// PRINT(("[%c] meta_data_size=%ld\n", isAudio?('a'):('v'), ioEncodedFormat->meta_data_size));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
media_format_description descr;
|
media_format_description descr;
|
||||||
@@ -121,8 +121,8 @@ avCodec::Setup(media_format *input_format, const void *in_info, int32 in_size)
|
|||||||
ffcodec_index_in_table = i;
|
ffcodec_index_in_table = i;
|
||||||
uint64 cid;
|
uint64 cid;
|
||||||
|
|
||||||
if(BMediaFormats().GetCodeFor(*input_format,gCodecTable[i].family,&descr) == B_OK
|
if (BMediaFormats().GetCodeFor(*ioEncodedFormat, gCodecTable[i].family, &descr) == B_OK
|
||||||
&& gCodecTable[i].type == input_format->type)
|
&& gCodecTable[i].type == ioEncodedFormat->type)
|
||||||
{
|
{
|
||||||
PRINT((" codec id = \"%c%c%c%c\"\n", (descr.u.avi.codec >> 24) & 0xff,
|
PRINT((" codec id = \"%c%c%c%c\"\n", (descr.u.avi.codec >> 24) & 0xff,
|
||||||
(descr.u.avi.codec >> 16) & 0xff,
|
(descr.u.avi.codec >> 16) & 0xff,
|
||||||
@@ -159,8 +159,8 @@ avCodec::Setup(media_format *input_format, const void *in_info, int32 in_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (gCodecTable[i].family == B_WAV_FORMAT_FAMILY) {
|
if (gCodecTable[i].family == B_WAV_FORMAT_FAMILY) {
|
||||||
const wave_format_ex *wfmt_data = (const wave_format_ex *)input_format->MetaData();
|
const wave_format_ex *wfmt_data = (const wave_format_ex *)ioEncodedFormat->MetaData();
|
||||||
int wfmt_size = input_format->MetaDataSize();
|
int wfmt_size = ioEncodedFormat->MetaDataSize();
|
||||||
if (wfmt_data && wfmt_size) {
|
if (wfmt_data && wfmt_size) {
|
||||||
fBlockAlign = wfmt_data->block_align;
|
fBlockAlign = wfmt_data->block_align;
|
||||||
fExtraDataSize = wfmt_data->extra_size;
|
fExtraDataSize = wfmt_data->extra_size;
|
||||||
@@ -171,7 +171,7 @@ avCodec::Setup(media_format *input_format, const void *in_info, int32 in_size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fInputFormat = *input_format;
|
fInputFormat = *ioEncodedFormat;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -377,7 +377,7 @@ avCodec::Decode(void *out_buffer, int64 *out_frameCount,
|
|||||||
if (fChunkBufferSize == 0) {
|
if (fChunkBufferSize == 0) {
|
||||||
media_header chunk_mh;
|
media_header chunk_mh;
|
||||||
status_t err;
|
status_t err;
|
||||||
err = GetNextChunk((void **)&fChunkBuffer, &fChunkBufferSize, &chunk_mh);
|
err = GetNextChunk(&fChunkBuffer, &fChunkBufferSize, &chunk_mh);
|
||||||
if (err != B_OK || fChunkBufferSize < 0) {
|
if (err != B_OK || fChunkBufferSize < 0) {
|
||||||
printf("GetNextChunk error\n");
|
printf("GetNextChunk error\n");
|
||||||
fChunkBufferSize = 0;
|
fChunkBufferSize = 0;
|
||||||
@@ -391,7 +391,7 @@ avCodec::Decode(void *out_buffer, int64 *out_frameCount,
|
|||||||
}
|
}
|
||||||
if (fOutputBufferSize == 0) {
|
if (fOutputBufferSize == 0) {
|
||||||
int len, out_size;
|
int len, out_size;
|
||||||
len = avcodec_decode_audio(ffc, (short *)fOutputBuffer, &out_size, (uint8_t *)fChunkBuffer + fChunkBufferOffset, fChunkBufferSize);
|
len = avcodec_decode_audio(ffc, (short *)fOutputBuffer, &out_size, const_cast<uint8_t *>(static_cast<const uint8_t *>(fChunkBuffer)) + fChunkBufferOffset, fChunkBufferSize);
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
printf("########### audio decode error, fChunkBufferSize %ld, fChunkBufferOffset %ld\n", fChunkBufferSize, fChunkBufferOffset);
|
printf("########### audio decode error, fChunkBufferSize %ld, fChunkBufferOffset %ld\n", fChunkBufferSize, fChunkBufferOffset);
|
||||||
out_size = 0;
|
out_size = 0;
|
||||||
@@ -411,8 +411,8 @@ avCodec::Decode(void *out_buffer, int64 *out_frameCount,
|
|||||||
|
|
||||||
media_header chunk_mh;
|
media_header chunk_mh;
|
||||||
status_t err;
|
status_t err;
|
||||||
void *data;
|
const void *data;
|
||||||
int32 size;
|
size_t size;
|
||||||
|
|
||||||
err = GetNextChunk(&data, &size, &chunk_mh);
|
err = GetNextChunk(&data, &size, &chunk_mh);
|
||||||
if (err != B_OK) {
|
if (err != B_OK) {
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ class avCodec : public Decoder
|
|||||||
|
|
||||||
virtual void GetCodecInfo(media_codec_info *mci);
|
virtual void GetCodecInfo(media_codec_info *mci);
|
||||||
|
|
||||||
virtual status_t Setup(media_format *input_format,
|
virtual status_t Setup(media_format *ioEncodedFormat,
|
||||||
const void *in_info, int32 in_size);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
virtual status_t NegotiateOutputFormat(media_format *output_format);
|
virtual status_t NegotiateOutputFormat(media_format *output_format);
|
||||||
|
|
||||||
@@ -83,9 +83,9 @@ class avCodec : public Decoder
|
|||||||
float fOutputFrameRate;
|
float fOutputFrameRate;
|
||||||
int fOutputFrameSize; // sample size * channel count
|
int fOutputFrameSize; // sample size * channel count
|
||||||
|
|
||||||
char * fChunkBuffer;
|
const void *fChunkBuffer;
|
||||||
int32 fChunkBufferOffset;
|
int32 fChunkBufferOffset;
|
||||||
int32 fChunkBufferSize;
|
size_t fChunkBufferSize;
|
||||||
|
|
||||||
char * fOutputBuffer;
|
char * fOutputBuffer;
|
||||||
int32 fOutputBufferOffset;
|
int32 fOutputBufferOffset;
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ aviReader::FreeCookie(void *_cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
aviReader::GetStreamInfo(void *_cookie, int64 *frameCount, bigtime_t *duration,
|
aviReader::GetStreamInfo(void *_cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
avi_cookie *cookie = (avi_cookie *)_cookie;
|
avi_cookie *cookie = (avi_cookie *)_cookie;
|
||||||
|
|
||||||
@@ -377,7 +377,7 @@ aviReader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
aviReader::GetNextChunk(void *_cookie,
|
aviReader::GetNextChunk(void *_cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
avi_cookie *cookie = (avi_cookie *)_cookie;
|
avi_cookie *cookie = (avi_cookie *)_cookie;
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
private:
|
private:
|
||||||
OpenDMLFile *fFile;
|
OpenDMLFile *fFile;
|
||||||
|
|||||||
@@ -1904,7 +1904,7 @@ static int readMoreBlocks(MatroskaFile *mf) {
|
|||||||
if (++retries > 3) // don't try too hard
|
if (++retries > 3) // don't try too hard
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
for (;;cp) {
|
for (;;cp) { // <-- XXX TODO FIX THIS!
|
||||||
if (filepos(mf) >= mf->pSegmentTop) {
|
if (filepos(mf) >= mf->pSegmentTop) {
|
||||||
mf->readPosition = filepos(mf);
|
mf->readPosition = filepos(mf);
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ mkvReader::FreeCookie(void *_cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
mkvReader::GetStreamInfo(void *_cookie, int64 *frameCount, bigtime_t *duration,
|
mkvReader::GetStreamInfo(void *_cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
mkv_cookie *cookie = (mkv_cookie *)_cookie;
|
mkv_cookie *cookie = (mkv_cookie *)_cookie;
|
||||||
*frameCount = cookie->frame_count;
|
*frameCount = cookie->frame_count;
|
||||||
@@ -385,7 +385,7 @@ mkvReader::Seek(void *_cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
mkvReader::GetNextChunk(void *_cookie,
|
mkvReader::GetNextChunk(void *_cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
mkv_cookie *cookie = (mkv_cookie *)_cookie;
|
mkv_cookie *cookie = (mkv_cookie *)_cookie;
|
||||||
|
|||||||
@@ -46,14 +46,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
private:
|
private:
|
||||||
status_t SetupVideoCookie(mkv_cookie *cookie);
|
status_t SetupVideoCookie(mkv_cookie *cookie);
|
||||||
|
|||||||
@@ -416,7 +416,7 @@ movReader::FreeCookie(void *_cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
movReader::GetStreamInfo(void *_cookie, int64 *frameCount, bigtime_t *duration,
|
movReader::GetStreamInfo(void *_cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
mov_cookie *cookie = (mov_cookie *)_cookie;
|
mov_cookie *cookie = (mov_cookie *)_cookie;
|
||||||
|
|
||||||
@@ -469,7 +469,7 @@ movReader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
movReader::GetNextChunk(void *_cookie,
|
movReader::GetNextChunk(void *_cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
mov_cookie *cookie = (mov_cookie *)_cookie;
|
mov_cookie *cookie = (mov_cookie *)_cookie;
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
private:
|
private:
|
||||||
MOVFileReader *theFileReader;
|
MOVFileReader *theFileReader;
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ mp3Decoder::GetCodecInfo(media_codec_info *info)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
mp3Decoder::Setup(media_format *ioEncodedFormat,
|
mp3Decoder::Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize)
|
const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
// decode first chunk to initialize mpeg library
|
// decode first chunk to initialize mpeg library
|
||||||
if (B_OK != DecodeNextChunk()) {
|
if (B_OK != DecodeNextChunk()) {
|
||||||
@@ -237,8 +237,8 @@ mp3Decoder::Decode(void *buffer, int64 *frameCount,
|
|||||||
status_t
|
status_t
|
||||||
mp3Decoder::DecodeNextChunk()
|
mp3Decoder::DecodeNextChunk()
|
||||||
{
|
{
|
||||||
void *chunkBuffer;
|
const void *chunkBuffer;
|
||||||
int32 chunkSize;
|
size_t chunkSize;
|
||||||
media_header mh;
|
media_header mh;
|
||||||
int outsize;
|
int outsize;
|
||||||
int result;
|
int result;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public:
|
|||||||
void GetCodecInfo(media_codec_info *codecInfo);
|
void GetCodecInfo(media_codec_info *codecInfo);
|
||||||
|
|
||||||
status_t Setup(media_format *ioEncodedFormat,
|
status_t Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ mp3Reader::FreeCookie(void *cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
mp3Reader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
mp3Reader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
mp3data *data = reinterpret_cast<mp3data *>(cookie);
|
mp3data *data = reinterpret_cast<mp3data *>(cookie);
|
||||||
|
|
||||||
@@ -382,7 +382,7 @@ mp3Reader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
mp3Reader::GetNextChunk(void *cookie,
|
mp3Reader::GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
mp3data *data = reinterpret_cast<mp3data *>(cookie);
|
mp3data *data = reinterpret_cast<mp3data *>(cookie);
|
||||||
|
|||||||
@@ -47,14 +47,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
BPositionIO *Source() { return fSeekableSource; }
|
BPositionIO *Source() { return fSeekableSource; }
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ MusePackDecoder::GetCodecInfo(media_codec_info *info)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackDecoder::Setup(media_format *ioEncodedFormat, const void *infoBuffer, int32 infoSize)
|
MusePackDecoder::Setup(media_format *ioEncodedFormat, const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
if (infoBuffer == NULL || infoSize != sizeof(MPC_decoder))
|
if (infoBuffer == NULL || infoSize != sizeof(MPC_decoder))
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class MusePackDecoder : public Decoder {
|
|||||||
void GetCodecInfo(media_codec_info *info);
|
void GetCodecInfo(media_codec_info *info);
|
||||||
|
|
||||||
status_t Setup(media_format *ioEncodedFormat,
|
status_t Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ MusePackReader::FreeCookie(void *cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::GetStreamInfo(void *cookie, int64 *_frameCount, bigtime_t *_duration,
|
MusePackReader::GetStreamInfo(void *cookie, int64 *_frameCount, bigtime_t *_duration,
|
||||||
media_format *format, void **_infoBuffer, int32 *_infoSize)
|
media_format *format, const void **_infoBuffer, size_t *_infoSize)
|
||||||
{
|
{
|
||||||
if (cookie != NULL)
|
if (cookie != NULL)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -145,7 +145,7 @@ MusePackReader::Seek(void *cookie, uint32 seekTo, int64 *frame, bigtime_t *time)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
MusePackReader::GetNextChunk(void *cookie, void **chunkBuffer, int32 *chunkSize,
|
MusePackReader::GetNextChunk(void *cookie, const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
// this one will never be called by our decoder
|
// this one will never be called by our decoder
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ class MusePackReader : public Reader {
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie, uint32 seekTo,
|
status_t Seek(void *cookie, uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie, void **chunkBuffer, int32 *chunkSize,
|
status_t GetNextChunk(void *cookie, const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ OggReader::FreeCookie(void *cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
OggReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
TRACE("OggReader::GetStreamInfo\n");
|
TRACE("OggReader::GetStreamInfo\n");
|
||||||
*infoBuffer = 0;
|
*infoBuffer = 0;
|
||||||
@@ -316,7 +316,7 @@ OggReader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggReader::GetNextChunk(void *cookie,
|
OggReader::GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
// TRACE("OggReader::GetNextChunk\n");
|
// TRACE("OggReader::GetNextChunk\n");
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ public:
|
|||||||
|
|
||||||
// delegated to OggTrack
|
// delegated to OggTrack
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
status_t Seek(void *cookie, uint32 seekTo, int64 *frame, bigtime_t *time);
|
status_t Seek(void *cookie, uint32 seekTo, int64 *frame, bigtime_t *time);
|
||||||
status_t GetNextChunk(void *cookie, void **chunkBuffer, int32 *chunkSize,
|
status_t GetNextChunk(void *cookie, const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -450,7 +450,7 @@ OggSeekable::Seek(uint32 seekTo, int64 *frame, bigtime_t *time)
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggSeekable::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
OggSeekable::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
ogg_packet packet;
|
ogg_packet packet;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public:
|
|||||||
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format);
|
media_format *format);
|
||||||
virtual status_t Seek(uint32 seekTo, int64 *frame, bigtime_t *time);
|
virtual status_t Seek(uint32 seekTo, int64 *frame, bigtime_t *time);
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ OggSpeexStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggSpeexStream::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
OggSpeexStream::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
status_t result = GetPacket(&fChunkPacket);
|
status_t result = GetPacket(&fChunkPacket);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public:
|
|||||||
|
|
||||||
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format);
|
media_format *format);
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ OggStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
|||||||
|
|
||||||
// the default chunk is an ogg packet
|
// the default chunk is an ogg packet
|
||||||
status_t
|
status_t
|
||||||
OggStream::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
OggStream::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
status_t result = GetPacket(&fChunkPacket);
|
status_t result = GetPacket(&fChunkPacket);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public:
|
|||||||
// interface for OggReader
|
// interface for OggReader
|
||||||
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format);
|
media_format *format);
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ OggTobiasSeekable::GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggTobiasSeekable::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
OggTobiasSeekable::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
status_t result = inherited::GetNextChunk(chunkBuffer, chunkSize, mediaHeader);
|
status_t result = inherited::GetNextChunk(chunkBuffer, chunkSize, mediaHeader);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public:
|
|||||||
|
|
||||||
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format);
|
media_format *format);
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ OggTobiasStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggTobiasStream::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
OggTobiasStream::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
status_t result = GetPacket(&fChunkPacket);
|
status_t result = GetPacket(&fChunkPacket);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public:
|
|||||||
|
|
||||||
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format);
|
media_format *format);
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
// reader push input function
|
// reader push input function
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ OggTrack::Seek(uint32 seekTo, int64 *frame, bigtime_t *time)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
OggTrack::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
OggTrack::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
*chunkBuffer = 0;
|
*chunkBuffer = 0;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public:
|
|||||||
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
virtual status_t GetStreamInfo(int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format);
|
media_format *format);
|
||||||
virtual status_t Seek(uint32 seekTo, int64 *frame, bigtime_t *time);
|
virtual status_t Seek(uint32 seekTo, int64 *frame, bigtime_t *time);
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -35,11 +35,11 @@ typedef double float64;
|
|||||||
class uint8_sample
|
class uint8_sample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline operator uint8() { return data; }
|
inline operator uint8() const { return data; }
|
||||||
inline operator int8() { return (int32)data - 128; }
|
inline operator int8() const { return (int32)data - 128; }
|
||||||
inline operator int16() { return ((int32)data - 128) << 8; }
|
inline operator int16() const { return ((int32)data - 128) << 8; }
|
||||||
inline operator int32() { return ((int32)data - 128) << 24; }
|
inline operator int32() const { return ((int32)data - 128) << 24; }
|
||||||
inline operator float() { return ((int32)data - 128) * (1.0f / 127.0f); }
|
inline operator float() const { return ((int32)data - 128) * (1.0f / 127.0f); }
|
||||||
private:
|
private:
|
||||||
uint8 data;
|
uint8 data;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
@@ -47,11 +47,11 @@ private:
|
|||||||
class int8_sample
|
class int8_sample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline operator uint8() { return (int32)data + 128; }
|
inline operator uint8() const { return (int32)data + 128; }
|
||||||
inline operator int8() { return data; }
|
inline operator int8() const { return data; }
|
||||||
inline operator int16() { return (int16)data << 8; }
|
inline operator int16() const { return (int16)data << 8; }
|
||||||
inline operator int32() { return (int32)data << 24; }
|
inline operator int32() const { return (int32)data << 24; }
|
||||||
inline operator float() { return (int32)data * (1.0f / 127.0f); }
|
inline operator float() const { return (int32)data * (1.0f / 127.0f); }
|
||||||
private:
|
private:
|
||||||
int8 data;
|
int8 data;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
@@ -59,11 +59,11 @@ private:
|
|||||||
class int16_sample
|
class int16_sample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline operator uint8() { return (uint8)((int8)(data >> 8) + 128); }
|
inline operator uint8() const { return (uint8)((int8)(data >> 8) + 128); }
|
||||||
inline operator int8() { return (int8)(data >> 8); }
|
inline operator int8() const { return (int8)(data >> 8); }
|
||||||
inline operator int16() { return data; }
|
inline operator int16() const { return data; }
|
||||||
inline operator int32() { return (int32)data << 16; }
|
inline operator int32() const { return (int32)data << 16; }
|
||||||
inline operator float() { return data * (1.0f / 32767.0f); }
|
inline operator float() const { return data * (1.0f / 32767.0f); }
|
||||||
private:
|
private:
|
||||||
int16 data;
|
int16 data;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
@@ -72,21 +72,21 @@ class int24_sample
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#if B_HOST_IS_LENDIAN
|
#if B_HOST_IS_LENDIAN
|
||||||
inline operator uint8() { return (int32)data[2] + 128; }
|
inline operator uint8() const { return (int32)data[2] + 128; }
|
||||||
inline operator int8() { return (int8)data[2]; }
|
inline operator int8() const { return (int8)data[2]; }
|
||||||
inline operator int16() { return (int16)((uint32)data[2] << 8 | (uint32)data[1]); }
|
inline operator int16() const { return (int16)((uint32)data[2] << 8 | (uint32)data[1]); }
|
||||||
inline operator int32() { return (int32)((uint32)data[2] << 24 | (uint32)data[1] << 16 | (uint32)data[0] << 8); }
|
inline operator int32() const { return (int32)((uint32)data[2] << 24 | (uint32)data[1] << 16 | (uint32)data[0] << 8); }
|
||||||
inline operator float() { return (int32)((uint32)data[2] << 16 | (uint32)data[1] << 8 | (uint32)data[0]) * (1.0f / (2147483647.0f / 256)); }
|
inline operator float() const { return (int32)((uint32)data[2] << 16 | (uint32)data[1] << 8 | (uint32)data[0]) * (1.0f / (2147483647.0f / 256)); }
|
||||||
// XXX is the line above correct? long version:
|
// XXX is the line above correct? long version:
|
||||||
// inline operator float() { return (int32)((uint32)data[2] << 24 | (uint32)data[1] << 16 | (uint32)data[0] << 8) * (1.0f / 2147483647.0f); }
|
// inline operator float() const { return (int32)((uint32)data[2] << 24 | (uint32)data[1] << 16 | (uint32)data[0] << 8) * (1.0f / 2147483647.0f); }
|
||||||
#else
|
#else
|
||||||
inline operator uint8() { return (int32)data[0] + 128; }
|
inline operator uint8() const { return (int32)data[0] + 128; }
|
||||||
inline operator int8() { return (int8)data[0]; }
|
inline operator int8() const { return (int8)data[0]; }
|
||||||
inline operator int16() { return (int16)((uint32)data[0] << 8 | (uint32)data[1]); }
|
inline operator int16() const { return (int16)((uint32)data[0] << 8 | (uint32)data[1]); }
|
||||||
inline operator int32() { return (int32)((uint32)data[0] << 24 | (uint32)data[1] << 16 | (uint32)data[2] << 8); }
|
inline operator int32() const { return (int32)((uint32)data[0] << 24 | (uint32)data[1] << 16 | (uint32)data[2] << 8); }
|
||||||
inline operator float() { return (int32)((uint32)data[0] << 16 | (uint32)data[1] << 8 | (uint32)data[2]) * (1.0f / (2147483647.0f / 256)); }
|
inline operator float() const { return (int32)((uint32)data[0] << 16 | (uint32)data[1] << 8 | (uint32)data[2]) * (1.0f / (2147483647.0f / 256)); }
|
||||||
// XXX is the line above correct? long version:
|
// XXX is the line above correct? long version:
|
||||||
// inline operator float() { return (int32)((uint32)data[0] << 24 | (uint32)data[1] << 16 | (uint32)data[2] << 8) * (1.0f / 2147483647.0f); }
|
// inline operator float() const { return (int32)((uint32)data[0] << 24 | (uint32)data[1] << 16 | (uint32)data[2] << 8) * (1.0f / 2147483647.0f); }
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
uint8 data[3];
|
uint8 data[3];
|
||||||
@@ -95,11 +95,11 @@ private:
|
|||||||
class int32_sample
|
class int32_sample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline operator uint8() { return (int8)(data >> 24) + 128; }
|
inline operator uint8() const { return (int8)(data >> 24) + 128; }
|
||||||
inline operator int8() { return (int8)(data >> 24); }
|
inline operator int8() const { return (int8)(data >> 24); }
|
||||||
inline operator int16() { return (int16)(data >> 16); }
|
inline operator int16() const { return (int16)(data >> 16); }
|
||||||
inline operator int32() { return data; }
|
inline operator int32() const { return data; }
|
||||||
inline operator float() { return data * (1.0f / 2147483647.0f); }
|
inline operator float() const { return data * (1.0f / 2147483647.0f); }
|
||||||
private:
|
private:
|
||||||
int32 data;
|
int32 data;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
@@ -107,11 +107,11 @@ private:
|
|||||||
class float32_sample
|
class float32_sample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline operator uint8() { int32 v = (int32)(data * 127.0f) + 128; if (v > 255) v = 255; else if (v < 0) v = 0; return v; }
|
inline operator uint8() const { int32 v = (int32)(data * 127.0f) + 128; if (v > 255) v = 255; else if (v < 0) v = 0; return v; }
|
||||||
inline operator int8() { int32 v = (int32)(data * 127.0f); if (v > 127) v = 127; else if (v < -127) v = -127; return v; }
|
inline operator int8() const { int32 v = (int32)(data * 127.0f); if (v > 127) v = 127; else if (v < -127) v = -127; return v; }
|
||||||
inline operator int16() { int32 v = (int32)(data * 32767.0f); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; return v; }
|
inline operator int16() const { int32 v = (int32)(data * 32767.0f); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; return v; }
|
||||||
inline operator int32() { float32 v; if (data < -1.0f) v = -1.0f; else if (data > 1.0f) v = 1.0f; else v = data; return (int32)(v * 2147483647.0f); }
|
inline operator int32() const { float32 v; if (data < -1.0f) v = -1.0f; else if (data > 1.0f) v = 1.0f; else v = data; return (int32)(v * 2147483647.0f); }
|
||||||
inline operator float() { return data; }
|
inline operator float() const { return data; }
|
||||||
private:
|
private:
|
||||||
float32 data;
|
float32 data;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
@@ -119,19 +119,19 @@ private:
|
|||||||
class float64_sample
|
class float64_sample
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline operator uint8() { int32 v = (int32)(data * 127.0f) + 128; if (v > 255) v = 255; else if (v < 0) v = 0; return v; }
|
inline operator uint8() const { int32 v = (int32)(data * 127.0f) + 128; if (v > 255) v = 255; else if (v < 0) v = 0; return v; }
|
||||||
inline operator int8() { int32 v = (int32)(data * 127.0f); if (v > 127) v = 127; else if (v < -127) v = -127; return v; }
|
inline operator int8() const { int32 v = (int32)(data * 127.0f); if (v > 127) v = 127; else if (v < -127) v = -127; return v; }
|
||||||
inline operator int16() { int32 v = (int32)(data * 32767.0f); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; return v; }
|
inline operator int16() const { int32 v = (int32)(data * 32767.0f); if (v > 32767) v = 32767; else if (v < -32767) v = -32767; return v; }
|
||||||
inline operator int32() { float64 v; if (data < -1.0) v = -1.0; else if (data > 1.0) v = 1.0; else v = data; return (int32)(v * 2147483647.0f); }
|
inline operator int32() const { float64 v; if (data < -1.0) v = -1.0; else if (data > 1.0) v = 1.0; else v = data; return (int32)(v * 2147483647.0f); }
|
||||||
inline operator float() { return data; }
|
inline operator float() const { return data; }
|
||||||
private:
|
private:
|
||||||
float64 data;
|
float64 data;
|
||||||
} _PACKED;
|
} _PACKED;
|
||||||
|
|
||||||
#define CONVERT(src_type, dst_type) \
|
#define CONVERT(src_type, dst_type) \
|
||||||
void src_type##_to_##dst_type (void *dst, void *src, int32 count) \
|
void src_type##_to_##dst_type (void *dst, const void *src, int32 count) \
|
||||||
{ \
|
{ \
|
||||||
register src_type##_sample *s = (src_type##_sample *) src; \
|
register const src_type##_sample *s = (const src_type##_sample *) src; \
|
||||||
register dst_type *d = (dst_type *) dst; \
|
register dst_type *d = (dst_type *) dst; \
|
||||||
register int32 c = count >> 4; \
|
register int32 c = count >> 4; \
|
||||||
if (!c) goto fin1; \
|
if (!c) goto fin1; \
|
||||||
|
|||||||
@@ -27,47 +27,47 @@
|
|||||||
|
|
||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
void uint8_to_uint8(void *dst, void *src, int32 count);
|
void uint8_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void uint8_to_int8(void *dst, void *src, int32 count);
|
void uint8_to_int8(void *dst, const void *src, int32 count);
|
||||||
void uint8_to_int16(void *dst, void *src, int32 count);
|
void uint8_to_int16(void *dst, const void *src, int32 count);
|
||||||
void uint8_to_int32(void *dst, void *src, int32 count);
|
void uint8_to_int32(void *dst, const void *src, int32 count);
|
||||||
void uint8_to_float32(void *dst, void *src, int32 count);
|
void uint8_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void int8_to_uint8(void *dst, void *src, int32 count);
|
void int8_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void int8_to_int8(void *dst, void *src, int32 count);
|
void int8_to_int8(void *dst, const void *src, int32 count);
|
||||||
void int8_to_int16(void *dst, void *src, int32 count);
|
void int8_to_int16(void *dst, const void *src, int32 count);
|
||||||
void int8_to_int32(void *dst, void *src, int32 count);
|
void int8_to_int32(void *dst, const void *src, int32 count);
|
||||||
void int8_to_float32(void *dst, void *src, int32 count);
|
void int8_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void int16_to_uint8(void *dst, void *src, int32 count);
|
void int16_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void int16_to_int8(void *dst, void *src, int32 count);
|
void int16_to_int8(void *dst, const void *src, int32 count);
|
||||||
void int16_to_int16(void *dst, void *src, int32 count);
|
void int16_to_int16(void *dst, const void *src, int32 count);
|
||||||
void int16_to_int32(void *dst, void *src, int32 count);
|
void int16_to_int32(void *dst, const void *src, int32 count);
|
||||||
void int16_to_float32(void *dst, void *src, int32 count);
|
void int16_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void int24_to_uint8(void *dst, void *src, int32 count);
|
void int24_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void int24_to_int8(void *dst, void *src, int32 count);
|
void int24_to_int8(void *dst, const void *src, int32 count);
|
||||||
void int24_to_int16(void *dst, void *src, int32 count);
|
void int24_to_int16(void *dst, const void *src, int32 count);
|
||||||
void int24_to_int32(void *dst, void *src, int32 count);
|
void int24_to_int32(void *dst, const void *src, int32 count);
|
||||||
void int24_to_float32(void *dst, void *src, int32 count);
|
void int24_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void int32_to_uint8(void *dst, void *src, int32 count);
|
void int32_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void int32_to_int8(void *dst, void *src, int32 count);
|
void int32_to_int8(void *dst, const void *src, int32 count);
|
||||||
void int32_to_int16(void *dst, void *src, int32 count);
|
void int32_to_int16(void *dst, const void *src, int32 count);
|
||||||
void int32_to_int32(void *dst, void *src, int32 count);
|
void int32_to_int32(void *dst, const void *src, int32 count);
|
||||||
void int32_to_float32(void *dst, void *src, int32 count);
|
void int32_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void float32_to_uint8(void *dst, void *src, int32 count);
|
void float32_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void float32_to_int8(void *dst, void *src, int32 count);
|
void float32_to_int8(void *dst, const void *src, int32 count);
|
||||||
void float32_to_int16(void *dst, void *src, int32 count);
|
void float32_to_int16(void *dst, const void *src, int32 count);
|
||||||
void float32_to_int32(void *dst, void *src, int32 count);
|
void float32_to_int32(void *dst, const void *src, int32 count);
|
||||||
void float32_to_float32(void *dst, void *src, int32 count);
|
void float32_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void float64_to_uint8(void *dst, void *src, int32 count);
|
void float64_to_uint8(void *dst, const void *src, int32 count);
|
||||||
void float64_to_int8(void *dst, void *src, int32 count);
|
void float64_to_int8(void *dst, const void *src, int32 count);
|
||||||
void float64_to_int16(void *dst, void *src, int32 count);
|
void float64_to_int16(void *dst, const void *src, int32 count);
|
||||||
void float64_to_int32(void *dst, void *src, int32 count);
|
void float64_to_int32(void *dst, const void *src, int32 count);
|
||||||
void float64_to_float32(void *dst, void *src, int32 count);
|
void float64_to_float32(void *dst, const void *src, int32 count);
|
||||||
|
|
||||||
void swap_int16(void *data, int32 count);
|
void swap_int16(void *data, int32 count);
|
||||||
void swap_int24(void *data, int32 count);
|
void swap_int24(void *data, int32 count);
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ RawDecoder::GetCodecInfo(media_codec_info *info)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
RawDecoder::Setup(media_format *ioEncodedFormat,
|
RawDecoder::Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize)
|
const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
char s[200];
|
char s[200];
|
||||||
string_for_format(*ioEncodedFormat, s, sizeof(s));
|
string_for_format(*ioEncodedFormat, s, sizeof(s));
|
||||||
@@ -478,20 +478,20 @@ RawDecoder::Decode(void *buffer, int64 *frameCount,
|
|||||||
if (fChunkSize == 0) {
|
if (fChunkSize == 0) {
|
||||||
media_header mh;
|
media_header mh;
|
||||||
status_t err;
|
status_t err;
|
||||||
err = GetNextChunk((void **)&fChunkBuffer, &fChunkSize, &mh);
|
err = GetNextChunk(&fChunkBuffer, &fChunkSize, &mh);
|
||||||
if (err != B_OK || fChunkSize < fInputFrameSize) {
|
if (err != B_OK || fChunkSize < fInputFrameSize) {
|
||||||
fChunkSize = 0;
|
fChunkSize = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (fSwapInput)
|
if (fSwapInput)
|
||||||
fSwapInput(fChunkBuffer, fChunkSize / fInputSampleSize);
|
fSwapInput(const_cast<void *>(fChunkBuffer), fChunkSize / fInputSampleSize); // XXX TODO! FIX THIS, we write to a const buffer!!!
|
||||||
fStartTime = mh.start_time;
|
fStartTime = mh.start_time;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int32 frames = min_c(fOutputBufferFrameCount - *frameCount, fChunkSize / fInputFrameSize);
|
int32 frames = min_c(fOutputBufferFrameCount - *frameCount, fChunkSize / fInputFrameSize);
|
||||||
int32 samples = frames * fInputFormat.u.raw_audio.channel_count;
|
int32 samples = frames * fInputFormat.u.raw_audio.channel_count;
|
||||||
fConvert(output_buffer, fChunkBuffer, samples);
|
fConvert(output_buffer, fChunkBuffer, samples);
|
||||||
fChunkBuffer += frames * fInputFrameSize;
|
fChunkBuffer = (const char *)fChunkBuffer + frames * fInputFrameSize;
|
||||||
fChunkSize -= frames * fInputFrameSize;
|
fChunkSize -= frames * fInputFrameSize;
|
||||||
output_buffer += frames * fOutputFrameSize;
|
output_buffer += frames * fOutputFrameSize;
|
||||||
*frameCount += frames;
|
*frameCount += frames;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public:
|
|||||||
void GetCodecInfo(media_codec_info *info);
|
void GetCodecInfo(media_codec_info *info);
|
||||||
|
|
||||||
status_t Setup(media_format *ioEncodedFormat,
|
status_t Setup(media_format *ioEncodedFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
@@ -56,11 +56,11 @@ private:
|
|||||||
int32 fOutputSampleSize;
|
int32 fOutputSampleSize;
|
||||||
int32 fOutputBufferFrameCount;
|
int32 fOutputBufferFrameCount;
|
||||||
void (*fSwapInput)(void *data, int32 count);
|
void (*fSwapInput)(void *data, int32 count);
|
||||||
void (*fConvert)(void *dst, void *src, int32 count);
|
void (*fConvert)(void *dst, const void *src, int32 count);
|
||||||
void (*fSwapOutput)(void *data, int32 count);
|
void (*fSwapOutput)(void *data, int32 count);
|
||||||
|
|
||||||
char * fChunkBuffer;
|
const void * fChunkBuffer;
|
||||||
int32 fChunkSize;
|
size_t fChunkSize;
|
||||||
|
|
||||||
bigtime_t fStartTime;
|
bigtime_t fStartTime;
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ SpeexDecoder::GetCodecInfo(media_codec_info *info)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
SpeexDecoder::Setup(media_format *inputFormat,
|
SpeexDecoder::Setup(media_format *inputFormat,
|
||||||
const void *infoBuffer, int32 infoSize)
|
const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
TRACE("SpeexDecoder::Setup\n");
|
TRACE("SpeexDecoder::Setup\n");
|
||||||
if (!format_is_compatible(speex_encoded_media_format(),*inputFormat)) {
|
if (!format_is_compatible(speex_encoded_media_format(),*inputFormat)) {
|
||||||
@@ -254,8 +254,8 @@ SpeexDecoder::Decode(void *buffer, int64 *frameCount,
|
|||||||
int total_samples = 0;
|
int total_samples = 0;
|
||||||
while (out_bytes_needed >= fSpeexOutputLength) {
|
while (out_bytes_needed >= fSpeexOutputLength) {
|
||||||
// get a new packet
|
// get a new packet
|
||||||
void *chunkBuffer;
|
const void *chunkBuffer;
|
||||||
int32 chunkSize;
|
size_t chunkSize;
|
||||||
media_header mh;
|
media_header mh;
|
||||||
status_t status = GetNextChunk(&chunkBuffer, &chunkSize, &mh);
|
status_t status = GetNextChunk(&chunkBuffer, &chunkSize, &mh);
|
||||||
if (status == B_LAST_BUFFER_ERROR) {
|
if (status == B_LAST_BUFFER_ERROR) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public:
|
|||||||
|
|
||||||
void GetCodecInfo(media_codec_info *info);
|
void GetCodecInfo(media_codec_info *info);
|
||||||
status_t Setup(media_format *inputFormat,
|
status_t Setup(media_format *inputFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public:
|
|||||||
|
|
||||||
void GetCodecInfo(media_codec_info *info);
|
void GetCodecInfo(media_codec_info *info);
|
||||||
status_t Setup(media_format *inputFormat,
|
status_t Setup(media_format *inputFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ VorbisDecoder::GetCodecInfo(media_codec_info *info)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
VorbisDecoder::Setup(media_format *inputFormat,
|
VorbisDecoder::Setup(media_format *inputFormat,
|
||||||
const void *infoBuffer, int32 infoSize)
|
const void *infoBuffer, size_t infoSize)
|
||||||
{
|
{
|
||||||
TRACE("VorbisDecoder::Setup\n");
|
TRACE("VorbisDecoder::Setup\n");
|
||||||
if (!format_is_compatible(vorbis_encoded_media_format(),*inputFormat)) {
|
if (!format_is_compatible(vorbis_encoded_media_format(),*inputFormat)) {
|
||||||
@@ -178,8 +178,8 @@ VorbisDecoder::Decode(void *buffer, int64 *frameCount,
|
|||||||
float **pcm;
|
float **pcm;
|
||||||
while ((samples = vorbis_synthesis_pcmout(&fDspState,&pcm)) == 0) {
|
while ((samples = vorbis_synthesis_pcmout(&fDspState,&pcm)) == 0) {
|
||||||
// get a new packet
|
// get a new packet
|
||||||
void *chunkBuffer;
|
const void *chunkBuffer;
|
||||||
int32 chunkSize;
|
size_t chunkSize;
|
||||||
media_header mh;
|
media_header mh;
|
||||||
status_t status = GetNextChunk(&chunkBuffer, &chunkSize, &mh);
|
status_t status = GetNextChunk(&chunkBuffer, &chunkSize, &mh);
|
||||||
if (status == B_LAST_BUFFER_ERROR) {
|
if (status == B_LAST_BUFFER_ERROR) {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public:
|
|||||||
|
|
||||||
void GetCodecInfo(media_codec_info *info);
|
void GetCodecInfo(media_codec_info *info);
|
||||||
status_t Setup(media_format *inputFormat,
|
status_t Setup(media_format *inputFormat,
|
||||||
const void *infoBuffer, int32 infoSize);
|
const void *infoBuffer, size_t infoSize);
|
||||||
|
|
||||||
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
status_t NegotiateOutputFormat(media_format *ioDecodedFormat);
|
||||||
|
|
||||||
|
|||||||
@@ -336,7 +336,7 @@ WavReader::FreeCookie(void *cookie)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
WavReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
WavReader::GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize)
|
media_format *format, const void **infoBuffer, size_t *infoSize)
|
||||||
{
|
{
|
||||||
wavdata *data = reinterpret_cast<wavdata *>(cookie);
|
wavdata *data = reinterpret_cast<wavdata *>(cookie);
|
||||||
|
|
||||||
@@ -396,7 +396,7 @@ WavReader::Seek(void *cookie,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
WavReader::GetNextChunk(void *cookie,
|
WavReader::GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
wavdata *data = reinterpret_cast<wavdata *>(cookie);
|
wavdata *data = reinterpret_cast<wavdata *>(cookie);
|
||||||
|
|||||||
@@ -44,14 +44,14 @@ public:
|
|||||||
status_t FreeCookie(void *cookie);
|
status_t FreeCookie(void *cookie);
|
||||||
|
|
||||||
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
status_t GetStreamInfo(void *cookie, int64 *frameCount, bigtime_t *duration,
|
||||||
media_format *format, void **infoBuffer, int32 *infoSize);
|
media_format *format, const void **infoBuffer, size_t *infoSize);
|
||||||
|
|
||||||
status_t Seek(void *cookie,
|
status_t Seek(void *cookie,
|
||||||
uint32 seekTo,
|
uint32 seekTo,
|
||||||
int64 *frame, bigtime_t *time);
|
int64 *frame, bigtime_t *time);
|
||||||
|
|
||||||
status_t GetNextChunk(void *cookie,
|
status_t GetNextChunk(void *cookie,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader);
|
media_header *mediaHeader);
|
||||||
|
|
||||||
BPositionIO *Source() { return fSource; }
|
BPositionIO *Source() { return fSource; }
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ ChunkCache::NeedsRefill()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ChunkCache::GetNextChunk(void **chunkBuffer, int32 *chunkSize, media_header *mediaHeader)
|
ChunkCache::GetNextChunk(const void **chunkBuffer, size_t *chunkSize, media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
// printf("ChunkCache::GetNextChunk: %p fEmptyChunkCount %ld, fReadyChunkCount %ld\n", fNextGet, fEmptyChunkCount, fReadyChunkCount);
|
// printf("ChunkCache::GetNextChunk: %p fEmptyChunkCount %ld, fReadyChunkCount %ld\n", fNextGet, fEmptyChunkCount, fReadyChunkCount);
|
||||||
retry:
|
retry:
|
||||||
@@ -113,7 +113,7 @@ retry:
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ChunkCache::PutNextChunk(void *chunkBuffer, int32 chunkSize, const media_header &mediaHeader, status_t err)
|
ChunkCache::PutNextChunk(const void *chunkBuffer, size_t chunkSize, const media_header &mediaHeader, status_t err)
|
||||||
{
|
{
|
||||||
// printf("ChunkCache::PutNextChunk: %p fEmptyChunkCount %ld, fReadyChunkCount %ld\n", fNextPut, fEmptyChunkCount, fReadyChunkCount);
|
// printf("ChunkCache::PutNextChunk: %p fEmptyChunkCount %ld, fReadyChunkCount %ld\n", fNextPut, fEmptyChunkCount, fReadyChunkCount);
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ struct chunk_info
|
|||||||
{
|
{
|
||||||
chunk_info * next;
|
chunk_info * next;
|
||||||
void * buffer;
|
void * buffer;
|
||||||
int32 sizeUsed;
|
size_t sizeUsed;
|
||||||
int32 sizeMax;
|
size_t sizeMax;
|
||||||
media_header mediaHeader;
|
media_header mediaHeader;
|
||||||
status_t err;
|
status_t err;
|
||||||
};
|
};
|
||||||
@@ -51,8 +51,8 @@ public:
|
|||||||
void MakeEmpty();
|
void MakeEmpty();
|
||||||
bool NeedsRefill();
|
bool NeedsRefill();
|
||||||
|
|
||||||
status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize, media_header *mediaHeader);
|
status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize, media_header *mediaHeader);
|
||||||
void PutNextChunk(void *chunkBuffer, int32 chunkSize, const media_header &mediaHeader, status_t err);
|
void PutNextChunk(const void *chunkBuffer, size_t chunkSize, const media_header &mediaHeader, status_t err);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum { CHUNK_COUNT = 5 };
|
enum { CHUNK_COUNT = 5 };
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Decoder::~Decoder()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
Decoder::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
Decoder::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
return fChunkProvider->GetNextChunk(chunkBuffer, chunkSize, mediaHeader);
|
return fChunkProvider->GetNextChunk(chunkBuffer, chunkSize, mediaHeader);
|
||||||
|
|||||||
@@ -275,11 +275,9 @@ BMediaDecoder::AttachToDecoder()
|
|||||||
MediaDecoderChunkProvider(BMediaDecoder * decoder) {
|
MediaDecoderChunkProvider(BMediaDecoder * decoder) {
|
||||||
fDecoder = decoder;
|
fDecoder = decoder;
|
||||||
}
|
}
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader) {
|
media_header *mediaHeader) {
|
||||||
const void ** buffer = const_cast<const void**>(chunkBuffer);
|
return fDecoder->GetNextChunk(chunkBuffer, chunkSize, mediaHeader);
|
||||||
size_t * size = reinterpret_cast<size_t*>(chunkSize);
|
|
||||||
return fDecoder->GetNextChunk(buffer,size,mediaHeader);
|
|
||||||
}
|
}
|
||||||
} * provider = new MediaDecoderChunkProvider(this);
|
} * provider = new MediaDecoderChunkProvider(this);
|
||||||
if (provider == NULL) {
|
if (provider == NULL) {
|
||||||
|
|||||||
@@ -139,8 +139,8 @@ MediaExtractor::CountFrames(int32 stream) const
|
|||||||
int64 frameCount;
|
int64 frameCount;
|
||||||
bigtime_t duration;
|
bigtime_t duration;
|
||||||
media_format format;
|
media_format format;
|
||||||
void *infoBuffer;
|
const void *infoBuffer;
|
||||||
int32 infoSize;
|
size_t infoSize;
|
||||||
|
|
||||||
fReader->GetStreamInfo(fStreamInfo[stream].cookie, &frameCount, &duration, &format, &infoBuffer, &infoSize);
|
fReader->GetStreamInfo(fStreamInfo[stream].cookie, &frameCount, &duration, &format, &infoBuffer, &infoSize);
|
||||||
|
|
||||||
@@ -155,8 +155,8 @@ MediaExtractor::Duration(int32 stream) const
|
|||||||
int64 frameCount;
|
int64 frameCount;
|
||||||
bigtime_t duration;
|
bigtime_t duration;
|
||||||
media_format format;
|
media_format format;
|
||||||
void *infoBuffer;
|
const void *infoBuffer;
|
||||||
int32 infoSize;
|
size_t infoSize;
|
||||||
|
|
||||||
fReader->GetStreamInfo(fStreamInfo[stream].cookie, &frameCount, &duration, &format, &infoBuffer, &infoSize);
|
fReader->GetStreamInfo(fStreamInfo[stream].cookie, &frameCount, &duration, &format, &infoBuffer, &infoSize);
|
||||||
|
|
||||||
@@ -187,7 +187,7 @@ MediaExtractor::Seek(int32 stream, uint32 seekTo,
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
MediaExtractor::GetNextChunk(int32 stream,
|
MediaExtractor::GetNextChunk(int32 stream,
|
||||||
void **chunkBuffer, int32 *chunkSize,
|
const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
if (fStreamInfo[stream].status != B_OK)
|
if (fStreamInfo[stream].status != B_OK)
|
||||||
@@ -218,7 +218,7 @@ public:
|
|||||||
fStream = stream;
|
fStream = stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
virtual status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
return fExtractor->GetNextChunk(fStream, chunkBuffer, chunkSize, mediaHeader);
|
return fExtractor->GetNextChunk(fStream, chunkBuffer, chunkSize, mediaHeader);
|
||||||
@@ -283,8 +283,8 @@ MediaExtractor::ExtractorThread()
|
|||||||
continue;
|
continue;
|
||||||
if (fStreamInfo[stream].chunkCache->NeedsRefill()) {
|
if (fStreamInfo[stream].chunkCache->NeedsRefill()) {
|
||||||
media_header mediaHeader;
|
media_header mediaHeader;
|
||||||
void *chunkBuffer;
|
const void *chunkBuffer;
|
||||||
int32 chunkSize;
|
size_t chunkSize;
|
||||||
status_t err;
|
status_t err;
|
||||||
err = fReader->GetNextChunk(fStreamInfo[stream].cookie, &chunkBuffer, &chunkSize, &mediaHeader);
|
err = fReader->GetNextChunk(fStreamInfo[stream].cookie, &chunkBuffer, &chunkSize, &mediaHeader);
|
||||||
fStreamInfo[stream].chunkCache->PutNextChunk(chunkBuffer, chunkSize, mediaHeader, err);
|
fStreamInfo[stream].chunkCache->PutNextChunk(chunkBuffer, chunkSize, mediaHeader, err);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public:
|
|||||||
RawDecoderChunkProvider(Decoder *decoder, int buffer_size, int frame_size);
|
RawDecoderChunkProvider(Decoder *decoder, int buffer_size, int frame_size);
|
||||||
virtual ~RawDecoderChunkProvider();
|
virtual ~RawDecoderChunkProvider();
|
||||||
|
|
||||||
status_t GetNextChunk(void **chunkBuffer, int32 *chunkSize, media_header *mediaHeader);
|
status_t GetNextChunk(const void **chunkBuffer, size_t *chunkSize, media_header *mediaHeader);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Decoder *fDecoder;
|
Decoder *fDecoder;
|
||||||
@@ -446,14 +446,19 @@ BMediaTrack::ReadChunk(char **out_buffer,
|
|||||||
|
|
||||||
status_t result;
|
status_t result;
|
||||||
media_header header;
|
media_header header;
|
||||||
|
const void *buffer;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
memset(&header, 0, sizeof(header)); // always clear it first, as the reader doesn't set all fields
|
memset(&header, 0, sizeof(header)); // always clear it first, as the reader doesn't set all fields
|
||||||
|
|
||||||
result = fExtractor->GetNextChunk(fStream, (void **)out_buffer, out_size, &header);
|
result = fExtractor->GetNextChunk(fStream, &buffer, &size, &header);
|
||||||
|
if (result == B_OK) {
|
||||||
fCurTime = header.start_time;
|
*out_buffer = const_cast<char *>(static_cast<const char *>(buffer)); // yes this *is* ugly
|
||||||
if (mh)
|
*out_size = size;
|
||||||
*mh = header;
|
fCurTime = header.start_time;
|
||||||
|
if (mh)
|
||||||
|
*mh = header;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -822,7 +827,7 @@ RawDecoderChunkProvider::~RawDecoderChunkProvider()
|
|||||||
}
|
}
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
RawDecoderChunkProvider::GetNextChunk(void **chunkBuffer, int32 *chunkSize,
|
RawDecoderChunkProvider::GetNextChunk(const void **chunkBuffer, size_t *chunkSize,
|
||||||
media_header *mediaHeader)
|
media_header *mediaHeader)
|
||||||
{
|
{
|
||||||
int64 frames;
|
int64 frames;
|
||||||
|
|||||||
Reference in New Issue
Block a user