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

📄 mpgstruct.h

📁 这是DVD中伺服部分的核心代码
💻 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 + -