⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prmdec.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 H
📖 第 1 页 / 共 3 页
字号:

#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 + -