📄 mpgstruct.h
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2002 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
******************************************************************************
*****************************************************************************/
/**
* @file mpgstruct.h
*
* Mpeg parsing types and defines
*
* $Id: mpgstruct.h,v 1.5 2006/05/02 15:52:02 micah Exp $
*/
#ifndef MPGSTRUCT_H
#define MPGSTRUCT_H
#ifdef __cplusplus
extern "C" {
#endif
//#pragma pack(push , MPGSTRUCT_PACK )
//#pragma pack(1)
/**
* @def MPEG1 Specific Defines
* @brief Used only by the MPEG1 Demux.
*/
#define MPEG1_PACK_HEADER_LENGTH 8
#define MPEG1_SCR_INFO_LENGTH 5
#define MPEG1_MAX_STUFFING_BYTES 16
#define MPEG1_VCD_STD_SIZE 2
#define MPEG1_VCD_STD_ID_MASK 0xc0
#define MPEG1_VCD_STD_ID 0x40
#define MPEG1_STUFFING_BYTE 0xFF
/**
* @def MPEG2 Specific Defines
* @brief Used only by the MPEG2 Demux.
*/
#define MPEG2_PTS_MASK 0x80
#define MPEG2_PTS_DTS_MASK 0xc0
#define MPEG2_SCR_INFO_LENGTH 9
#define MPEG2_SUB_ID_INFO_LENGTH 1
/**
* @def Miscellaneous MPEG Defines
* @brief Used by both the MPEG1 Demux and the MPEG2 Demux.
*/
#define MPEG_START_CODE_LENGTH 4
#define MPEG_HEADER_LENGTH_SIZE 2
#define MPEG_PTS_MASK 0x20
#define MPEG_PTS_DTS_MASK 0x30
#define MPEG_SCR_BASE_SIZE 5
#define MPEG_SCR_EXT_SIZE 2
#define MPEG_PTS_DATA_SIZE 5
#define MPEG_DTS_DATA_SIZE 5
#define MPEG_PTS_DTS_DATA_SIZE 10
#define MPEG_VIDEO_DATA 0
#define MPEG_AUDIO_DATA 1
#define AC3_AUDIO_DATA 2
#define NO_SUB_ID 0xFF
/**
* @def MPEG Demux Start Code Defines
* @brief Used when identifing the stream type.
*/
#define MPEG_PICTURE_START_CODE 0x00000100L
#define MPEG_SLICE_START_CODE_MIN 0x00000101L
#define MPEG_SLICE_START_CODE_MAX 0x000001AFL
#define MPEG_USER_DATA_START_CODE 0x000001B2L
#define MPEG_SEQUENCE_HEADER_CODE 0x000001B3L
#define MPEG_SEQUENCE_ERROR_CODE 0x000001B4L
#define MPEG_EXTENSION_START_CODE 0x000001B5L
#define MPEG_SEQUENCE_END_CODE 0x000001B7L
#define MPEG_GROUP_START_CODE 0x000001B8L
#define MPEG_SYSTEM_START_CODE_MIN 0x000001B9L
#define MPEG_SYSTEM_START_CODE_MAX 0x000001FFL
#define MPEG_ISO_END_CODE 0x000001B9L
#define MPEG_PACK_HEADER_START_CODE 0x000001BAL
#define MPEG_SYSTEM_HEADER_START_CODE 0x000001BBL
#define MPEG_PROGRAM_STREAM_MAP_START_CODE 0x000001BCL
#define MPEG_PRIVATE_STREAM_1_START_CODE 0x000001BDL
#define MPEG_PADDING_STREAM_START_CODE 0x000001BEL
#define MPEG_PRIVATE_STREAM_2_START_CODE 0x000001BFL
#define MPEG_AUDIO1_PACKET_START_CODE_BEGIN 0x000001C0L
#define MPEG_AUDIO1_PACKET_START_CODE_END 0x000001C7L
#define MPEG_AUDIO2_PACKET_START_CODE_BEGIN 0x000001D0L
#define MPEG_AUDIO2_PACKET_START_CODE_END 0x000001D7L
#define MPEG_VIDEO_PACKET_START_CODE_BEGIN 0x000001E0L
#define MPEG_VIDEO_PACKET_START_CODE_END 0x000001EFL
#define MPEG_VIDEO_VC1_PACKET_START_CODE 0x000001FDL
#define VIDEO_ELEMENTARY_STREAM 0x000001E0L
#define AUDIO_ELEMENTARY_STREAM 0x000001C0L
#define PCM_SUB_STREAM_ID( x ) ((x & 0xf0) == 0xa0)
#define AC3_SUB_STREAM_ID( x ) ((x & 0xf0) == 0x80)
#define SEQUENCE_EXTENSION_ID 0x1
#define SEQUENCE_DISPLAY_EXTENSION_ID 0x2
#define QUANT_MATRIX_EXTENSION_ID 0x3
#define COPYRIGHT_EXTENSION_ID 0x4
#define SEQUENCE_SCALABLE_EXTENSION_ID 0x5
#define PICTURE_DISPLAY_EXTENSION_ID 0x7
#define PICTURE_CODING_EXTENSION_ID 0x8
#define PICTURE_SPATIAL_SCALABLE_EXTENSION_ID 0x9
#define PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID 0xa
#define MPG_TRANSPORT_SIZE 188
#define MPG_SYNC_BYTE 0x47
#define MPG_PROGRAM_ASSOCIATION_TABLE_PID 0x0000
#define MPG_CONDITIONAL_ACCESS_TABLE_PID 0x0001
// PIDs from 0x0002-0x000F are reserved
// PIDs from 0x0010-0x1FFE may be assigned
#define MPG_NULL_PACKET_PID 0x1FFF
/**
* @def DVD Specific defines
*/
/* Audio stream */
#define DVD_A_PKT_AUDIO_FRAME_INFO_LENGTH (3)
#define DVD_A_PKT_AUDIO_DATA_INFO_LENGTH (3)
#define DVD_A_PKT_AUDIO_SUBSTREAM_ID_MASK_AC3 (0xF8)
#define DVD_A_PKT_AUDIO_SUBSTREAM_ID_AC3 (0x80)
#define DVD_A_PKT_AUDIO_SUBSTREAM_ID_MASK_LPCM (0xF8)
#define DVD_A_PKT_AUDIO_SUBSTREAM_ID_LPCM (0xA0)
// Transport Headers
typedef struct _tagMpg_Transport_Header
{
ULONG bSyncByte : 8;
ULONG wTransportErrorIndicator : 1;
ULONG wPayloadUnitStartIndicator : 1;
ULONG wTransportPriority : 1;
ULONG wPID : 13;
ULONG bTransportScramblingControl : 2;
ULONG bAdaptationFieldControl : 2;
ULONG bContinuityCounter : 4;
} __attribute__ ((packed)) MPG_TRANSPORT_HDR, *PMPG_TRANSPORT_HDR;
// Adaptation Header
typedef struct _tagMpg_Adaptation_Header
{
BYTE bLength;
BYTE bDiscontinuityIndicator : 1;
BYTE bRandomAccessIndicator : 1;
BYTE bElementaryStreamPriorityIndicator : 1;
BYTE bPCRFlag : 1;
BYTE bOPCRFlag : 1;
BYTE bSplicingPointFlag : 1;
BYTE bTransportPrivateDataFlag : 1;
BYTE bAdaptationFieldExtensionFlag : 1;
} MPG_ADAPTATION_HDR, *PMPG_ADAPTATION_HDR;
typedef struct _tagMpg_Adaptation_PCR
{
SHORT wProgramClockReferenceBase1;
SHORT wProgramClockReferenceBase2;
SHORT wProgramClockReferenceExtension : 9;
SHORT wReserved : 6;
SHORT wProgramClockReferenceBase3 : 1;
} MPG_ADAPTATION_PCR, *PMPG_ADAPTATION_PCR;
// PSI Header
typedef struct _tagMpg_Psi_Header
{
BYTE bID;
SHORT wSectionLength : 12;
SHORT wReserved : 2;
SHORT wZero : 1;
SHORT wSectionSyntaxIndicator : 1;
} MPG_PSI_HDR, *PMPG_PSI_HDR;
// PAT Info
typedef struct _tagMpg_Pat_Header
{
SHORT wTransportStreamID;
BYTE bCurrentNextIndicator : 1;
BYTE bVersionNumber : 5;
BYTE bReserved : 2;
BYTE bSectionNumber;
BYTE bLastSectionNumber;
} MPG_PAT_HDR, *PMPG_PAT_HDR;
typedef struct _tagMpg_PAS_Program_Number
{
SHORT wProgramNumber;
SHORT wPid : 13;
SHORT wReserved : 3;
} MPG_PAS_NUMBER, *PMPG_PAS_NUMBER;
// PMT Headers
typedef struct _tagMpg_PMT_Header
{
SHORT wProgramNumber;
BYTE bCurrentNextIndicator : 1;
BYTE bVersionNumber : 5;
BYTE bReserved : 2;
BYTE bSectionNumber;
BYTE bLastSectionNumber;
SHORT wPCRPid : 13;
SHORT wReserved : 3;
SHORT wProgramInfoLength : 12;
SHORT wReserved2 : 4;
} MPG_PMT_HDR, *PMPG_PMT_HDR;
typedef struct _tagMpg_Pid_Descriptor
{
BYTE bStreamType;
SHORT wElementaryPid : 13;
SHORT wReserved : 3;
SHORT wProgramInfoLength : 12;
SHORT wReserved2 : 4;
} MPG_PID_DESCRIPTOR, *PMPG_PID_DESCRIPTOR;
// MISC
typedef struct _tagMpg_Pack_Header
{
ULONG dwStartCode;
BYTE bRevision : 2; // '00' mpeg1, '01' mpeg2
BYTE bSCR32_30 : 3; // [32..30] system clock reference
BYTE bMarkerBit1 : 1; // marker bit
BYTE bSCR29_28 : 2; // [29..28]
#define MPG_MPEG1_STREAM 0x00
#define MPG_MPEG2_STREAM 0x01
BYTE bSCR27_20; // [27..20]
BYTE bSCR19_15 : 5; // [19..15]
BYTE bMarkerBit2 : 1; // marker bit
BYTE bSCR14_13 : 2; // [14..13]
BYTE bSCR12_5; // [12..5]
BYTE bSCR4_0 : 5; // [4..0]
BYTE bMarkerBit3 : 1; // marker bit
BYTE bSCRExt8_7 : 2; // [8..7]
BYTE bSCRExt6_0 : 7; // [6..0] system clock reference extension
BYTE bMarkerBit4 : 1; // market bit
BYTE bMuxRate21_14;
BYTE bMuxRate13_6; // [21 ..6] program mux rate
BYTE bMuxRate5_0 : 6; // [5..0] program muxrate
BYTE bMarkerBit5 : 2; // marker bit
BYTE bReserved : 5; // reserved
BYTE bStuffingLength: 3; // pack stuffing length
} MPG_PACK_HDR;
typedef MPG_PACK_HDR *PMPG_PACK_HDR;
typedef struct Mpg_Gop_Header
{
ULONG dwStartCode;
ULONG dwFiller1 : 5;
ULONG dwBrokenLink : 1;
ULONG dwClosedGOP : 1;
ULONG dwTimeCodePictures : 6;
ULONG dwTimeCodeSeconds : 6;
ULONG dwMarkerBit : 1;
ULONG dwTimeCodeMinutes : 6;
ULONG dwTimeCodeHours : 5;
ULONG dwDropFrameFlag : 1;
} MPG_GOP_HDR, *PMPG_GOP_HDR;
typedef struct Mpg_Pes_Header
{
ULONG dwStartCode;
SHORT wLength;
BYTE bMarkerBit : 2;
BYTE bPESScramblingControl : 2;
BYTE bPESPriority : 1;
BYTE bDataAlignmentIndicator : 1;
BYTE bCopyright : 1;
BYTE bOriginalOrCopy : 1;
#define MPG_PES_PTS_FLAG 0x02
#define MPG_PES_DTS_FLAG 0x01
BYTE bPTSDTSFlags : 2;
BYTE bESCRFlag : 1;
BYTE bESRateFlag: 1;
BYTE bDSMTrickModeFlag : 1;
BYTE bAdditionalCopyInfoFlag : 1;
BYTE bPESCRCFlag : 1;
BYTE bPESExtensionFlag : 1;
BYTE bPES_header_data_length;
} __attribute__ ((packed)) MPG_PES_HDR, *PMPG_PES_HDR;
typedef struct Mpg_Packet_PTS
{
BYTE bRevision : 4; // '0010'=> PTS only '0011' => both
BYTE bPTS32_30 : 3; // [32..30] PTS fields
BYTE bMarkerBit1 : 1; //marker bit
BYTE bPTS29_22; // [29..22] PTS
BYTE bPTS21_15 : 7; // [21..15] PTS
BYTE bMarkerBit2 : 1; //market bit
BYTE bPTS14_7; // [14..7] PTS
BYTE bPTS6_0 : 7; // [6..0] PTS
BYTE bMarkerBit3 : 1; //market bit
} MPG_PACKET_PTS, *PMPG_PACKET_PTS;
typedef struct Mpg_Packet_DTS
{
BYTE bRevision : 4; //reserved => '0001'
BYTE bDTS32_30 : 3; // [32..30] DTS fields
BYTE bMarkerBit1 : 1; //marker bit
BYTE bDTS29_22; // [29..22] DTS
BYTE bDTS21_15 : 7; // [21..15] DTS
BYTE bMarkerBit2 : 1; //market bit
BYTE bDTS14_7; // [14..7] DTS
BYTE bDTS6_0 : 7; // [6..0] DTS
BYTE bMarkerBit3 : 1; //market bit
} MPG_PACKET_DTS, *PMPG_PACKET_DTS;
typedef struct Mpg_Seq_Header
{
ULONG dwStartCode;
ULONG dwPictureRate : 4;
ULONG dwPelAspectRatio : 4;
ULONG dwVerticalSizeValue : 12;
ULONG dwHorizonalSizeValue : 12;
ULONG dwLoadNonIntraQuantiserMatrix : 1;
ULONG dwLoadIntraQuantiserMatrix : 1;
ULONG dwConstrainedParametersFlag : 1;
ULONG dwVbvBufferSizeValue : 10;
ULONG dwMarkerBit : 1;
ULONG dwBitRateValue : 18;
} MPG_SEQ_HDR;
typedef MPG_SEQ_HDR *PMPG_SEQ_HDR;
typedef struct Mpg_Ext_Seq_Header
{
ULONG dwStartCode;
ULONG dwMarkerBit : 1;
ULONG dwBitRateExtension : 12;
ULONG dwVerticalSizeExtension : 2;
ULONG dwHorizontalSizeExtension : 2;
ULONG dwChromaFormat : 2;
ULONG dwProgressiveSequence : 1;
ULONG dwProfileAndLevelIndication : 8;
ULONG dwExtensionStartCodeIndicator : 4;
BYTE bVbvBufferSizeExtension;
BYTE bFrameRateExtensionD : 5;
BYTE bFrameRateExtensionN : 2;
BYTE bLowDelay : 1;
} MPG_EXT_SEQ_HDR, *PMPG_EXT_SEQ_HDR;
#define MPG_IS_LPCM(x) ( ((x & 0xf8) == 0xa0) ? 0 : 1)
typedef struct Mpg_Ps1_Header
{
BYTE bSubStreamId;
// General info
BYTE bNumberOfFrameHeaders;
SHORT wFirstAccessUnitPointer;
// LPCM info
BYTE bAudioFrameNumber : 5;
BYTE bReserved1 : 1;
BYTE bAudioMuteFlag : 1;
BYTE bAudioEmphasisFlag : 1;
BYTE bNumberOfAudioChannels : 3;
BYTE bReserved2 : 1;
BYTE bAudioSamplingFrequency : 2;
BYTE bQuantizationWordLength : 2;
BYTE bDynamicRangeControl;
} MPG_PS1_HDR, *PMPG_PS1_HDR;
//
// AC-3 Definitions
//
#define AC3_SYNCCODE 0x0B77
#define AC3_FS_48KHZ 0x00
#define AC3_FS_44_1KHZ 0x01
#define AC3_FS_32KHZ 0x02
typedef struct AC3_Sync_Header
{
SHORT wSync;
SHORT wCrc1;
BYTE bFrmSizeCode : 6;
BYTE bFsCod : 2;
} AC3_SYNC_HDR, *PAC3_SYNC_HDR;
typedef struct AC3_Bsi_Header
{
BYTE bBsMod : 3;
BYTE bBsiId : 5;
BYTE bReserved : 5;
BYTE bAcMod : 3;
} AC3_BSI_HDR, *PAC3_BSI_HDR;
//#pragma pack(pop , MPGSTRUCT_PACK )
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -