diff --git a/headers/os/media/MediaFormats.h b/headers/os/media/MediaFormats.h index 2c8960a19d..bcc1563fd3 100644 --- a/headers/os/media/MediaFormats.h +++ b/headers/os/media/MediaFormats.h @@ -1,102 +1,149 @@ -/* MediaFormats.h */ -/* Copyright 1998 Be Incorporated. All rights reserved. */ - -#if !defined(_MEDIA_TYPES_H) +/* + * Copyright 2009, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT license. + */ +#ifndef _MEDIA_TYPES_H #define _MEDIA_TYPES_H -#if defined(__cplusplus) -#include +#ifdef __cplusplus +# include -#include -#include -#include +# include +# include +# include #endif struct media_codec_info { - char pretty_name[96]; // eg: "SuperSqueeze Encoder by Foo Inc" - char short_name[32]; // eg: "supersqueeze" + char pretty_name[96]; /* eg: "SuperSqueeze Encoder by Foo Inc" */ + char short_name[32]; /* eg: "supersqueeze" */ - int32 id; // opaque id passed to BMediaFile::CreateTrack + int32 id; /* opaque id passed to + BMediaFile::CreateTrack() */ int32 sub_id; int32 pad[63]; }; -// -// Use this to iterate through the available encoders for a file format. -// -status_t get_next_encoder(int32 *cookie, - const media_file_format *fileFormat,// this comes from get_next_file_format() - const media_format *inFormat, // this is the type of data given to the encoder - media_format *_outFormat, // this is the type of data encoder will output - media_codec_info *_codecInfo); // information about the encoder +/*! \brief Use this to iterate through the available encoders for a given file + format. + \param cookie A pointer to a preallocated cookie, which you need + to initialize to \c 0 before calling this function + the first time. + \param fileFormat A pointer to a valid media_file_format structure + as can be obtained through get_next_file_format(). + \param inputFormat This is the type of data given to the encoder. + \param _outputFormat This is the type of data the encoder will output. + \param _codecInfo Pointer to a preallocated media_codec_info structure, + information about the encoder is placed there. -status_t get_next_encoder( - int32 *cookie, - const media_file_format *fileFormat,// this comes from get_next_file_format() - // pass NULL if you don't care - const media_format *inFormat, // this is the type of data given to the - // encoder, wildcards are accepted - const media_format *_outFormat, // this is the type of data encoder - // you want the encoder to output. - // Wildcards are accepted - media_codec_info *codecInfo, // information about the encoder - media_format *_acceptedInputFormat, // this is the type of data that the - // encoder will accept as input. - // Wildcards in input_format will be - // specialized here. - media_format *_acceptedOutputFormat // this is the type of data that the - // encoder will output. - // Wildcards in output_format will be - // specialized here. - ); + \return + - \c B_OK: Everything went fine. + - \c B_BAD_INDEX: There are no more encoders. + */ +status_t get_next_encoder(int32* cookie, const media_file_format* fileFormat, + const media_format* inputFormat, media_format* _outputFormat, + media_codec_info* _codecInfo); -status_t get_next_encoder(int32 *cookie, media_codec_info *_codecInfo); +/*! \brief Use this to iterate through the available encoders with + restrictions to the input and output media_format while the + encoders can specialize wildcards in the media_formats. + + \param cookie A pointer to a preallocated cookie, which you need + to initialize to \c 0 before calling this function + the first time. + \param fileFormat A pointer to a valid media_file_format structure + as can be obtained through get_next_file_format(). + You can pass \c NULL if you don't care. + \param inputFormat This is the type of data given to the encoder, + wildcards are accepted. + \param outputFormat This is the type of data you want the encoder to + output. Wildcards are accepted. + \param _codecInfo Pointer to a preallocated media_codec_info structure, + information about the encoder is placed there. + \param _acceptedInputFormat This is the type of data that the encoder will + accept as input. Wildcards in \a inFormat will be + specialized here. + \param _acceptedOutputFormat This is the type of data that the encoder will + output. Wildcards in \a _outFormat will be specialized + here. + + \return + - \c B_OK: Everything went fine. + - \c B_BAD_INDEX: There are no more encoders. +*/ +status_t get_next_encoder(int32* cookie, const media_file_format* fileFormat, + const media_format* inputFormat, const media_format* outputFormat, + media_codec_info* _codecInfo, media_format* _acceptedInputFormat, + media_format* _acceptedOutputFormat); + + +/*! \brief Iterate over the all the available encoders without media_format + restrictions. + + \param cookie A pointer to a preallocated cookie, which you need + to initialize to \c 0 before calling this function + the first time. + \param _codecInfo Pointer to a preallocated media_codec_info structure, + information about the encoder is placed there. + + \return + - \c B_OK: Everything went fine. + - \c B_BAD_INDEX: There are no more encoders. +*/ +status_t get_next_encoder(int32* cookie, media_codec_info* _codecInfo); enum media_file_accept_format_flags { B_MEDIA_REJECT_WILDCARDS = 0x1 }; -bool does_file_accept_format(const media_file_format *fileFormat, - media_format *format, uint32 flags = 0); +bool does_file_accept_format(const media_file_format* fileFormat, + media_format* format, uint32 flags = 0); typedef struct { uint8 data[16]; } GUID; + enum beos_format { B_BEOS_FORMAT_RAW_AUDIO = 'rawa', B_BEOS_FORMAT_RAW_VIDEO = 'rawv' }; + + typedef struct { int32 format; } media_beos_description; + typedef struct { uint32 codec; uint32 vendor; } media_quicktime_description; + typedef struct { uint32 codec; } media_avi_description; + typedef struct { uint32 id; } media_avr_description; + typedef struct { GUID guid; } media_asf_description; + enum mpeg_id { B_MPEG_ANY = 0, B_MPEG_1_AUDIO_LAYER_1 = 0x101, B_MPEG_1_AUDIO_LAYER_2 = 0x102, - B_MPEG_1_AUDIO_LAYER_3 = 0x103, // "MP3" + B_MPEG_1_AUDIO_LAYER_3 = 0x103, /* "MP3" */ B_MPEG_1_VIDEO = 0x111, B_MPEG_2_AUDIO_LAYER_1 = 0x201, B_MPEG_2_AUDIO_LAYER_2 = 0x202, @@ -106,29 +153,37 @@ enum mpeg_id { B_MPEG_2_5_AUDIO_LAYER_2 = 0x302, B_MPEG_2_5_AUDIO_LAYER_3 = 0x303, }; + + typedef struct { uint32 id; } media_mpeg_description; + typedef struct { uint32 codec; } media_wav_description; + typedef struct { uint32 codec; } media_aiff_description; + typedef struct { uint32 file_format; uint32 codec; } media_misc_description; + typedef struct _media_format_description { -#if defined(__cplusplus) - _media_format_description(); - ~_media_format_description(); - _media_format_description(const _media_format_description & other); - _media_format_description & operator=(const _media_format_description & other); +#ifdef __cplusplus + _media_format_description(); + ~_media_format_description(); + _media_format_description( + const _media_format_description& other); + _media_format_description& operator=( + const _media_format_description& other); #endif media_format_family family; uint32 _reserved_[3]; @@ -151,65 +206,84 @@ typedef struct _media_format_description { class BMediaFormats { - public: - BMediaFormats(); - virtual ~BMediaFormats(); +public: + BMediaFormats(); + virtual ~BMediaFormats(); - status_t InitCheck(); + status_t InitCheck(); - // Make sure you memset() your descs to 0 before you start filling - // them in! Else you may register some bogus value. - enum make_format_flags { - B_EXCLUSIVE = 0x1, // Fail if this format has already been registered - B_NO_MERGE = 0x2, // Don't re-number any formats if there are multiple - // clashing previous registrations, but fail instead - B_SET_DEFAULT = 0x4 // Set the first format to be the default for the - // format family (when registering more than one in - // the same family). Only use in Encoder add-ons. - }; + // Make sure you memset() your descs to 0 before you start filling + // them in! Else you may register some bogus value. + enum make_format_flags { + B_EXCLUSIVE = 0x1, // Fail if this format has already been + // registered. - status_t MakeFormatFor(const media_format_description *descriptions, - int32 descriptionCount, media_format *inOutFormat, - uint32 flags = 0, void * _reserved = 0); - status_t GetFormatFor(const media_format_description &description, - media_format *_outFormat); + B_NO_MERGE = 0x2, // Don't re-number any formats if there are + // multiple clashing previous registrations, + // but fail instead. - status_t GetCodeFor(const media_format &format, - media_format_family family, media_format_description *_outDescription); + B_SET_DEFAULT = 0x4 // Set the first format to be the default for + // the format family (when registering more + // than one in the same family). Only use in + // Encoder add-ons. + }; - status_t RewindFormats(); - status_t GetNextFormat(media_format *_outFormat, - media_format_description *_outDescription); + status_t MakeFormatFor(const media_format_description* + descriptions, int32 descriptionCount, + media_format* _inOutFormat, + uint32 flags = 0, void* _reserved = 0); - // You need to lock/unlock (only) when using RewindFormats()/GetNextFormat() - bool Lock(); - void Unlock(); + status_t GetFormatFor(const media_format_description& + description, media_format* _outFormat); - // convenience functions - static status_t GetBeOSFormatFor(uint32 fourcc, - media_format *_outFormat, media_type type = B_MEDIA_UNKNOWN_TYPE); - static status_t GetAVIFormatFor(uint32 fourcc, - media_format *_outFormat, media_type type = B_MEDIA_UNKNOWN_TYPE); - static status_t GetQuicktimeFormatFor(uint32 vendor, uint32 fourcc, - media_format *_outFormat, media_type type = B_MEDIA_UNKNOWN_TYPE); + status_t GetCodeFor(const media_format& format, + media_format_family family, + media_format_description* _outDescription); - /* --- begin deprecated API --- */ + status_t RewindFormats(); + status_t GetNextFormat(media_format* _outFormat, + media_format_description* _outDescription); - status_t MakeFormatFor(const media_format_description &description, - const media_format &inFormat, media_format *_outFormat); + // You need to lock/unlock (only) when using + // RewindFormats()/GetNextFormat(). + bool Lock(); + void Unlock(); - private: - int32 fIteratorIndex; - uint32 _reserved[30]; + // convenience functions + static status_t GetBeOSFormatFor(uint32 fourcc, + media_format* _outFormat, + media_type type = B_MEDIA_UNKNOWN_TYPE); + static status_t GetAVIFormatFor(uint32 fourcc, + media_format* _outFormat, + media_type type = B_MEDIA_UNKNOWN_TYPE); + static status_t GetQuicktimeFormatFor(uint32 vendor, + uint32 fourcc, media_format* _outFormat, + media_type type = B_MEDIA_UNKNOWN_TYPE); + + // Deprecated: + status_t MakeFormatFor(const media_format_description& + description, const media_format& inFormat, + media_format* _outFormat); + +private: + int32 fIteratorIndex; + + uint32 _reserved[30]; }; -bool operator==(const media_format_description & a, const media_format_description & b); -bool operator<(const media_format_description & a, const media_format_description & b); -bool operator==(const GUID & a, const GUID & b); -bool operator<(const GUID & a, const GUID & b); +bool operator==(const media_format_description& a, + const media_format_description& b); + +bool operator<(const media_format_description& a, + const media_format_description& b); + + +bool operator==(const GUID& a, const GUID& b); + +bool operator<(const GUID& a, const GUID& b); + #endif /* __cplusplus */ #endif /* _MEDIA_TYPES_H */ -