📄 rmfftype.h
字号:
/* ***** BEGIN LICENSE BLOCK *****
* Version: RCSL 1.0/RPSL 1.0
*
* Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved.
*
* The contents of this file, and the files included with this file, are
* subject to the current version of the RealNetworks Public Source License
* Version 1.0 (the "RPSL") available at
* http://www.helixcommunity.org/content/rpsl unless you have licensed
* the file under the RealNetworks Community Source License Version 1.0
* (the "RCSL") available at http://www.helixcommunity.org/content/rcsl,
* in which case the RCSL will apply. You may also obtain the license terms
* directly from RealNetworks. You may not use this file except in
* compliance with the RPSL or, if you have a valid RCSL with RealNetworks
* applicable to this file, the RCSL. Please see the applicable RPSL or
* RCSL for the rights, obligations and limitations governing use of the
* contents of the file.
*
* This file is part of the Helix DNA Technology. RealNetworks is the
* developer of the Original Code and owns the copyrights in the portions
* it created.
*
* This file, and the files included with this file, is distributed and made
* available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
*
* Technology Compatibility Kit Test Suite(s) Location:
* http://www.helixcommunity.org/content/tck
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** */
#ifndef PMC_PREDEFINED_TYPES
#define PMC_PREDEFINED_TYPES
typedef char* pmc_string;
struct buffer {
UINT32 len;
INT8* data;
};
#endif/*PMC_PREDEFINED_TYPES*/
// realvideo cooment...
// one more RV comment.....
#ifndef _RMFFTYPES_
#define _RMFFTYPES_
#if !(defined REAL_MEDIA_FILE_SERVER_PORT)
#include "hxtypes.h"
#else
#include "machdep.h"
#include "types.h"
#endif /* !(defined REAL_MEDIA_FILE_SERVER_PORT) */
#include <string.h> // for memcpy's
#include "rule2flg.h" // /For class RuleToFlagMap
#if (!defined(_BEOS))
#define int8 char
#define int16 INT16
#define int32 LONG32
#endif
#define u_int8 UCHAR
#define u_int16 UINT16
#define u_int32 ULONG32
// Event stuff
#define RAE_FILE_VERSION 2
#define RAE_FILE_MAGIC_SIZE 5
#define RAE_FILE_VERSION_SIZE 2
#define RAE_FILE_HEADER_SIZE (RAE_FILE_MAGIC_SIZE + RAE_FILE_VERSION_SIZE)
#define RAE_EVENT_HEADER_SIZE (sizeof(ULONG32) + sizeof(ULONG32) + sizeof(UINT16))
#define RA_MEDIA_DATA 0x4D444941 // 'MDIA'
#define RA_EVENT_DATA 0x45564E54 // 'EVNT'
#define RM_HEADER_OBJECT 0x2E524D46 // '.RMF'
#define RMS_HEADER_OBJECT 0x2E524D53 // '.RMS'
#define RM_PROPERTIES_OBJECT 0x50524F50 // 'PROP'
#define RM_MEDIA_PROPERTIES_OBJECT 0x4D445052 // 'MDPR'
#define RM_CONTENT_OBJECT 0x434F4E54 // 'CONT'
#define RM_DATA_OBJECT 0x44415441 // 'DATA'
#define RM_INDEX_OBJECT 0x494E4458 // 'INDX' // 'DATA'
#define RM_MULTIHEADER_OBJECT 0x4D4C5449 // 'MLTI'
#define RM_FILE_OBJECT_VERSION 0
#define RM_PROPERTIES_OBJECT_VERSION 0
#define RM_MEDIAPROPERTIES_OBJECT_VERSION 0
#define RM_CONTENT_OBJECT_VERSION 0
#define RM_DATA_OBJECT_VERSION 0
#define RM_INDEX_OBJECT_VERSION 0
#define RM_PACKET_OBJECT_VERSION 0
#define RM_INDEXRECORD_OBJECT_VERSION 0
#define HX_SAVE_ENABLED 0x0001
#define HX_PERFECT_PLAY_ENABLED 0x0002
#define HX_LIVE_BROADCAST 0x0004
#define HX_MOBILE_PLAY_ENABLED 0x0008
#if (defined( _WIN32 ) || defined( _WINDOWS )) && defined(_M_IX86)
#pragma pack(1)
// disable warning on: zero-sized array in struct/union
#pragma warning( disable : 4200 )
#endif
#ifdef _MACINTOSH
// modify packing of VideoTypeSpecificData to match
// hxcodec.h's packing of HX_FORMAT_VIDEO
// cr grobbinsky cf rlovejoy
#pragma options align=mac68k
#endif
#include "hxinline.h"
class RMGenericHeader
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 10;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
};
typedef RMGenericHeader * RMGenericHeaderPtr;
class RMFileHeader
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 18;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
UINT32 file_version;
UINT32 num_headers;
};
typedef RMFileHeader * RMFileHeaderPtr;
class Properties
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 50;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
UINT32 max_bit_rate;
UINT32 avg_bit_rate;
UINT32 max_packet_size;
UINT32 avg_packet_size;
UINT32 num_interleave_packets;
UINT32 duration;
UINT32 preroll;
UINT32 index_offset;
UINT32 data_offset;
UINT16 num_streams;
UINT16 flags;
};
typedef Properties * PropertiesPtr;
class MediaProperties
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 46;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
UINT16 stream_number;
UINT32 max_bit_rate;
UINT32 avg_bit_rate;
UINT32 max_packet_size;
UINT32 avg_packet_size;
UINT32 start_time;
UINT32 preroll;
UINT32 duration;
UINT8 stream_name_size;
UINT8 *stream_name;
UINT8 mime_type_size;
UINT8 *mime_type;
UINT32 type_specific_len;
UINT8 *type_specific_data;
};
typedef MediaProperties * MediaPropertiesPtr;
//
// Can be used to crack open ra4 type specific
// data. Might also work on a portion of ra5
// data as well, but I would not count on it.
// Should be using classes defined over in
// raform4.pm instead.
//
class AudioTypeSpecificData
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 73;}
UINT32 theID;
UINT16 AudioSpecificVersion;
UINT16 AudioSpecificRevision;
UINT32 raID;
UINT32 RaChunkSize;
UINT16 version;
UINT16 revision;
UINT16 headerBytesTotal;
UINT16 compressionType;
UINT32 granularity;
UINT32 bytesTotal;
UINT32 bytesPerMinute;
UINT32 bytesPerMinute2;
UINT16 interleaveFactor;
UINT16 interleaveBlockSize;
UINT32 userData;
UINT32 sampleRate;
UINT16 sampleSize;
UINT16 numChannels;
UINT8 InterleaveCode[5];
UINT8 CompressionCode[5];
UINT8 isInterleaved;
UINT8 copyByte;
UINT8 streamType;
UINT8 title_len;
UINT8 *title;
UINT8 author_len;
UINT8 *author;
UINT8 copyright_len;
UINT8 *copyright;
UINT8 app_len;
UINT8 *app;
};
class VideoTypeSpecificData
{
public:
VideoTypeSpecificData();
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 26;}
UINT32 cbLength;
UINT32 moftag;
UINT32 submoftag;
UINT16 uiWidth;
UINT16 uiHeight;
UINT16 uiBitCount;
UINT16 uiPadWidth;
UINT16 uiPadHeight;
UINT32 framesPerSecond;
UINT32 ulSPOExtra;
UINT32 ulStreamVersion;
};
class MultiStreamHeader
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 8;}
UINT32 object_id;
UINT16 num_rules;
UINT16 *rule_to_header_map;
UINT16 num_headers;
};
class NameValueProperty
{
public:
NameValueProperty();
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 13;}
UINT32 size;
UINT16 object_version;
UINT8 name_length;
UINT8 *name;
UINT32 type;
UINT16 value_length;
UINT8 *value_data;
};
//
// Use this for packing/unpacking
// a single 32 bit integer.
//
class Unsigned32BitInteger
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 4;}
UINT32 value;
};
//
// enum defining valid values for "type" in
// NameValueProperty structure
//
enum
{
PROP_INTEGER,
PROP_BUFFER,
PROP_STRING
};
class LogicalStream
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 12;}
UINT32 size;
UINT16 object_version;
UINT16 num_physical_streams;
UINT16 *physical_stream_numbers;
UINT32 *data_offsets;
UINT16 num_rules;
UINT16 *rule_to_physical_stream_number_map;
UINT16 num_properties;
NameValueProperty *properties;
};
class MetaInformation
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 8;}
UINT32 size;
UINT16 object_version;
UINT16 num_properties;
NameValueProperty *properties;
};
//
// BUGBUG
// XXX
// PMC can't generate a declaration for this constructor.
// So, the generated .h file will not build until the
// declaration is added by hand.
//
class Content
{
public:
Content();
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 18;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
UINT16 title_len;
UINT8 *title;
UINT16 author_len;
UINT8 *author;
UINT16 copyright_len;
UINT8 *copyright;
UINT16 comment_len;
UINT8 *comment;
};
typedef Content * ContentPtr;
class DataHeader
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 18;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
UINT32 num_interleave_packets;
UINT32 next_data_header;
};
typedef DataHeader * DataHeaderPtr;
class IndexHeader
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 20;}
UINT32 object_id;
UINT32 size;
UINT16 object_version;
UINT32 num_indices;
UINT16 stream_number;
UINT32 next_index_header;
};
typedef IndexHeader * IndexHeaderPtr;
class IndexRecord
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 14;}
UINT16 object_version;
UINT32 timestamp;
UINT32 offset;
UINT32 num_interleave_packets;
};
typedef IndexRecord * IndexRecordPtr;
//
// The PacketHeader has changed with version 1.
// So, there are a couple of new structures.
// Use PacketHeaderBase to figure out what
// packet version/size you've got, and then
// create the appropriate PacketHeader version
// struct to really unpack the buffer. We could
// also have done this by embedding if (object_version == xx)
// into the PacketHeader struct, but this lets us
// use the static_size() function to get the
// actual packed size of the struct in question.
//
class PacketHeaderBase
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 4;}
UINT16 object_version;
UINT16 length;
};
class PacketHeader
{
public:
UINT8* pack(UINT8* buf, UINT32 &len);
UINT8* unpack(UINT8* buf, UINT32 len);
const UINT32 static_size() {return 12;}
UINT16 object_version;
UINT16 length;
UINT16 stream_number;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -