Re-wrote MediaFormats.h header.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31978 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2009-07-30 16:34:06 +00:00
parent b96533c256
commit ee9408a18d

View File

@ -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 <MediaDefs.h>
#ifdef __cplusplus
# include <MediaDefs.h>
#include <Messenger.h>
#include <List.h>
#include <Locker.h>
# include <Messenger.h>
# include <List.h>
# include <Locker.h>
#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 */