If you use either the
media_format
or media_codec_info
form of the constructor, you must call
InitCheck()
to ensure that construction was
successful before using any other functions in this class.
| Class Overview |
BMediaDecoder();
BMediaDecoder(const media_format* inFormat,
const void* info = NULL,
size_t infoSize = 0);
BMediaDecoder(const media_codec_info* mci);
The constructor sets up the BMediaDecoder. If you use the empty form of
the constructor, you'll have to call
SetTo()
to establish the format to be decoded before calling
Decode().
The second form accepts a
media_format
structure, inFormat, that
indicates the type of media data that will be input into the decoder.
info, if specified, will be filled out with text information about the
node; you must specify a buffer infoSize bytes long.
The third form of the constructor accepts a
media_codec_info
structure,
mci, that determines which codec should be used.
If you use either the
media_format
or media_codec_info
form of the constructor, you must call
InitCheck()
to ensure that construction was
successful before using any other functions in this class.
status_t GetNextChunk(const void** chunkData,
size_t* chunkLen,
media_header* mh);In derived classes, you should implement this function to fetch the media
data from the source. Set chunkData to be a pointer to the next chunk of
media data, and chunkLen to the size of that buffer. The
media_header
structure mh provides information you can use
while fetching the chunk.
This hook is called by the decoder add-on in order to fetch the data from the source.
Return B_OK if the chunk is fetched safely, or
an appropriate error code otherwise.
status_t Decode(void* outBuffer,
int64* frameCount,
media_header* outMH,
media_decode_info* info);Decodes a chunk of media data into the output buffer specified by
outBuffer. On return, outFrameCount
is set to indicate how many frames of
data were decoded, and outMH is the header for the decoded buffer.
The media_decode_info structure info is used on input to specify decoding parameters.
The amount of data decoded is part of the format determined by
SetTo() or
SetInputFormat().
For audio, it's the buffer size. For video, it's one
frame, which is height*row_bytes. The data to be decoded will be fetched
from the source by the decoder add-on calling the derived class'
GetNextChunk()
function.
| Return Code | Description |
|---|---|
| No error. |
| The |
Other errors. | The decoder's |
status_t GetDecoderInfo(media_codec_info* outInfo) const;Fills out the
media_codec_info
structure outInfo with information about
the decoder being used by the BMediaDecoder.
| Return Code | Description |
|---|---|
| No error. |
| The |
Other errors. | The decoder's |
status_t InitCheck() const;Returns a status_t value indicating whether or not construction was
successful. You must call this function after construction before calling
any other BMediaDecoder functions.
| Return Code | Description |
|---|---|
| The constructor was successful. |
Other errors. | See
|
status_t SetInputFormat(const media_format* inFormat,
const void* info = NULL,
size_t infoSize = 0);status_t SetOutputFormat(media_format* outputFormat);SetInputFormat() sets the input
data format to inFormat. On return, info
(if you don't specify NULL) is filled out by the decoder to contain
whatever textual information the decoder wants to provide. infoSize must
indicate the size of the buffer pointed to by info.
Unlike
SetTo(),
SetInputFormat() function does not select a codec, so the
currently-selected codec will continue to be used. You should only use
SetInputFormat() to refine the format settings if it will not require the
use of a different decoder.
SetOutputFormat() sets the format the decoder should output. On return,
the outputFormat is changed to match the actual format that will be
output; this can be different if you specified any wildcards.
| Return Code | Description |
|---|---|
| No error. |
| The |
Other errors. | The decoder's
|
status_t SetTo(const media_format* inFormat,
const void* info = NULL,
size_t infoSize = 0);
status_t SetTo(const media_codec_info* mci);
SetTo() sets the format of media data that will be decoded by the
BMediaDecoder object. This also causes the
BMediaDecoder to locate an
appropriate codec to use.
The first form accepts a
media_format
structure, inFormat, that indicates
the type of media data that will be input into the decoder. info, if
specified, will be filled out with text information about the node; you
must specify a buffer infoSize bytes long.
The second form of SetTo() accepts a
media_codec_info
structure, mci,
that determines which codec should be used.
| Return Code | Description |
|---|---|
| No error. |
| The specified media_format isn't valid. |
| Something else went wrong. |
| Unable to instantiate the decoder. |