From 175eb4f0de11337b114d628a34a3cd394141f54a Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Mon, 23 Apr 2007 19:00:15 +0000 Subject: [PATCH] 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 --- .../media-add-ons/dvb/MediaStreamDecoder.cpp | 45 +++++++++++++++++++ .../media-add-ons/dvb/MediaStreamDecoder.h | 29 ++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.cpp create mode 100644 src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.h diff --git a/src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.cpp b/src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.cpp new file mode 100644 index 0000000000..6873899a57 --- /dev/null +++ b/src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.cpp @@ -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); +} diff --git a/src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.h b/src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.h new file mode 100644 index 0000000000..c77e540894 --- /dev/null +++ b/src/add-ons/media/media-add-ons/dvb/MediaStreamDecoder.h @@ -0,0 +1,29 @@ +#ifndef __MEDIA_STREAM_DECODER_H +#define __MEDIA_STREAM_DECODER_H + +#include +#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