A BMediaDecoder wrapper that uses a callback for GetNextChunk()

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20779 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen 2007-04-23 19:00:15 +00:00
parent 39faeeba38
commit 175eb4f0de
2 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,45 @@
#include "MediaStreamDecoder.h"
MediaStreamDecoder::MediaStreamDecoder(get_next_chunk_func next_chunk, void *cookie)
: BMediaDecoder()
, fCookie(cookie)
, fGetNextChunk(next_chunk)
{
}
status_t
MediaStreamDecoder::SetInputFormat(const media_format &in_format)
{
status_t err = BMediaDecoder::InitCheck();
if (err)
return err;
return BMediaDecoder::SetTo(&in_format);
}
status_t
MediaStreamDecoder::SetOutputFormat(media_format *output_format)
{
status_t err = BMediaDecoder::InitCheck();
if (err)
return err;
return BMediaDecoder::SetOutputFormat(output_format);
}
status_t
MediaStreamDecoder::Decode(void *out_buffer, int64 *out_frameCount,
media_header *out_mh, media_decode_info *info)
{
return BMediaDecoder::Decode(out_buffer, out_frameCount, out_mh, info);
}
status_t
MediaStreamDecoder::GetNextChunk(const void **chunkData, size_t *chunkLen, media_header *mh)
{
return (*fGetNextChunk)(chunkData, chunkLen, mh, fCookie);
}

View File

@ -0,0 +1,29 @@
#ifndef __MEDIA_STREAM_DECODER_H
#define __MEDIA_STREAM_DECODER_H
#include <media/MediaDecoder.h>
#include "MediaStreamDecoder.h"
typedef status_t (*get_next_chunk_func)(const void **chunkData, size_t *chunkLen, media_header *mh, void *cookie);
class MediaStreamDecoder : private BMediaDecoder
{
public:
MediaStreamDecoder(get_next_chunk_func next_chunk, void *cookie);
status_t SetInputFormat(const media_format &in_format);
status_t SetOutputFormat(media_format *output_format);
status_t Decode(void *out_buffer, int64 *out_frameCount,
media_header *out_mh, media_decode_info *info);
private:
void * fCookie;
get_next_chunk_func fGetNextChunk;
private:
status_t GetNextChunk(const void **chunkData, size_t *chunkLen, media_header *mh);
};
#endif