When the decoder doesn't support the requested format, the raw decoder is utilized

to provide a format conversion to the requested raw format.
Added a few workarounds for applications that don't requst the required format
but instead assume to get a specific one.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6815 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
beveloper
2004-02-29 18:53:57 +00:00
parent 94722b265c
commit bac2b3f15c
2 changed files with 276 additions and 9 deletions
+11 -3
View File
@@ -81,7 +81,7 @@ public:
// The data returned through ReadFrames() will be in the format that's
// returned by this function.
status_t DecodedFormat(media_format *inout_format);
status_t DecodedFormat(media_format *inout_format, int32 flags = 0);
// CountFrames and Duration return the total number of frame and the
// total duration (expressed in microseconds) of a track.
@@ -206,9 +206,16 @@ private:
BPrivate::media::Encoder *encoder,
media_codec_info *mci);
#ifdef __BUILDING_MEDIA_TRACK_CPP
status_t DecodedFormat(media_format *inout_format);
#endif
void SetupWorkaround();
bool SetupFormatTranslation(const media_format &from, media_format *to);
status_t fErr;
BPrivate::media::Decoder *fDecoder;
int32 __unused__fDecoderID;
BPrivate::media::Decoder *fRawDecoder;
BPrivate::media::MediaExtractor *fExtractor;
int32 fStream;
@@ -221,7 +228,8 @@ private:
int32 fEncoderID;
BPrivate::MediaWriter *fWriter;
media_format fWriterFormat;
void *__unused__fExtractorCookie;
uint32 fWorkaroundFlags;
protected:
int32 EncoderID() { return fEncoderID; };