📄 prmdec.h
字号:
#define HXR_NOTIMPL MAKE_HX_FACILITY_RESULT(1,0,0x4001) /* 80004001 */
#define HXR_OUTOFMEMORY MAKE_HX_FACILITY_RESULT(1,7,0x000e) /* 8007000e */
#define HXR_INVALID_PARAMETER MAKE_HX_FACILITY_RESULT(1,7,0x0057) /* 80070057 */
#define HXR_NOINTERFACE MAKE_HX_FACILITY_RESULT(1,0,0x4002) /* 80004002 */
#define HXR_POINTER MAKE_HX_FACILITY_RESULT(1,0,0x4003) /* 80004003 */
#define HXR_FAIL MAKE_HX_FACILITY_RESULT(1,0,0x4005) /* 80004005 */
#define HXR_ACCESSDENIED MAKE_HX_FACILITY_RESULT(1,7,0x0005) /* 80070005 */
#define HXR_OK MAKE_HX_FACILITY_RESULT(0,0,0) /* 00000000 */
#define HXR_INVALID_VERSION MAKE_HX_RESULT(1,SS_GLO,5) /* 80040005 */
#define HXR_UNEXPECTED MAKE_HX_RESULT(1,SS_GLO,9) /* 80040009 */
#define HXR_UNSUPPORTED_AUDIO MAKE_HX_RESULT(1,SS_GLO,15) /* 8004000f */
#define HXR_NOT_SUPPORTED MAKE_HX_RESULT(1,SS_GLO,33) /* 80040021 */
#define HXR_NO_DATA MAKE_HX_RESULT(0,SS_NET,2) /* 00040042 */
#define HXR_AT_END MAKE_HX_RESULT(0,SS_FIL,0) /* 00040080 */
#define HXR_INVALID_FILE MAKE_HX_RESULT(1,SS_FIL,1) /* 80040081 */
#define HXR_CORRUPT_FILE MAKE_HX_RESULT(1,SS_FIL,17) /* 80040091 */
#define HXR_READ_ERROR MAKE_HX_RESULT(1,SS_FIL,18) /* 80040092 */
#define HXR_BAD_FORMAT MAKE_HX_RESULT(1,SS_DPR,1) /* 80040fc1 */
#define HXR_DEC_NOT_FOUND MAKE_HX_RESULT(1,SS_DEC,1) /* 80040201 */
/* Define success and failure macros */
#define HX_SUCCEEDED(status) (((UINT32) (status) >> 31) == 0)
#define HX_FAILED(status) (((UINT32) (status) >> 31) != 0)
typedef void* (*rm_malloc_func_ptr)(void* pUserMem, UINT32 ulSize);
typedef void (*rm_free_func_ptr)(void* pUserMem, void* ptr);
typedef void (*rm_error_func_ptr)(void* pUserError, HX_RESULT err, const char* msg);
/* ra decoder backend interface */
typedef HX_RESULT(*ra_decode_init_func_ptr)(void* pInitParams,
UINT32 ulInitParamsSize,
ra_format_info* pStreamInfo,
void** pDecode,
void* pUserMem,
rm_malloc_func_ptr fpMalloc,
rm_free_func_ptr fpFree);
typedef HX_RESULT(*ra_decode_reset_func_ptr)(void* pDecode,
UINT16* pSamplesOut,
UINT32 ulNumSamplesAvail,
UINT32* pNumSamplesOut);
typedef HX_RESULT(*ra_decode_conceal_func_ptr)(void* pDecode,
UINT32 ulNumSamples);
typedef HX_RESULT(*ra_decode_decode_func_ptr)(void* pDecode,
UINT8* pData,
UINT32 ulNumBytes,
UINT32* pNumBytesConsumed,
UINT16* pSamplesOut,
UINT32 ulNumSamplesAvail,
UINT32* pNumSamplesOut,
UINT32 ulFlags);
typedef HX_RESULT(*ra_decode_getmaxsize_func_ptr)(void* pDecode,
UINT32* pNumSamples);
typedef HX_RESULT(*ra_decode_getchannels_func_ptr)(void* pDecode,
UINT32* pNumChannels);
typedef HX_RESULT(*ra_decode_getchannelmask_func_ptr)(void* pDecode,
UINT32* pChannelMask);
typedef HX_RESULT(*ra_decode_getrate_func_ptr)(void* pDecode,
UINT32* pSampleRate);
typedef HX_RESULT(*ra_decode_getdelay_func_ptr)(void* pDecode,
UINT32* pNumSamples);
typedef HX_RESULT(*ra_decode_close_func_ptr)(void* pDecode,
void* pUserMem,
rm_free_func_ptr fpFree);
typedef struct ra_decode_struct
{
void* pUserError;
rm_error_func_ptr fpError;
void* pUserMem;
rm_malloc_func_ptr fpMalloc;
rm_free_func_ptr fpFree;
ra_decode_init_func_ptr fpInit;
ra_decode_reset_func_ptr fpReset;
ra_decode_conceal_func_ptr fpConceal;
ra_decode_decode_func_ptr fpDecode;
ra_decode_getmaxsize_func_ptr fpGetMaxSize;
ra_decode_getchannels_func_ptr fpGetChannels;
ra_decode_getchannelmask_func_ptr fpGetChannelMask;
ra_decode_getrate_func_ptr fpGetSampleRate;
ra_decode_getdelay_func_ptr fpMaxSamp;
ra_decode_close_func_ptr fpClose;
void* pDecode;
} ra_decode;
typedef void rm_parser;
typedef struct rm_property_struct
{
char* pName;
UINT32 ulType;
BYTE* pValue;
UINT32 ulValueLen;
} rm_property;
typedef struct rm_stream_header_struct
{
char* pMimeType;
char* pStreamName;
UINT32 ulStreamNumber;
UINT32 ulMaxBitRate;
UINT32 ulAvgBitRate;
UINT32 ulMaxPacketSize;
UINT32 ulAvgPacketSize;
UINT32 ulDuration;
UINT32 ulPreroll;
UINT32 ulStartTime;
UINT32 ulOpaqueDataLen;
BYTE* pOpaqueData;
UINT32 ulNumProperties;
rm_property* pProperty;
} rm_stream_header;
typedef HX_RESULT(*ra_block_avail_func_ptr)(void* pAvail,
UINT32 ulSubStream,
ra_block* block);
typedef struct rm_rule_map_struct
{
UINT32 ulNumRules;
UINT32* pulMap;
} rm_rule_map;
typedef struct rm_multistream_hdr_struct
{
UINT32 ulID; /* unique identifier for this header */
rm_rule_map rule2SubStream; /* mapping of ASM rule number to substream */
UINT32 ulNumSubStreams; /* number of substreams */
} rm_multistream_hdr;
typedef struct ra_substream_hdr_struct
{
UINT16 usRAFormatVersion; /* 3, 4, or 5 */
UINT16 usRAFormatRevision; /* should be 0 */
UINT16 usHeaderBytes; /* size of raheader info */
UINT16 usFlavorIndex; /* compression type */
UINT32 ulGranularity; /* size of one block of encoded data */
UINT32 ulTotalBytes; /* total bytes of ra data */
UINT32 ulBytesPerMin; /* data rate of encoded and interleaved data */
UINT32 ulBytesPerMin2; /* data rate of interleaved or non-interleaved data */
UINT32 ulInterleaveFactor; /* number of blocks per superblock */
UINT32 ulInterleaveBlockSize; /* size of each interleave block */
UINT32 ulCodecFrameSize; /* size of each audio frame */
UINT32 ulUserData; /* extra field for user data */
UINT32 ulSampleRate; /* sample rate of decoded audio */
UINT32 ulActualSampleRate; /* sample rate of decoded audio */
UINT32 ulSampleSize; /* bits per sample in decoded audio */
UINT32 ulChannels; /* number of audio channels in decoded audio */
UINT32 ulInterleaverID; /* interleaver 4cc */
UINT32 ulCodecID; /* codec 4cc */
BYTE bIsInterleaved; /* 1 if file has been interleaved */
BYTE bCopyByte; /* copy enable byte, if 1 allow copies (SelectiveRecord) */
BYTE ucStreamType; /* i.e. LIVE_STREAM, FILE_STREAM */
BYTE ucScatterType; /* the interleave pattern type 0==cyclic,1==pattern */
UINT32 ulNumCodecFrames; /* number of codec frames in a superblock */
UINT32* pulInterleavePattern; /* the pattern of interleave if not cyclic */
UINT32 ulOpaqueDataSize; /* size of the codec specific data */
BYTE* pOpaqueData; /* codec specific data */
HXDOUBLE dBlockDuration; /* Duration in ms of audio "block" */
UINT32 ulLastSentEndTime; /* Ending time of last sent audio frame */
BYTE* pFragBuffer; /* Intermediate buffer for reconstructing VBR packets */
UINT32 ulFragBufferSize; /* Size of intermediate buffer */
UINT32 ulFragBufferAUSize; /* Size of AU being reconstructed */
UINT32 ulFragBufferOffset; /* Current offset within AU */
UINT32 ulFragBufferTime; /* Timestamp of AU being reconstructed */
UINT32 ulSuperBlockSize; /* ulInterleaveBlockSize * ulInterleaveFactor */
UINT32 ulSuperBlockTime; /* dBlockDuration * ulInterleaveFactor */
UINT32 ulKeyTime; /* Timestamp of keyframe packet */
BYTE* pIBuffer; /* Buffer holding interleaved blocks */
BYTE* pDBuffer; /* Buffer holding de-interleaved blocks */
UINT32* pIPresentFlags; /* number of UINT32s: ulInterleaveBlockSize */
UINT32* pDPresentFlags; /* number of UINT32s: ulInterleaveBlockSize */
UINT32 ulBlockCount; /* number of blocks currently in superblock */
UINT32* pulGENRPattern; /* Interleave pattern for GENR interleaver */
UINT32* pulGENRBlockNum;
UINT32* pulGENRBlockOffset;
rm_packet lastPacket;
HX_BITFIELD bIsVBR :
1;
HX_BITFIELD bSeeked :
1;
HX_BITFIELD bLossOccurred :
1;
HX_BITFIELD bHasKeyTime :
1; /* Do we have a time for the key slot? */
HX_BITFIELD bHasFrag :
1;
HX_BITFIELD bAdjustTimestamps :
1;
HX_BITFIELD bKnowIfAdjustNeeded :
1;
HX_BITFIELD bHasLastPacket :
1;
} ra_substream_hdr;
typedef struct ra_depack_internal_struct
{
void* pAvail;
ra_block_avail_func_ptr fpAvail;
rm_error_func_ptr fpError;
void* pUserError;
rm_malloc_func_ptr fpMalloc;
rm_free_func_ptr fpFree;
void* pUserMem;
rm_rule_map rule2Flag;
rm_multistream_hdr multiStreamHdr;
ra_substream_hdr* pSubStreamHdr;
UINT32 ulTrackStartTime;
UINT32 ulTrackEndTime;
UINT32 ulEndTime;
UINT32 ulStreamDuration;
HX_BITFIELD bForceTrackStartTime :
1;
HX_BITFIELD bForceTrackEndTime :
1;
HX_BITFIELD bStreamSwitchable :
1;
HX_BITFIELD bAllVBR :
1;
HX_BITFIELD bAllNonVBR :
1;
HX_BITFIELD bHasEndTime :
1;
} ra_depack_internal;
rm_parser* rm_parser_create(void* pError,
rm_error_func_ptr fpError);
ra_depack* ra_depack_create(void* pAvail,
ra_block_avail_func_ptr fpAvail,
void* pUserError,
rm_error_func_ptr fpError);
ra_decode* ra_decode_create(void* pUserError,
rm_error_func_ptr fpError);
HX_RESULT ra_decode_decode(ra_decode* pFrontEnd,
UINT8* pData,
UINT32 ulNumBytes,
UINT32* pNumBytesConsumed,
UINT16* pSamplesOut,
UINT32 ulNumSamplesAvail,
UINT32* pNumSamplesOut,
UINT32 ulFlags);
UINT32 rm_parser_get_max_bit_rate(rm_parser* pParser);
UINT32 rm_parser_get_avg_bit_rate(rm_parser* pParser);
UINT32 rm_parser_get_max_packet_size(rm_parser* pParser);
UINT32 rm_parser_get_avg_packet_size(rm_parser* pParser);
UINT32 rm_parser_get_num_packets(rm_parser* pParser);
UINT32 rm_parser_get_duration(rm_parser* pParser);
UINT32 rm_parser_get_preroll(rm_parser* pParser);
const char* rm_parser_get_title(rm_parser* pParser);
const char* rm_parser_get_author(rm_parser* pParser);
const char* rm_parser_get_copyright(rm_parser* pParser);
const char* rm_parser_get_comment(rm_parser* pParser);
UINT32 rm_parser_get_num_streams(rm_parser* pParser);
HX_RESULT rm_parser_get_stream_header(rm_parser* pParser,
UINT32 ulStreamNum,
rm_stream_header** ppHdr);
void rm_parser_destroy_stream_header(rm_parser* pParser,
rm_stream_header** ppHdr);
HX_RESULT rm_parser_get_packet(rm_parser* pParser,
rm_packet** ppPacket);
void rm_parser_destroy_packet(rm_parser* pParser,
rm_packet** ppPacket);
HX_RESULT rm_parser_seek(rm_parser* pParser,
UINT32 ulTime);
void rm_parser_destroy(rm_parser** ppParser);
HX_RESULT rm_parser_read_headers(rm_parser* pParser);
HX_RESULT rm_parser_init_stdio(rm_parser* pParser,
void* fp);
HXBOOL rm_parser_is_rm_file(BYTE* pBuf, UINT32 ulSize);
HX_RESULT rm_parser_get_packet_a(rm_parser* pParser,
rm_packet** ppPacket);
HX_RESULT rm_parser_get_packet_v(rm_parser* pParser,
rm_packet** ppPacket);
HX_RESULT ra_depack_init(ra_depack* pDepack, rm_stream_header* pHdr);
UINT32 ra_depack_get_num_substreams(ra_depack* pDepack);
UINT32 ra_depack_get_codec_4cc(ra_depack* pDepack, UINT32 ulSubStream);
HX_RESULT ra_depack_get_codec_init_info(ra_depack* pDepack,
UINT32 ulSubStream,
ra_format_info** ppInfo);
void ra_depack_destroy_codec_init_info(ra_depack* pDepack,
ra_format_info** ppInfo);
HX_RESULT ra_depack_add_packet(ra_depack* pDepack, rm_packet* pPacket);
void ra_depack_destroy_block(ra_depack* pDepack, ra_block** ppBlock);
HX_RESULT ra_depack_seek(ra_depack* pDepack, UINT32 ulTime);
void ra_depack_destroy(ra_depack** ppDepack);
HXBOOL rm_stream_is_realaudio(rm_stream_header* hdr);
HXBOOL rm_stream_is_realvideo(rm_stream_header* hdr);
UINT32 rm_stream_get_max_bit_rate(rm_stream_header* hdr);
UINT32 rm_stream_get_avg_bit_rate(rm_stream_header* hdr);
HX_RESULT ra_decode_getmaxsize(ra_decode* pFrontEnd,
UINT32* pNumSamples);
HX_RESULT ra_decode_getchannels(ra_decode* pFrontEnd,
UINT32* pNumChannels);
HX_RESULT ra_decode_getchannelmask(ra_decode* pFrontEnd,
UINT32* pChannelMask);
HX_RESULT ra_decode_getrate(ra_decode* pFrontEnd,
UINT32* pSampleRate);
HX_RESULT ra_decode_init(ra_decode* pFrontEnd,
UINT32 ulFourCC,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -